一、表單
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 絕不要信任外部資料或輸入 關於...