PHP move_uploaded_file() エラー?
以下のコードを使用したところ、ローカルマシンにファイルをアップロードすることに成功しました。私のローカルマシンに "Successfully uploaded" と表示されています。
// Upload file
$moved = move_uploaded_file($_FILES["file"]["tmp_name"], "images/" . "myFile.txt" );
if( $moved ) {
echo "Successfully uploaded";
} else {
echo "Not uploaded";
}
しかし、このコードをオンラインサーバで使用すると、ファイルがアップロードされず、"Not uploaded"というメッセージが表示されるだけです。
何が問題なのか、どのようにすれば実際の問題をユーザーに表示させることができるのか、どうすれば知ることができるのでしょうか?
32
12
コードを次のように編集します。
次のエラーコード値1〜8のいずれかが表示されます。
Webサーバーに"images/"ディレクトリへの書き込み権限があることを確認します。
これを試して:
これにより、ファイル許可エラーが即座にフラグが立てられます。
どのようにしたら問題があることを知ることができますか?
簡単です。Webサーバーのエラーログを参照してください。
どうすれば、実際の問題をユーザーに表示させることができますか?
**絶対にやってはいけません。
一般的なユーザーはこのエラーについて何も理解できないでしょう。
悪意のあるユーザーは、特に非常に有益なエラーメッセージという形で、何もフィードバックされないはずです。
ただ言い訳のページを表示するだけでいいのです。
もしあなたがサーバーのエラーログにアクセスできないなら、あなたの仕事はより複雑になります。
エラーメッセージに接触する方法はいくつかあります。
エラーメッセージを画面に表示するには、次の行をコードに追加してください。
または、カスタムエラーログファイルを作成する
などの方法があります。
しかし、実際にエラーメッセージが出ないと動けないことを理解する必要があります。暗闇の中で盲目になるのはつらいことです。
move_uploaded_file()
が返されます:1。 ファイル名が無効な場合は「FALSE」。 2。 apacheプロセスにソースまたは宛先ディレクトリへの読み取り/書き込み権限がない場合、エラーログに「FALSE」および「警告を発行する」。
PHPエラーログ。
私のphpエラーログは「/ var / log / httpd / error_log」にあり、これらのエラーがありました:
move_uploaded_file()
は、ファイルを一時ディレクトリから宛先ディレクトリに移動しようとします。 apacheプロセスがファイルを移動しようとしたとき、一時的を読んだり、宛先dirに書き込むことができませんでした。1。 Apache(Webサーバー)を実行しているユーザーを見つけます。 このコマンドで、Apacheサービスを実行しているユーザーを確認します。
ps aux | grep httpd
。 最初の列はユーザー名です。1。 一時Dirで[許可の読み取り]を確認してください。 phpページで
echo sys_get_tmp_dir();
を呼び出すと、一時dirへのパスを見つけることができます。 次に、コマンドラインでls -ld / tmp / temporary-dir
を発行して、apacheユーザーがここで読むことができるかどうかを確認します。2。 Destination Dirで書き込み許可を確認してください:
ls -ld / var / www / html / destination-directory
を発行して、Apacheユーザーがここに書き込むことができるかどうかを確認します。3。
chown
またはchgrp
を使用して、必要に応じて権限を追加します。4。
sudo service httpd restart
を使用してApache を再起動します。ファイルが正常にアップロードされていることを確認していますか?max_post_size、または max_upload_filesize を超えている可能性があります。FileZillaでログインした場合はそのままコピーされますが、PHPでアップロードする場合はapacheを実行しているユーザ(www-dataなど)のファイルなので、画像にchmod 755を付けてみてください。
またはsuexecを実行し、権限を再度変更する必要はありません。
エラーの非常にあいまいで迷惑な原因に遭遇しました6。 NFSがマウントされたボリュームをいじくり回した後、アップロードが失敗し始めました。 サービスの再開により問題が解決しました。
form
タグにこの属性があることを確認してください。enctype = "multipart / form-data"
。仮想ホスティングで「ディスククォータ」を確認します。
クォータを超えると、「move_uploaded_file」の戻りエラー。
PS:私はこれを長い間探していました:)。
許可「images /」ディレクトリを確認してください。