0

PHPで大きなファイルを送信するために、独自のバージョンの単純なソリューションを作成しました。ファイルチャンクを使用します。このソリューションはさまざまなソースから保護されており、「チャンク」を実装するために次のコードをコピーして貼り付けました。

$handle = fopen($filename, 'rb'); 

while (!feof($handle))
{ 
    print(@fread($handle, $chunksize));

    ob_flush();
    flush();
} 

fclose($handle);

各チャンクをブラウザに送信するために使用printするため、PHP スクリプトがエンコードされている文字エンコードに非常に敏感です。たとえば、スクリプトを に保存するとANSI、ダウンロードしたファイルが破損していることに気付きました。でエンコードされたスクリプトを保存してアップロードする場合のみ、utf-8ファイルは問題ありません。

スクリプトファイルのエンコーディングに依存しない同じことを行う(ファイルの一部をブラウザに送信する)よりも優れた機能はありprintますか?たとえば、ブラウザにバイナリ転送を強制するためですか?

4

1 に答える 1

1

小さなファイルの場合はreadfile、 を使用する必要があります。これにより、ファイルをクライアントに送信することができます。非常に大きなファイルの場合、メモリの問題により、これらの関数はおそらく機能しません。

また、file_get_contents送信前に処理する必要がある場合は、すべてのファイル コンテンツを変数に取得する関数もあります。Likereadfileは「小さい」ファイルにのみ推奨されます。memory_limit「小さい」は、PHP プロセス ( php.ini のパラメーター)を実行できるメモリに依存します。通常、サーバーは 8M から 128M に設定し、デフォルトでは 16MB です。

于 2014-02-24T14:50:10.907 に答える