【1】頁面之間無法傳遞變量 get,post,session在最新的php版本中自動全局變量是關閉的,所以要從上一頁面取得提交過來得變量要使用$_GET['foo'],$ _POST['foo'],$_SESSION['foo']來得到。當然也可以修改自動全局變量為開(php.ini改為 register_globals = On);考慮到兼容性,還是強迫自己熟悉新的寫法比較好。7 E4 C9 M: O1 C+ G+ g1 W
/ e2 p4 i; \) Z, F0 B
【2】Win32下apache2 用get方法傳遞中文參數會出錯:4 a: [* Y) a( A7 S+ T" C! C
& q- G3 ^; X( k% Ytest.php?a=你好&b=你也好
* c+ s- t+ R. U* H* x6 n
4 i& k2 i( X) O/ |. `傳遞參數是會導致一個內部錯誤
A$ h% z: u7 s, X' \% j: e. q3 L6 t: Q/ _7 p* v$ I
解決辦法:"test.php?a=".urlencode(你好)."&b=".urlencode(你也好)# S/ L' G: k" J' P
9 H0 k' {2 a+ _1 O% E
.............
) W) [. r ?. f( K8 t
/ S2 L/ M; W0 ]/ c【3】win32下的session不能正常工作
! g; N4 @+ B) N
; _1 ~; [ x( Iphp.ini默認的session.save_path = /tmp
; D8 I& F: } X. q; a9 C; D& {& L/ X- n1 f" S! ]1 m& n
這顯然是linux下的配置,win32下php無法讀寫session文件導致session無法使用,把它改成一個絕對路徑就可以了,例如session.save_path = c:windows emp
7 A$ {* j5 A. q. i( w$ c# ^/ _5 ?6 x
【4】顯示錯誤信息
4 p& V' @2 a: e+ m0 D8 k/ }
9 x9 p4 N; {- D6 {" k w當php.ini的display_errors = On並且error_reporting = E_ALL時,將顯示所有的錯誤和提示,調試的時候最好打開以便糾錯,如果你用以前php寫法錯誤信息多半是關於未定義變量的。變量在賦值以前調用會有提示,解決辦法是探測或者屏蔽。4 b7 H! Q: }& ]8 e' v
! s$ U# q& e" Y6 D& D: w \' L例如顯示$foo,可以if(isset($foo)) echo $foo 或者echo @$foo
6 p: P# I$ Z4 t# V1 a; \6 K% f
3 q1 C# P5 k7 p+ R: c1 l/ l& K【5】Win32下mail()不能發送電子郵件, I! f4 B8 W5 L9 b: P/ \
! t% g7 \1 j- W
在linux下配置好的sendmail可以發送,在win32下需要調用smtp服務器來發送電子郵件,修改php.ini的SMTP = ip //ip是不帶驗證功能的smtp服務器(網上很難找到)
, l% z4 p& X. B8 z% k
@! R$ \$ x: _php發送郵件的最好解決方法是用socket直接發送到對方email服務器而不用轉發服務器。
7 ~5 J, h. n9 y. _" m
1 p8 C; o/ T8 o6 ~" L! H【6】初裝的mysql如果沒有設置密碼,應該使用update mysql.user set password="yourpassword" where user="root" 修改密碼
* e+ Z& S K+ h) ~+ ?* t8 k# e, Y+ q5 l2 P$ a7 M
【7】header already sent
9 K* y& M6 I2 U( {( ~% v5 P: v f" o' O
這個錯誤通常會在你使用HEADER的時候出現,他可能是幾種原因:1,你在使用HEADER前PRING或者ECHO了2.你當前文件前面有空行3.你可能INCLUDE了一個文件,該文件尾部有空行或者輸出也會出現這種錯誤。!1 D, I3 ^3 E( F" D0 b" i, v$ h% s
; t; y _+ L/ Q0 Y0 S' B【8】更改php.ini後沒有變化
4 w) W/ V4 U( E( n" {
# ~6 h: U2 k7 N6 s: T重新啟動web server,比如IIS,Apache等等,然後才會應用最新的設置。
9 M' F P+ {) A! H9 ^& ]% u1 O I& w
【9】php在2003上面安裝(ISAPI的安裝方法懇請高手指教)3 C; N9 V6 X9 C B- ^
. w1 f: v7 r" q
PHP4的php4isapi.dll好像和2003有些衝突,只能用CGI模式安裝9 Q; q, Z1 K9 z3 U3 `/ B. Z
3 V9 s* F1 g' l1 i; P, [步驟一,先www.php.net 下在一個安裝程序,我是裝的是:php-4.2.3-installer.exe,你也可以去找最新的版本,在安裝php-4.2.3- installer.exe之前保證你的IIS6.0啟動了,並能夠訪問。安裝好以後,在默認網站-->應用程序配置。
2 o Z- T( v4 J( D4 Y# K) Q) e# l
4 y2 A$ _) g. t# p9 Q1 y, Z步驟二:點擊 web服務擴展 -->新建web服務擴展。
5 f( }* p+ J! O1 @" q6 W+ v( w6 Z+ m- x- r3 F" U
步驟三: 擴展名-->php,然後添加/ Z5 J, X4 ]3 m) [. x6 ?8 ]/ }
Z! n9 B3 B& o+ @
步驟四:找到php.exe的路徑添加上去。1 h0 g d9 i; e5 s; m2 h
! _3 w7 K* {2 m3 _步驟五: 確定就可以了!
5 f- o% r! @9 d) {) D1 f
) }' x$ B8 b9 Z# J F( \8 O步驟六: 選擇php的服務擴展,然後點擊允許。
% s U/ l# o. U) j8 j; D, Z" k# \( T: x6 b9 `9 {) K: l) @! ]
【10】有時候sql語句不起作用,對數據庫操作失敗,最簡便的調試方法,echo那句sql,看看變量的值能得到不。
0 c4 l; o: s2 r7 C
' @; J% A( N }" `+ O- m【11】include和require的區別
3 j, Y9 e% F) ^% v5 [
, k/ D5 ^8 D) v+ {) h兩者沒有太大的區別,如果要包含的文件不存在,include提示notice,然後繼續執行下面的語句,require提示致命錯誤並且退出。4 l' R" ]2 K* t) x) G; Q6 L7 f
9 j$ q5 @* E9 d, I# _& v7 N9 D
據我測試,win32平台下它們都是先包含後執行,所以被包含文件裡最好不要再有include或require語句,這樣會造成目錄混亂。或許*nux下情況不同,暫時還沒測試。
0 @4 k# @( H- o4 W$ l$ z+ f2 J5 V
如果一個文件不想被包含多次可以使用include_once或require_once## 讀取,寫入文檔數據。7 S" u$ I6 U( o
. K% t! ] j) y FPHP 代碼:
' }( `. q/ o! e) Ifunction r($file_name) {
2 Q* v; Y7 W# @5 P+ G $filenum=@fopen($file_name,"r");
/ x$ x8 E& }6 \9 V1 K @flock($filenum,LOCK_SH); S9 W1 f2 T3 D
$file_data=@fread($filenum,filesize($file_name));
# _5 n+ Z0 K) F- a6 S @fclose($filenum);
* P6 d' U* ?, G' W! ]" B return $file_data;" ^1 }0 W/ W6 ], W+ c5 M
}
$ k' W f$ O; o7 W" {1 \function w($file_name,$data,$method="w"){
/ j; h. e( u6 u% H $filenum=@fopen($file_name,$method);3 E0 o4 q( U( @' D
flock($filenum,LOCK_EX);
- d9 p4 {6 C/ u" ~ $file_data=fwrite($filenum,$data);7 w' y3 Z6 |8 G" |; x
fclose($filenum);" ?+ B. Y; s; v
return $file_data;
2 \9 Z! K3 w% d2 [}
8 F Q4 v5 n/ r0 A) |
1 d) E9 a0 b2 c' |0 F3 m【12】isset()和empty()的區別
7 e! ^1 J$ ~! E P
$ P. m- s# A0 x, ]+ }# s兩者都是測試變量用的,但是isset()是測試變量是否被賦值,而empty()是測試一個已經被賦值的變量是否為空。
" W" u2 T: ?/ _4 w* U7 ?2 Q
- Z! N' b+ ^* K5 y2 z/ E如果一個變量沒被賦值就引用在php裡是被允許的,但會有notice提示,如果一個變量被賦空值,$foo=""或者$foo=0或者 $foo=false,那麼empty($foo)返回真,isset($foo)也返回真,就是說賦空值不會註銷一個變量。( O, l9 K% O9 X
9 k+ r, S2 V- U8 W3 _" [, b/ i* N
要註銷一個變量,可以用 unset($foo)或者$foo=NULL8 |1 B# ?9 k: O) b5 j+ e1 O
7 X/ C* r+ k k( d5 I) s' m, u【13】mysql查詢語句包含有關鍵字
+ d, E3 g. i- o5 X+ r
' \9 S' t; ?2 `8 H Y! lphp查詢mysql的時候,有時候mysql表名或者列名會有關鍵字,這時候查詢會有錯誤。例如表名是order,查詢時候會出錯,簡單的辦法是sql語句裡表名或者列名加上`[tab鍵上面]來加以區別,例如select * from `order`
' l4 @+ g* J. k7 Z+ V1 H* l% ~& R/ L+ q3 k
【14】通過HTTP協議一次上傳多個文件的方法: G2 x$ ]0 d& f& v/ Z; t* j1 ]
) r7 o g/ ~; N6 B: Q8 c3 I; E/ Z* l
有兩個思路,是同一個方法的兩種實現。具體程序還需自己去設計。) [( m- r6 V/ Y1 f/ X
* o; D/ q* F* Y2 i/ [
1、在form中設置多個文件輸入框,用數組命名他們的名字,如下:- Y1 Z( Q7 W4 {$ y- S' C2 N* p, u
( J) z' U7 F6 y. V' c7 f* @2 M* N
PHP 代碼:
% k3 z: ~( O8 D" c, P<form action="" method=post>
, |0 d8 n% D$ z1 v<input type=file name=usefile[]>( ^' R i' J* c
<input type=file name=usefile[]>
/ J T! ]1 x# U6 e& c- q<input type=file name=usefile[]>
/ J, \- C0 E# H/ S4 M' j</form>
+ F/ P" @3 W3 R' ~0 q
, C* {: E4 X% ]" J4 f7 a! I- A這樣,在服務器端做以下測試:
8 T p% y" t9 [. a- X" B
) f6 s! h. E d. q- q7 M/ CPHP 代碼:" ^8 B; k3 H4 i. }4 |2 Z" N
echo "<pre>";
# w' r1 D f# q( m! |1 Wprint_r($_FILES);
5 { I% Q: |* {3 u6 wecho "</pre>"; 7 \( c3 n0 z+ x
" W! c: w- V2 Z& E+ T: ~) P' |* g+ O/ l2、在form中設置多個文件輸入框,但名字不同,如下:7 G- c Y! Y' h) k
' E: A& b0 O( e- ~! {0 k5 ^* I. HPHP 代碼:
7 B# w& X6 s3 [( V) M<form action="" method=post>3 H/ d4 X# H3 K* k6 p8 e* ]) ]
<input type=file name=usefile_a> Z" a2 F- @3 X
<input type=file name=usefile_b>
7 Q4 S1 e+ L1 |! P5 O<input type=file name=usefile_c>
2 s, N, l$ T2 U x5 X</form> " r' g3 _4 k1 K0 |9 s
0 g8 o3 G- M% E( j
在服務器端做同樣測試:# k5 c: T! R$ Y+ O5 s! A
) ^8 D- C9 b) f* m* \PHP 代碼:) [! ^( w. L3 Y* z) a$ m8 F
echo "<pre>";
5 j( H+ s+ ?1 ]print_r($_FILES);$ E3 B+ ?+ C8 a
echo "</pre>"; |
評分
-
查看全部評分
|