【1】頁面之間無法傳遞變量 get,post,session在最新的php版本中自動全局變量是關閉的,所以要從上一頁面取得提交過來得變量要使用$_GET['foo'],$ _POST['foo'],$_SESSION['foo']來得到。當然也可以修改自動全局變量為開(php.ini改為 register_globals = On);考慮到兼容性,還是強迫自己熟悉新的寫法比較好。
3 x# T4 T$ _# c0 E7 r4 `4 ~( k1 W& `$ L5 O- p
【2】Win32下apache2 用get方法傳遞中文參數會出錯:/ E5 {. H2 w) p9 x, T
9 @8 k/ x! e m$ d9 x; }
test.php?a=你好&b=你也好
& x$ ?, w" k; d7 \9 J0 q% ~5 A2 H$ M
傳遞參數是會導致一個內部錯誤! O. O- j, |. L, T1 o
" ?' H. v4 u) f" o- o( W4 c
解決辦法:"test.php?a=".urlencode(你好)."&b=".urlencode(你也好)/ p8 j$ E* [; {3 _
8 ^2 [2 P1 B+ ^7 u9 g- R
.............8 X3 [8 A4 p# _# ?( j, t, {% x+ e& t
0 ]8 b( F' w' M A6 ]【3】win32下的session不能正常工作
8 P/ ?- U* [% {$ O$ u; x$ K
1 B3 O, {# t( Sphp.ini默認的session.save_path = /tmp* w) ^1 ? M' |
$ F* n* Y/ d2 ?* f, V這顯然是linux下的配置,win32下php無法讀寫session文件導致session無法使用,把它改成一個絕對路徑就可以了,例如session.save_path = c:windows emp
# g) z1 B- O6 A/ U& ~/ V
$ N) k2 s" s3 d+ L* S6 w$ v【4】顯示錯誤信息
( k% [! {3 w" z( |5 g& N* T
7 t0 \" ?- G. Z: M當php.ini的display_errors = On並且error_reporting = E_ALL時,將顯示所有的錯誤和提示,調試的時候最好打開以便糾錯,如果你用以前php寫法錯誤信息多半是關於未定義變量的。變量在賦值以前調用會有提示,解決辦法是探測或者屏蔽。: a4 p6 f; ]" c1 `
% j- C1 \+ Y- c& v; F例如顯示$foo,可以if(isset($foo)) echo $foo 或者echo @$foo
" N9 q X) h: b8 J: t7 I4 Z2 D! {1 n3 d% E
【5】Win32下mail()不能發送電子郵件# s& T5 X# @7 P8 e- C# A F
- f C2 L- ^1 _7 H+ B
在linux下配置好的sendmail可以發送,在win32下需要調用smtp服務器來發送電子郵件,修改php.ini的SMTP = ip //ip是不帶驗證功能的smtp服務器(網上很難找到)5 g+ C; f, i8 ~% u- ~, ` L% l
8 v1 V, I" y9 x D
php發送郵件的最好解決方法是用socket直接發送到對方email服務器而不用轉發服務器。
+ {! n* K i3 g9 U T& K2 O# T6 ?! W( E/ @
【6】初裝的mysql如果沒有設置密碼,應該使用update mysql.user set password="yourpassword" where user="root" 修改密碼
+ k7 O( p. {6 p" L) U" J8 K( D" M; q' M7 v& @3 P, ^' R8 g; C
【7】header already sent
& a7 [7 d, ?" y: P x
@ H* o# o& z這個錯誤通常會在你使用HEADER的時候出現,他可能是幾種原因:1,你在使用HEADER前PRING或者ECHO了2.你當前文件前面有空行3.你可能INCLUDE了一個文件,該文件尾部有空行或者輸出也會出現這種錯誤。!- e- V) @5 U( C- k* z- g! m
$ b0 P) W' L! n ^- L
【8】更改php.ini後沒有變化2 u' W* f6 a) k; i0 c. h
* T, q. }2 A' W7 q2 D
重新啟動web server,比如IIS,Apache等等,然後才會應用最新的設置。
: ~$ }/ ?3 k* m. N6 `1 u) M: J/ y6 ^
【9】php在2003上面安裝(ISAPI的安裝方法懇請高手指教)) M6 _* r6 [/ v
& b- P1 P+ J+ h
PHP4的php4isapi.dll好像和2003有些衝突,只能用CGI模式安裝
" Z1 F! G% h }( v/ s1 x
~$ Y1 S9 J6 ]1 _' @4 ]! p( x步驟一,先www.php.net 下在一個安裝程序,我是裝的是:php-4.2.3-installer.exe,你也可以去找最新的版本,在安裝php-4.2.3- installer.exe之前保證你的IIS6.0啟動了,並能夠訪問。安裝好以後,在默認網站-->應用程序配置。
' W" n) a2 B! r1 Z& \0 c0 d
( X$ g4 x$ e6 L" C步驟二:點擊 web服務擴展 -->新建web服務擴展。7 l* P) f; |) I; n" m
o1 z1 o5 b5 P+ t1 v @
步驟三: 擴展名-->php,然後添加. Z) X8 Z/ O2 [
5 _' r8 g [9 q* @# ~
步驟四:找到php.exe的路徑添加上去。
7 u& A$ V$ l% g# k8 b
, j) D4 y; f1 \! z9 I6 v步驟五: 確定就可以了!* f: |4 ~: L5 D7 @- U. k
w, ?' l U. I* G2 K+ U& K
步驟六: 選擇php的服務擴展,然後點擊允許。
7 }+ F n/ [( W" d; W H4 u" [9 t v( p- O2 t- b5 m- y c
【10】有時候sql語句不起作用,對數據庫操作失敗,最簡便的調試方法,echo那句sql,看看變量的值能得到不。
; y% q' A9 |' F$ Z8 ?8 H
7 n4 G n- Y2 d6 f, J6 ?1 @【11】include和require的區別& q" {$ M; b* l9 \
9 V* u* `- t' M! B! ?
兩者沒有太大的區別,如果要包含的文件不存在,include提示notice,然後繼續執行下面的語句,require提示致命錯誤並且退出。
7 q( `" y9 b+ e) I: C# v! X8 a z0 z5 A8 R% N
據我測試,win32平台下它們都是先包含後執行,所以被包含文件裡最好不要再有include或require語句,這樣會造成目錄混亂。或許*nux下情況不同,暫時還沒測試。
8 m* r. Y$ ^5 E; H" x, T7 k
' k9 m# C& i6 U" J- l+ Q' t1 [6 l7 v& f如果一個文件不想被包含多次可以使用include_once或require_once## 讀取,寫入文檔數據。
Z* D2 V) P4 \1 Q z( }, Q4 X1 j
1 G9 ~; W+ y8 EPHP 代碼:! [: g5 J1 Z% x) Z. ]
function r($file_name) {% m. @; X! [4 k0 k2 E% a1 b
$filenum=@fopen($file_name,"r");
. Y" J5 o- B2 ?% y* K @flock($filenum,LOCK_SH);
( y4 C l- e; O6 r' M1 Q( }: j $file_data=@fread($filenum,filesize($file_name));. `, W( L* k9 S; j$ T
@fclose($filenum);) }3 Q6 I3 k$ k8 U* v
return $file_data;
) _7 U0 I7 D& Q& l+ K( V}
$ _* J- u T5 @, K9 P. F# o) bfunction w($file_name,$data,$method="w"){
' _' M+ ^2 n- m) Y $filenum=@fopen($file_name,$method);4 n$ P) T8 p8 w, X
flock($filenum,LOCK_EX);
, a6 F$ L* X$ ?! t $file_data=fwrite($filenum,$data);
- k v* H k; i$ |5 ~, ^; R5 u fclose($filenum);0 ^ R2 c) w, J! [% p y; x( h" k
return $file_data;
( B1 _" o8 q2 ?3 \}
) a9 X# _' \/ C7 N$ |! d5 W
# ^) {! w( e" A6 U) _3 p% h【12】isset()和empty()的區別0 U/ N) n; d6 C
5 s- F! U: J! f
兩者都是測試變量用的,但是isset()是測試變量是否被賦值,而empty()是測試一個已經被賦值的變量是否為空。# ~% |! _$ h' H% W; |. v. s
0 Q* k: D& M( \, ?( q
如果一個變量沒被賦值就引用在php裡是被允許的,但會有notice提示,如果一個變量被賦空值,$foo=""或者$foo=0或者 $foo=false,那麼empty($foo)返回真,isset($foo)也返回真,就是說賦空值不會註銷一個變量。/ `, e/ O; m3 z* E. Q- n: @
3 D; }) D, _3 I- z- W0 x7 i+ N要註銷一個變量,可以用 unset($foo)或者$foo=NULL
% O* {9 W- i, M. e' y% m7 }4 v, [2 C, v* C6 I8 n' J. i
【13】mysql查詢語句包含有關鍵字
9 P( M1 C, i' T, V. K, t; l2 T" f9 W* C( y' [! A0 l
php查詢mysql的時候,有時候mysql表名或者列名會有關鍵字,這時候查詢會有錯誤。例如表名是order,查詢時候會出錯,簡單的辦法是sql語句裡表名或者列名加上`[tab鍵上面]來加以區別,例如select * from `order`
( v) {, y+ r4 f9 \
2 z& N+ T: |3 G% }$ u) Z2 F【14】通過HTTP協議一次上傳多個文件的方法/ s1 I% p& R& U0 ?8 A! h' @
2 K' ^1 U& {9 O. z$ h& _: I有兩個思路,是同一個方法的兩種實現。具體程序還需自己去設計。
7 E4 [+ t2 ^3 J; j- C8 r9 j* R) G6 e9 I: e H
1、在form中設置多個文件輸入框,用數組命名他們的名字,如下:
4 |4 h- {2 e: n y, ^. C* n7 ?0 j1 v5 @& D8 H: B$ j' Q
PHP 代碼:$ H" Z- _/ n- S# ]& J# F8 q
<form action="" method=post>
- m, U' u `* ~+ l& |5 |' r<input type=file name=usefile[]>
/ F* I4 _ N' I<input type=file name=usefile[]>" [8 \0 Y) k7 i' x( U& Z( p; t
<input type=file name=usefile[]>
/ N6 w# y/ Y4 d+ z4 i% S</form>
. ~2 d) u$ X( R; k5 H. ]
v" z! Y; p3 Z, {* w這樣,在服務器端做以下測試:" H7 F L+ I% K
' l( y& O ?4 [; e! s
PHP 代碼:
c) N! r R9 x3 ]' lecho "<pre>";4 z9 t( |$ l6 y0 x: E( }
print_r($_FILES);3 G/ d% G* D- Z5 I4 l
echo "</pre>";
- g1 ~- g8 y3 W: ~; n
9 c* c$ e1 C, \% d2、在form中設置多個文件輸入框,但名字不同,如下:' s& _4 i+ Q% |! o8 M; l- H, s
* l! M/ [' Y- j6 NPHP 代碼:
. X( V3 x( T% L9 {. Q6 R<form action="" method=post># p! T% o3 p2 V4 P5 T1 u9 N1 a
<input type=file name=usefile_a>
( L: Y. j* _. Z4 j& Y3 W<input type=file name=usefile_b>
, C+ K q& J5 e' [<input type=file name=usefile_c>
2 a: \2 _7 H# E; _% M( U/ V6 a</form> ; @9 g& k( b6 c e8 O6 K" u
9 A- Q; {) L# V/ B) w
在服務器端做同樣測試:
4 C( X. f C6 C: Y! u# t! v0 S3 i- W# U
PHP 代碼:! k+ U8 y! ^. l0 n g9 @
echo "<pre>";
6 W" K2 r f) n9 Oprint_r($_FILES);7 m* z$ a; Y4 g, \" @0 R6 X$ U7 }
echo "</pre>"; |
評分
-
查看全部評分
|