ホームページ  >  記事  >  バックエンド開発  >  PHPで大きなファイルをダウンロードするときにエラーが発生した場合の対処方法

PHPで大きなファイルをダウンロードするときにエラーが発生した場合の対処方法

藏色散人
藏色散人オリジナル
2022-11-13 09:47:121750ブラウズ

php が大きなファイルをダウンロードするときのエラーの解決策: 1. サーバー上の nginx ログを表示します; 2. fpm 実行中の ID を表示します; 3. nginx 構成を編集して ID を設定します; 4. 「chown」を渡します-R daemon / aichenk/soft/nginx/fastcgi_temp/" パスを変更するだけです。

PHPで大きなファイルをダウンロードするときにエラーが発生した場合の対処方法

このチュートリアルの動作環境: 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。