このアップロード コードにはどのような問題がありますか? ? ?
このアップロード コードではアップロードされるファイルのサイズに制限はありませんが、100K を超えるとアップロードできなくなります。何が問題ですか?
ファイルのアップロードを 500K 以内に制限したいのですが、どうすれば変更できますか?
$allow_type=array("m4r","jpg");//アップロードできる画像の種類
$ name=$ _FILES['upImg']['name']; //元のクライアントファイル名
$upload_dir="upload/";//画像保存ディレクトリ
//strto lower文字を変更する 文字列を小文字に変換します
$file_suffix=strto lower(getFileSuffix($name));
if(!in_array($file_suffix,$allow_type))
{
//implode は配列要素を文字列に結合します
$all_type=implode(",",$allow_type);
exit("<script>alert('画像は $all_type 形式でのみアップロードできます! ');history.back();</script>");
}
//文字列を配列に分割します
$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("<script>top.document.getElementById('url').value='$upload_file';</script>");
}
}
//ファイルサフィックス名を取得します
function getFileSuffix($fileName)
{
//strrchr は $ 内の最後の出現を返します。 fileName を substr の末尾に配置し、'.' を削除します。
return substr(strrchr($fileName, '.'), 1);
}
/ /ランダムなファイル名を生成します
functionrandomFileName()
{
//タイムゾーンを北京時間に調整します。php5 のデフォルトはグリニッジ標準時です
date_default_timezone_set("PRC");
return date('YmdHis').rand(100,999);
}
?>
-----解決策--------------------------
1. 100K はアップロードできません。$_FILES['upImg']['error'] の値を確認してください。次のような状況が考えられます:
値が 1 で、ファイル サイズが php で定義されている Upload_max_filesize を超えていることを示します。 .ini;
値 2 の場合、ファイル サイズが HTML の制限を超えていることを意味します。ファイル サイズは HTML の次のコードによって制限できます:
<!-- ファイル サイズを 100KB 以下に制限します --> <input type="hidden" name="MAX_FILE_SIZE" value="102400" /> <input type="file" name="upImg"/> <br><font color="#e78608">------解決策---------</font><br>PHP内で判定することも可能です! <br>if($_FILES['upImg']['size']>1024*500)<br>{ <br> echo "ファイルが 500k を超えているため、アップロードできません!";<br> exit;<br> }<br>アップロードできないことに関して、私の個人的な推測は次のとおりです: <br>do<br> {<br><br> $name_array[0]=randomFileName();<br><br> $name=implode (" .",$name_array);<br><br> $upload_file=$upload_dir.$name;<br><br> }while(file_exists($upload_file));<br>ファイルは $upload_file より前に存在する必要があります=$upload_dir .$name; 実際、最初はファイルが存在しないため、この do 内のコードはまったく実行されません。つまり、$upload_file はそのファイル パスを正確に反映できないため、実行されません。 move_uploaded_file が使用されるときに後で実行されます。 <div class="clear"></div>