PHP: file_get_contents - Manual
以下のようなコードで成功しますが、普通に考えてメモリ上に全ての大きさを占有してしまうので、あまり巨大なファイルを対象とするものではありません。( 大きなファイルには、readfile を使用します )
テスト仕様
ファイルサイズ : 50M
確認 : コマンドプロンプトより、FC /B オリジナルファイル ダウンロードファイル
<?
// 比較的小さなファイルのダウンロード
file_put_contents(
"mysql.zip",
file_get_contents("http://example.jp/mysql514.zip")
);
?>
OK
以下では、メモリは 4096 バイトしか使用しません。但しその分、全体の処理にかかる速度は落ちる事になります。また、ファイルの書き込みに file_put_contents を使用していますが、この部分でも open write close を繰り返すのでプログラムとして効率が良いとは言えません
<?
// 大きなファイルのダウンロード
ini_set("max_execution_time", 90 ); // ダウンロードに必要な時間( 秒 )
$fp = fopen("http://example.jp/mysql514.zip", "r" );
if ( $fp !== FALSE ) {
file_put_contents("mysql.zip", "" );
while( !feof( $fp ) ) {
$buffer = fread( $fp, 4096 );
if ( $buffer !== FALSE ) {
file_put_contents("mysql.zip", $buffer, FILE_APPEND );
}
}
fclose( $fp );
}
?>
OK
以下は、C 言語での記述と同等の書き方です。
<?
// 大きなファイルのダウンロード
ini_set("max_execution_time", 90 ); // ダウンロードに必要な時間( 秒 )
$fp = fopen("http://example.jp/mysql514.zip", "r" );
if ( $fp !== FALSE ) {
$fp_out = fopen("mysql.zip", "w" );
if ( $fp_out === FALSE ) {
fclose( $fp );
exit("出力ファイルを開く事ができません");
}
file_put_contents("mysql.zip", "" );
while( !feof( $fp ) ) {
$buffer = fread( $fp, 4096 );
if ( $buffer !== FALSE ) {
fwrite( $fp_out, $buffer );
}
}
fclose( $fp_out );
fclose( $fp );
}
?>
OK
posted by
at 2010-07-15 12:03
|
通信
|

|