php が大きなファイルをダウンロードするときのエラーの解決策: 1. サーバー上の nginx ログを表示します; 2. fpm 実行中の ID を表示します; 3. nginx 構成を編集して ID を設定します; 4. 「chown」を渡します-R daemon / aichenk/soft/nginx/fastcgi_temp/" パスを変更するだけです。
このチュートリアルの動作環境: Windows 7 システム、PHP バージョン 8.1、Dell G3 コンピューター。
php で大きなファイルをダウンロードするときにエラーが発生した場合はどうすればよいですか?
PHP が大きなファイルのダウンロードに失敗したときの落とし穴を覚えておいてください
説明
php はファイル ストレージとダウンロードを提供し、nginx は Web サーバーとして機能し、fpm は解析中。
現象
5M画像をダウンロードする際、必ずダウンロードに失敗したか、ダウンロードしたファイルが不完全で画像の一部しか表示されない旨のメッセージが表示されます(ダウンロードごとに異なります)
php関連コードのダウンロード
$file = BASE_PATH . '/public/files/IMG_5727.jpg'; $size = filesize($file); header( "Content-type: application/octet-stream" ); header("Accept-Ranges: bytes"); header("Accept-Length: {$size}"); header("Content-Disposition: attachment; filename=IMG_5727.jpg"); $fp = fopen($file, 'rb'); $readBuffer = 4096; while (!feof($fp)) { echo fread($fp, $readBuffer); } fclose($fp);
解決策
検索した後、サーバーにアクセスしてnginxログを確認したところ、確かにエラーメッセージがありました
2020/05/06 13:09:13 [crit] 1482#0: *23258 open() "/aichenk/soft/nginx/fastcgi_temp/4/17/0000000174" failed (13: Permis sion denied) while reading upstream, client: 172.21.0.12, server: 192.168.5.5, request: "GET /temp/t2 HTTP/1.1", upstr eam: "fastcgi://127.0.0.1:9001", host: "192.168.5.5:8080"
nginx は権限の問題を示し、最終的に nginx の実行 ID と fpm を統合します
# fpm配置 [www] user = daemon group = daemon # 查看到fpm运行身份为`daemon`,编辑nginx配置设置身份 # nginx配置 #user nobody; user daemon;
以前のパス所有権ユーザーが変更されました
chown -R daemon /aichenk/soft/nginx/fastcgi_temp/
テストに合格しました
解説
個人的分析:このエラーは実際にバッファにデータを置く際に発生するもので、理論上は大きなファイルだけでなく、一定以上のデータ転送量でもこの問題が発生すると考えられます。環境をセットアップするときは注意してください。
推奨学習: 「PHP ビデオ チュートリアル 」
以上がPHPで大きなファイルをダウンロードするときにエラーが発生した場合の対処方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。