3

phpstdinから大きなファイルを保存するための最適な方法を教えてください。iOS開発者は私に大きなビデオコンテンツをサーバーに送信し、私はそれをファイルに保存する必要があります。

ビデオデータを含むstdinスレッドを読み取り、ファイルに書き込みます。たとえば、次のようになります。

$handle = fopen("php://input", "rb");    
while (!feof($handle)) {
      $http_raw_post_data .= fread($handle, 8192);
}

どの関数を使用するのが良いですか?file_get_contentsまたはfreadまたは何か他のもの?

4

3 に答える 3

3

これをマルチパートフォームのアップロードとして扱うのが最も理にかなっているという@hek2mglに同意しますが、入力インターフェイスを変更できない場合はfile_put_contents()、ファイルを自分でループする代わりにストリームで使用できます。

$handle = fopen("php://input", "rb");  
if (false === file_put_contents("outputfile.dat", $handle))
{
  // handle error
}
fclose($handle);

ファイルを反復処理するよりもクリーンであり、高速である可能性があります(私はテストしていません)。

于 2013-01-06T23:56:43.363 に答える
2

file_get_contentsファイルのすべてのコンテンツを文字列にロードしようとするため、使用しないでください

PHPDOCから

file_get_contents()は、ファイルの内容を文字列に読み込むための推奨される方法です。OSでサポートされている場合は、メモリマッピング技術を使用してパフォーマンスを向上させます。

サーバー上にムービーファイルを作成したいだけだと確信しています..これはより効率的な方法です

$in = fopen("php://input", "rb");
$out = fopen('largefile.dat', 'w');

while ( ! feof($in) ) {
    fwrite($out, fread($in, 8192));
}
于 2013-01-06T23:47:46.097 に答える
0

Webサーバーとしてnginxを使用している場合は、アップロードを再開できるnginxアップロードモジュールをお勧めします。

于 2013-01-23T22:45:33.383 に答える