过期域名预定抢注

 找回密碼
 免费注册

令PHP初學者們最頭疼的幾個問題及解決辦法 --轉

[複製鏈接]
發表於 2009-1-20 11:42:17 | 顯示全部樓層 |閱讀模式
【1】頁面之間無法傳遞變量 get,post,session在最新的php版本中自動全局變量是關閉的,所以要從上一頁面取得提交過來得變量要使用$_GET['foo'],$ _POST['foo'],$_SESSION['foo']來得到。當然也可以修改自動全局變量為開(php.ini改為 register_globals = On);考慮到兼容性,還是強迫自己熟悉新的寫法比較好。
* y6 e! q8 n. P0 J: v
) v  [) K4 v2 m& @2 H/ o【2】Win32下apache2 用get方法傳遞中文參數會出錯:
, g  k! I' b' c/ r- p! e6 X' q8 [7 b5 G% D* Q+ M5 v
test.php?a=你好&b=你也好
& S* p$ v; q; O9 M. \& n* `0 j' {5 `  }$ \: w' C; S4 W5 q: E
傳遞參數是會導致一個內部錯誤
! `* c5 O5 |4 s/ q! X4 y# T# r7 t' v8 ]$ Y4 c  M
解決辦法:"test.php?a=".urlencode(你好)."&b=".urlencode(你也好). j7 J( U  n: }' W& r/ w/ k" q

) I5 s4 f+ a& ^8 S0 Z.............( g5 y5 n, p  B. y  m2 Z
! E% C/ D' f% {4 \1 y+ [
【3】win32下的session不能正常工作
( Y! v# ^% u! C- }: q! s, x! x" ~. a6 Z
php.ini默認的session.save_path = /tmp
* Q& P/ Q7 ]3 _9 R- q
, P  u" q9 f' y" e& ^; _6 O這顯然是linux下的配置,win32下php無法讀寫session文件導致session無法使用,把它改成一個絕對路徑就可以了,例如session.save_path = c:windows emp
" \" S0 _, J& I) b9 H) d  [5 u5 X0 j7 r7 w: B9 h8 s9 C
【4】顯示錯誤信息
3 o# N* g" @7 u  X$ m( A6 ?
7 ]; n; `, P$ E+ q$ h" O當php.ini的display_errors = On並且error_reporting = E_ALL時,將顯示所有的錯誤和提示,調試的時候最好打開以便糾錯,如果你用以前php寫法錯誤信息多半是關於未定義變量的。變量在賦值以前調用會有提示,解決辦法是探測或者屏蔽。: f* \( [) p: X( M% Y3 u
; N5 P( b+ I; w& q
例如顯示$foo,可以if(isset($foo)) echo $foo 或者echo @$foo
4 W  ]" R& f8 h0 h7 a" V9 R4 Z6 V+ K. X
【5】Win32下mail()不能發送電子郵件% u! k' w! Z: T  N' T
9 w* c9 p, s1 U# I  H3 G
在linux下配置好的sendmail可以發送,在win32下需要調用smtp服務器來發送電子郵件,修改php.ini的SMTP = ip //ip是不帶驗證功能的smtp服務器(網上很難找到)9 N. }/ `$ a9 E9 [" j" q; k5 T$ B) T
: W% c8 a- X+ Y3 c+ {' z0 ]
php發送郵件的最好解決方法是用socket直接發送到對方email服務器而不用轉發服務器。
. s, t' r  O5 H) \+ g
! g8 P/ b. V3 \' n; Q【6】初裝的mysql如果沒有設置密碼,應該使用update mysql.user set password="yourpassword" where user="root" 修改密碼2 `8 t0 O. W; _

' {4 K9 \. R; N% M2 u: ?' e) B【7】header already sent  Z" x6 I  u5 z0 i

  X! U/ ?8 c! x) Q, p; Y1 q這個錯誤通常會在你使用HEADER的時候出現,他可能是幾種原因:1,你在使用HEADER前PRING或者ECHO了2.你當前文件前面有空行3.你可能INCLUDE了一個文件,該文件尾部有空行或者輸出也會出現這種錯誤。!* G7 U2 i2 N# L* \
7 b, _- R1 {  |  `0 L
【8】更改php.ini後沒有變化4 K" h" S; Z# v3 N
% R8 r7 z4 R+ t; V/ t5 S
重新啟動web server,比如IIS,Apache等等,然後才會應用最新的設置。
/ v* V1 \+ V2 K. n6 j4 x
7 b/ ]; Y' r. U【9】php在2003上面安裝(ISAPI的安裝方法懇請高手指教)
3 [' K6 g  q9 f, [" x- k/ p, F  d# e" b" {- g( A, e9 B  Y9 ]
PHP4的php4isapi.dll好像和2003有些衝突,只能用CGI模式安裝
6 C6 k, c6 C, q' C" ?- R2 n' u3 l0 d! ^0 V$ T: E2 {$ w
步驟一,先www.php.net 下在一個安裝程序,我是裝的是:php-4.2.3-installer.exe,你也可以去找最新的版本,在安裝php-4.2.3- installer.exe之前保證你的IIS6.0啟動了,並能夠訪問。安裝好以後,在默認網站-->應用程序配置。
- N- d4 d1 r/ z4 Z! y' r
+ \9 t; A+ b* K+ h步驟二:點擊 web服務擴展 -->新建web服務擴展。
& w3 a: R$ I5 t  }' m
7 V4 w7 V( a- n  i步驟三: 擴展名-->php,然後添加
6 h' d* ]- N7 J- `6 a$ A( `' U1 `. b4 t% t# ~
步驟四:找到php.exe的路徑添加上去。0 n1 \- h0 s% o
4 _5 c& B, ^. L" K' E
步驟五: 確定就可以了!0 \" Y% ]/ {0 c- @% q" Q
9 \4 }$ a0 Y% v% M% Q, a* X1 p9 j$ Q
步驟六: 選擇php的服務擴展,然後點擊允許。
) K- _4 k1 U8 }* @! [6 Z
1 C$ q2 p3 ]. w9 k8 X4 {4 U【10】有時候sql語句不起作用,對數據庫操作失敗,最簡便的調試方法,echo那句sql,看看變量的值能得到不。
( K* T& ?2 l& K1 M" Z: N5 A) a" N8 f) Z2 j( u
【11】include和require的區別2 [4 ~$ A. \  j! R6 [* \

7 f/ S! N- {; S1 y兩者沒有太大的區別,如果要包含的文件不存在,include提示notice,然後繼續執行下面的語句,require提示致命錯誤並且退出。/ Q9 K8 y, B" ], H/ @4 t. ?' [
; ]5 Q8 ?& f1 w# O; M' n6 O2 Q
據我測試,win32平台下它們都是先包含後執行,所以被包含文件裡最好不要再有include或require語句,這樣會造成目錄混亂。或許*nux下情況不同,暫時還沒測試。
/ ^7 t+ Y! b* }, P
6 S* }# [* M6 n如果一個文件不想被包含多次可以使用include_once或require_once## 讀取,寫入文檔數據。
+ k) v( u* U( y% ~0 a) [
- R7 z7 Z6 y  c0 ?' _) ?' V1 ~PHP 代碼:7 R, m5 p4 Z, s7 ]
function r($file_name) {
$ f2 K7 ]: V; F' ]; m3 A  $filenum=@fopen($file_name,"r");1 T) W. u2 T! {/ K: l1 }2 e4 k: x
  @flock($filenum,LOCK_SH);
) T& \, o' e* v6 u  $file_data=@fread($filenum,filesize($file_name));
8 [! k1 L1 q% }+ J  @fclose($filenum);
. Y" [* r( ~7 M) [6 Q  return $file_data;. V2 a" V# s# S5 s
}
9 s7 `2 L1 T" Xfunction w($file_name,$data,$method="w"){
' J) s0 ~: ~( l! X, ]2 N% j  $filenum=@fopen($file_name,$method);1 x% ?: `+ r8 x( W2 ?" ]
  flock($filenum,LOCK_EX);
3 s3 r6 ?: {. l5 f  [; x, q8 r3 |  $file_data=fwrite($filenum,$data);
$ z5 I4 e% b- ~1 ]  fclose($filenum);2 B3 @7 O4 s# N
  return $file_data;
% |$ c5 i4 {* y, ^- B}  7 N# M: U* w" a- Z* {

5 H& G, d3 c- K# \1 A; p) ~# e【12】isset()和empty()的區別  I/ b4 }2 o1 m( ~: l) ~0 q3 ^
/ d, ?! G' v# b
兩者都是測試變量用的,但是isset()是測試變量是否被賦值,而empty()是測試一個已經被賦值的變量是否為空。
% ^% t- I) L* e* W% `$ I/ a$ C& I7 c$ d/ f  G; `3 y* C7 L: C. H- D0 v3 V" E7 m
如果一個變量沒被賦值就引用在php裡是被允許的,但會有notice提示,如果一個變量被賦空值,$foo=""或者$foo=0或者 $foo=false,那麼empty($foo)返回真,isset($foo)也返回真,就是說賦空值不會註銷一個變量。- U: g1 S4 u% y. D' P+ G

) M, Y/ D  `6 W9 Z- M, V7 j# {要註銷一個變量,可以用 unset($foo)或者$foo=NULL
8 @1 A, K+ K; c! e/ I* w. f  i3 B7 D
【13】mysql查詢語句包含有關鍵字
0 [1 S, y+ Y+ i) F  E
- ^6 ?- i# Q  R' B3 i+ @# yphp查詢mysql的時候,有時候mysql表名或者列名會有關鍵字,這時候查詢會有錯誤。例如表名是order,查詢時候會出錯,簡單的辦法是sql語句裡表名或者列名加上`[tab鍵上面]來加以區別,例如select * from `order`! E% |' H# N. M% t
/ H( W# M9 s& s& x$ [
【14】通過HTTP協議一次上傳多個文件的方法  u$ d) z9 m7 w

- P& `/ A+ B; y7 M1 ~7 i2 y有兩個思路,是同一個方法的兩種實現。具體程序還需自己去設計。
0 M& S9 ^# @: t. V( S
1 D7 l# i% r5 U: n# H  X. o1、在form中設置多個文件輸入框,用數組命名他們的名字,如下:% p+ a. g( l9 N- @4 ~. y/ {

! I; K; D# t' `6 O6 }8 FPHP 代碼:: L( K& d0 R& ^: V
<form action="" method=post>+ t0 n$ z" F1 @( U4 Z) K
<input type=file name=usefile[]>* A9 ^  M( t# Q6 A6 }" R" T5 i
<input type=file name=usefile[]>
3 \2 S" H3 ?9 G. m( W<input type=file name=usefile[]>! N. K: S2 a& j
</form>  9 o' B7 @: z) Y. O4 o

$ o- k- m* \; z) Q; y# g這樣,在服務器端做以下測試:. ^7 D$ ?; m( F
( x6 k; s! ~, N: p7 P
PHP 代碼:) x, P" S- d4 O* ]2 @
echo "<pre>";' l4 g$ s0 @; o) m$ d
print_r($_FILES);
* Z: i& a- f( y) C! \echo "</pre>";  * Q" F5 K2 w. B' g- c' K$ o. X
  p5 s1 n& t+ l/ m8 i# Q8 t; @4 S  l4 v
2、在form中設置多個文件輸入框,但名字不同,如下:. w' [: f' B4 b/ J

% l  ^/ ~/ ?9 jPHP 代碼:9 e1 e! t5 Y) F& W
<form action="" method=post>8 w- F. W- o8 v- o+ e6 ^3 d
<input type=file name=usefile_a>
- {: a* a1 I  D2 b# T: w<input type=file name=usefile_b>' [, j3 t0 e9 l  ?$ s
<input type=file name=usefile_c>
3 y  e) \; x! J& a3 e6 \( w</form>  
" r& Z$ n. E2 w- g, C# M7 e, w8 u$ D4 V$ ?
在服務器端做同樣測試:
: B" O4 v* ^8 W1 k; g- I- w9 E' U; A$ S2 x& m0 N* B
PHP 代碼:
( [+ Z) W" J0 ?: F* T5 Gecho "<pre>";
( R$ |# D2 ?' Y8 Wprint_r($_FILES);
) i1 j" l" Q2 M" g2 Oecho "</pre>";

評分

參與人數 1 +10 收起 理由
回忆月光 + 10

查看全部評分

您需要登錄後才可以回帖 登錄 | 免费注册

本版積分規則

點基跨境 數位編輯創業論壇

GMT+8, 2025-4-7 04:58

By DZ X3.5

小黑屋

快速回復 返回頂部 返回列表