33

この拡張子 .JPG の画像ファイルをテストしたときにアップロード スクリプトを作成していました。jpg と jpeg の違いはわかりませんが、$_FILES はこのファイル タイプを認識しないようです。

MIME タイプに関して $_FILES がそれほど信頼できないスレッドをいくつか読んだので、php の MIME タイプ関数mime_content_type()、php のgetimagesize(),を使用することにしましたpathinfo()が、pathinfo はファイル名とタイプを返しますが、パスが必要です存在しないファイルの場合、すべての関数は $_FILES['file']['tmp_name'] をパラメータとして渡されます。

したがって、この問題は、sample.JPG などの画像ファイルをアップロードすることにしたときに発生しました。このファイルのほとんどはカメラからの生のファイルだと思います <-- それは私が考えていることですが、それにもかかわらず、もっと重要なことは、それらをアップロードできることです。 JPG、.jpg、jpeg、.png。.JPG を除いて、それらはすべて正常に動作します。

主な問題は、.JPG をアップロードするときに $_FILES のフィールド ['tmp_name'] に値がないことです。

この問題に遭遇した方は、回避策または「どのように実行したか」などを共有してください。

4

7 に答える 7

49

が空の場合$_FILES[$field]['tmp_name']、ファイルはアップロードされていません。$_FILES[$field]['error']その理由を確認するには、 を参照してください。

FWIW、そして私が理解している限り、MIME タイプ$_FILES[]はブラウザーによって提供されます。

更新:すべてのファイルアップロードエラーを処理するためのちょっとしたコードがあります:

        $message = 'Error uploading file';
        switch( $_FILES['newfile']['error'] ) {
            case UPLOAD_ERR_OK:
                $message = false;;
                break;
            case UPLOAD_ERR_INI_SIZE:
            case UPLOAD_ERR_FORM_SIZE:
                $message .= ' - file too large (limit of '.get_max_upload().' bytes).';
                break;
            case UPLOAD_ERR_PARTIAL:
                $message .= ' - file upload was not completed.';
                break;
            case UPLOAD_ERR_NO_FILE:
                $message .= ' - zero-length file uploaded.';
                break;
            default:
                $message .= ' - internal error #'.$_FILES['newfile']['error'];
                break;
        }
        if( !$message ) {
            if( !is_uploaded_file($_FILES['newfile']['tmp_name']) ) {
                $message = 'Error uploading file - unknown error.';
            } else {
                // Let's see if we can move the file...
                $dest .= '/'.$this_file;
                if( !move_uploaded_file($_FILES['newfile']['tmp_name'], $dest) ) { // No error supporession so we can see the underlying error.
                    $message = 'Error uploading file - could not save upload (this will probably be a permissions problem in '.$dest.')';
                } else {
                    $message = 'File uploaded okay.';
                }
            }
        }
于 2013-01-23T05:04:22.340 に答える
19

php.ini特にこの設定を確認してください

; Maximum allowed size for uploaded files.
; http://www.php.net/manual/en/ini.core.php#ini.upload-max-filesize
upload_max_filesize = 6M

または、Apache Config で次のようにします。

<Directory "/var/www/vhosts/path/to/your/directory/import/">
    php_value post_max_size 6M
    php_value upload_max_filesize 6M
</Directory>

upload_max_filesizeまた、php.ini設定よりも大きなファイルをアップロードした場合に、PHP がエラー ログにエラーを報告しないのは残念なことだと思います。たとえば、6MB のファイルをアップロードする場合2M(これがデフォルトだと思います)。

于 2014-01-16T10:19:25.970 に答える
1

$_FILES フィールド 'tmp_name' に .JPG ファイル拡張子の値がないという問題に直面し、いくつかの手順で問題を修正しました。これらの措置は、将来誰かを助けるかもしれません。

  1. まず、ユーザー「staticsan」が提供する Switch Case ソリューションを実装しました。ここにリンクしてください - https://stackoverflow.com/a/14472801/3681985 . このソリューションは、php.ini ファイルのパラメーターやフォルダーのアクセス許可などの潜在的な問題を追跡するのに役立ちました。
  2. php.ini ファイルの名前は php.ini.default です。ファイルの名前をphp.iniに変更するまで、パラメータupload_max_filesizeとpost_max_sizeを変更しても結果は得られませんでした。パラメータ値を試してみることを忘れないでください。
  3. ファイル名の問題を修正した後、アップロードされた一時画像を移動する必要があるフォルダーへのアクセス許可に関する課題に遭遇しました。権限を変更したところ、フォルダにアップロードされた画像を確認できました。
于 2015-12-29T06:31:43.017 に答える
0

これを試してみて、何が起こるか見てください。

if (($_FILES['file']['type']) == "image/jpg" || ($_FILES['file']['type']) == "image/jpeg") {
                      //do uploading stuff here
                    }else{
                    echo 'File is not a valid JPG,JPEG';
                    }
于 2013-01-23T07:28:33.163 に答える