這個上傳代碼,究竟問題出在哪裡啊???
這個上傳代碼,裡面沒有限制上傳檔案的大小,但是現在上傳超過100K的就總無法上傳,問題出在哪裡啊?
我想弄限制,只能上傳500K以內的檔案,得如何改?
$allow_type=array("m4r","jpg");//允許上傳的圖片類型
$name=$_FILES['upImg']['name']; //用戶端檔案的原名稱
$upload_dir="upload/";//圖片儲存目錄
//strtolower 將字串轉為小寫
$file_suffix=strtolower(getFileSuffix($name));
if(!in_array($file_suffix,$allow_type))
{
//implode 把數組元素組合為字串
$all_type=implode("、",$allow_type);
exit("");
}
//explode 把字串分割為數組
$name_array=explode(".",$name);
do
{
$name_array[0]=randomFileName();
$name=implode(".",$name_array);
$upload_file=$upload_dir.$name;
}while(file_exists($upload_file));
$tmp_name=$_FILES['upImg']['tmp_name'];
//is_uploaded_file 判斷檔案是否是通過HTTP POST上傳的
if(is_uploaded_file($tmp_name))
{
//move_uploaded_file 將上傳檔案移至指定目錄
if(move_uploaded_file($tmp_name,$upload_file))
{
echo "$upload_file 歌曲上傳成功!";
exit("");
}
}
//擷取檔案尾碼名
function getFileSuffix($fileName)
{
//strrchr 返回.在$fileName中最後出現的位置到結尾的所有字元。substr 再去掉'.'
return substr(strrchr($fileName, '.'), 1);
}
//產生隨機檔案名稱
function randomFileName()
{
//將時區調為北京時間,php5預設為格林威治標準時間
date_default_timezone_set("PRC");
return date('YmdHis').rand(100,999);
}
?>
------解決方案--------------------
1、超過100K的檔案無法上傳,請看一下$_FILES['upImg']['error']的值,可能有以下幾種情況:
值為1,表示檔案大小超過了php.ini中定義的upload_max_filesize;
值為2,表示檔案大小超過了HTML中的限制。HTML中可以通過以下代碼限制檔案大小:
HTML code
------解決方案--------------------
在PHP內判斷也可以!
if($_FILES['upImg']['size']>1024*500)
{
echo "檔案超過了500k,無發上傳!";
exit;
}
至於無法上傳,我個人估計是:
do
{
$name_array[0]=randomFileName();
$name=implode(".",$name_array);
$upload_file=$upload_dir.$name;
}while(file_exists($upload_file));
檔案存在才將$upload_file=$upload_dir.$name;事實該檔案在第一次的時候肯定不存在,那這個do裡的代碼根本不執行,也就是說:$upload_file不能真實反映其檔案路徑,那麼在後面move_uploaded_file的時候也就無法執行了。