
PHP ファイルのアップロード: ファイルの種類とサイズの制限を確認する
PHP でファイルのアップロードを処理するには、多くの場合、ファイルの種類とサイズの制限を確認する必要があります。提供されたコード スニペットは両方の基準を検証しようとしますが、問題が発生します。コードを詳しく調べてエラーを特定しましょう。
1 2 3 4 5 | <code class = "php" >
$resume = ( $_FILES [ 'resume' ][ 'name' ]);
$reference = ( $_FILES [ 'reference' ][ 'name' ]);
$ext = strrchr ( $resume , "." );
$ext1 = strrchr ( $reference , "." );</code>
|
ログイン後にコピー
このコードは、両方のファイルのファイル名と拡張子をキャプチャします。ただし、その後の検証ロジックには欠陥があります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <code class = "php" > if (!(
( $_FILES [ "resume" ][ "type" ] == "application/doc" )
|| ( $_FILES [ "resume" ][ "type" ] == "application/docx" )
|| ( $_FILES [ "resume" ][ "type" ] == "application/pdf" )
&& (( $_FILES [ "reference" ][ "type" ] == "application/doc" )
|| ( $_FILES [ "reference" ][ "type" ] == "application/docx" )
|| ( $_FILES [ "reference" ][ "type" ] == "application/pdf" ))
&& (( $ext == ".pdf" ) || ( $ext == ".doc" ) || ( $ext == ".docx" ))
&& (( $ext1 == ".pdf" ) || ( $ext1 == ".doc" ) || ( $ext1 == ".docx" ))
&& ( $_FILES [ "resume" ][ "size" ] < 400000)
&& ( $_FILES [ "reference" ][ "size" ] < 400000)
)) {
} else {
}</code>
|
ログイン後にコピー
コードは、ファイル タイプを検証するための正しいロジックを使用できません。 MIME タイプをチェックする代わりに、ファイル名拡張子に依存しますが、これは信頼性が高くありません。さらに、サイズ検証は両方のファイルに適用されません。
これらの問題を修正するために、MIME タイプを使用し、両方のファイル サイズを正しくチェックする改訂されたコード スニペットを次に示します。
1 2 3 4 5 6 7 8 9 | <code class = "php" > function allowed_file() {
$allowed = array ( 'application/doc' , 'application/pdf' , 'application/docx' );
if (in_array( $_FILES [ 'resume' ][ 'type' ], $allowed ) && in_array( $_FILES [ 'reference' ][ 'type' ], $allowed )) {
if ( $_FILES [ "resume" ][ "size" ] < 400000 && $_FILES [ "reference" ][ "size" ] < 400000) {
}
}
}</code>
|
ログイン後にコピー
このコードまず、ファイルの MIME タイプが許可リストに含まれているかどうかを確認します。そうであれば、両方のファイル サイズが指定された制限内であるかどうかを確認します。これにより、許可されたファイルの種類とサイズのみがアップロードに受け入れられます。
以上がPHP ファイルのアップロード検証コードが正しく機能しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。