PHP 注意問題

2021-09-06 23:02:52 字數 2279 閱讀 8338

一、表單

1,上傳檔案的表單使用post方式;還要加上enctype='multipart/form-data'。 

2,一般要加上隱藏域:,位置在file域前面。value的值是上傳檔案的客戶端位元組限制。據說可以減少檔案超標時客戶端的等待時間,不過我沒覺得有什麼區別。 

3,file域是不許賦值的(無value="")。

html 就已經設定了檔案大小,所有有時候你在php中接收不到值的時候很有可能就是前台給阻止了

二,檔案上傳錯誤**

限制上傳檔案大小的因素有 

1,客戶端的隱藏域max_file_size的數值(可以被繞開)。 

2,伺服器端的upload_max_filesize,post_max_size和memory_limit。這幾項不能夠用指令碼來設定。 

3,自定義檔案大小限制邏輯。即使伺服器的限制是能自己決定,也會有需要個別考慮的情況。所以這個限制方式經常是必要的。 

我碰見的一種情況可能不是普遍性的,說明一下。如 果檔案比伺服器端限制(upload_max_filesize)大很多,但也還沒達到或接近post_max_size或者 memory_limit,$_files就會「崩潰」——結果是$_files['userfile']變成了「undefined index」,當 然是什麼檢驗也做不到了。 

服 務器端限制的檢驗優先於客戶端限制的檢驗。就是說,如果兩個限制是一樣的,而檔案過大了,$_files['userfile']['error']會出 錯誤**1。只有客戶端限制比伺服器端限制小到一定「程度」,而且檔案大小超過兩者的時候,才會出現錯誤**2(難道這跟我感覺 max_file_size沒起到預想的作用是乙個原因?)。上述的「程度」,在我的機器上試驗在3~4k之間——我的機器設定的伺服器端限制為2m…… 因為沒什麼意味,就沒有追求精確的規律。 

出現錯誤**1或2的時候: 

$_files['userfile']['name']為客戶端機器檔案的原名稱 

$_files['userfile']['type']為空字串 

$_files['userfile']['size']為0 

$_files['userfile']['tmp_name']為空字串 

四,檔案路徑檢驗

手冊上面不很詳細地說,用法是: 

bool is_uploaded_file( string filename) 

實際上 

is_uploaded_file($_files['userfile']['name']); 

總是返回false。後來看見別人是用: 

is_uploaded_file($_files['userfile']['tmp_name']); 

比較一下: 

file域無輸入——————返回false——error=>4,name=>'',   tmp_name=>'',   type=>'',   size=>0 

file域為非路徑字串——返回 true——error=>0,name=>'***',tmp_name=>'yyy',type=>'zzz',size=>0 

檔案上傳成功——————返回 true——error=>0,name=>'***',tmp_name=>'yyy',type=>'zzz',size=>sss 

檔案太大————————返回false——error=>1,name=>'***',tmp_name=>'',   type=>'',   size=>0 

檔案太大————————返回false——error=>2,name=>'***',tmp_name=>'',   type=>'',   size=>0 

檔案部分上傳——————沒機會試驗 —error=>3 

有點懷疑這個函式是怎麼工作的,還是覺得用$_files['userfile']['size']檢驗好些。 

if($_files['userfile']['error']!=4)

else

give_a_message(...);

}else

give_a_message(...);

}else

give_a_message(...);

}else

give_a_message(...);

}else

give_a_message(...);

}else

give_a_message(...);

}else

give_a_message(...);

}

php語法注意

1.錯誤抑制操作符 a 57 9 如果沒有 操作符,這一行將產生乙個除0警告。使用這個操作符,這個警告就會被抑制住。如果通過這種方法抑制了一些警告,一旦遇到了乙個警告,你就要寫一些錯誤處理 如果已經啟用了php配置檔案中的track errors特性,錯誤資訊將會儲存在全域性變數 php error...

PHP寫法注意

場景一 遍歷乙個陣列獲取新的資料結構 也許你會這樣寫 申明乙個新的陣列,組裝成你想要的資料 tmp foreach arr as k v 最後得要你想要的陣列 tmp 也許你覺著上面的寫法不是很好,那我們下面換種寫法 foreach arr as k v 乾掉你不想要的結構 unset arr k ...

php開發需要注意什麼問題?

作為php程式設計師,特別是新手,對於網際網路的險惡總是知道的太少,對於外部的入侵有很多時候是素手無策的,他們根本不知道黑客是如何入侵的 提交入侵 上傳漏洞 sql 注入 跨指令碼攻擊等等。作為最基本的防範你需要注意你的外部提交,做好第一面安全機制處理防火牆。規則 1 絕不要信任外部資料或輸入 關於...