Localhost(xampp/Apache)で完全に実行されるAJAXコードを使用してファイルアップロードフォームを作成しました。最大256MBのファイルをアップロードできます。 HTTPを使用します。
ただし、このコードをaws ec2のnginxサーバーにアップロードすると、10KBを超えるファイルをアップロードしようとすると404が返されます(はい、Kです)。 HTTPSを使用しています。
Php.iniの設定が間違っている可能性があるため、このコードをファイルアップロードフォームに追加しました。
<script>
console.log("max_execution_time = <?php echo(ini_get('max_execution_time')); ?>");
console.log("max_input_time = <?php echo ini_get('max_input_time'); ?>");
console.log("memory_limit = <?php echo ini_get('memory_limit'); ?>");
console.log("post_max_size = <?php echo ini_get('post_max_size'); ?>");
console.log("file_uploads = <?php echo ini_get('file_uploads'); ?>");
console.log("upload_max_filesize = <?php echo ini_get('upload_max_filesize'); ?>");
console.log("max_file_uploads = <?php echo ini_get('max_file_uploads'); ?>");
console.log("default_socket_timeout = <?php echo ini_get('default_socket_timeout'); ?>");
</script>
このコンソール出力を取得します。
0の後に「ファイルのアップロード成功」が続くことに注意してください。ここで、0はファイルエラーコード、つまり$_FILES['ninja_file']['error']
です。
この場合にアップロードした2つのファイルは9KBでした。
下部にPost ... 404 ()
が表示されたら、22KBのファイルをアップロードしようとしたことが原因でした。
Nginx.confで設定します
client_max_body_size 0;
サイズを0に設定すると、ドキュメントごとにクライアント要求の本文サイズのチェックが無効になります http://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size
技術:
(nginx.confのerror_logの場所に基づいて)nginx error.logを確認します。
$ Sudo nano /path/to/nginx/error.log
/var/lib/nginx
に「許可が拒否されました」エラーがあります。これは、nginx.confのuser
設定を
user nginx;
他の何かに。この場合、
user iam;
解決策:
/ var/lib/nginxで現在のユーザーとグループの所有権を確認します。
$ ls -ld /var/lib/nginx
drwx------ 3 nginx nginx 4096 Aug 5 00:05 /var/lib/nginx
これにより、nginx
という名前の存在しない可能性のあるユーザーとグループがこのフォルダーを所有していることがわかります。これにより、ファイルのアップロードが防止されます。
この場合、iam
でnginx.confで定義されたユーザーにフォルダーの所有権を変更します(Sudoは必要ない場合があります)。
$ Sudo chown -Rf iam:iam /var/lib/nginx
実際に変更されたことを確認します。
$ ls -ld /var/lib/nginx
drwx------ 3 iam iam 4096 Aug 5 00:05 /var/lib/nginx
許可拒否エラーはなくなります。 error.logを確認します(nginx.confのerror_logの場所に基づいて)。
$ Sudo nano /path/to/nginx/error.log
それがうまくいかない場合、nginxとphp-fpmをリロードする必要があるかもしれません。
$ Sudo service nginx reload
$ Sudo service php-fpm reload