大きなファイルをローカルにダウンロードする方法

PHP の file_get_contents() 関数と file_put_contents() 関数を組み合わせて使用することで、リモートサーバから大容量ファイルをローカルにダウンロードできます。file_get_contents() 関数でリモートサーバから大容量ファイルの内容を取得し、file_put_contents() 関数で取得したファイルの内容をローカルに保存します。

以下にサンプルコードを示します。

$fileUrl = 'http://example.com/large_file.zip'; // 远程文件的URL
$localPath = 'path/to/save/file.zip'; // 保存到本地的路径

// 下载文件并保存到本地
if (file_put_contents($localPath, file_get_contents($fileUrl))) {
    echo "文件下载成功。";
} else {
    echo "文件下载失败。";
}

上記の例では、$fileUrl 変数はリモートファイルの URL を格納し、$localPath 変数はローカルに保存するパスを格納しています。file_get_contents($fileUrl) はリモートファイルの内容を取得し、file_put_contents($localPath, …) は取得したファイルの内容をローカルに保存します。

大きなファイルをダウンロードするとメモリ不足になる場合がありますのでご注意ください。この問題を解決するにはstream_context_create()関数を使いストリームコンテキストを作成し、それをfile_get_contents()関数の第2引数として渡し、ファイルをチャンク単位で読み込み保存します。以下は、ストリームコンテキストを使用して大きなファイルをダウンロードするサンプルコードです。

$fileUrl = 'http://example.com/large_file.zip'; // 远程文件的URL
$localPath = 'path/to/save/file.zip'; // 保存到本地的路径

// 创建上下文
$context = stream_context_create([
    'http' => [
        'method' => 'GET',
        'header' => 'User-Agent: Mozilla/5.0', // 设置用户代理
        'timeout' => 300 // 设置超时时间(单位:秒)
    ]
]);

// 打开远程文件并保存到本地
if (file_put_contents($localPath, file_get_contents($fileUrl, false, $context))) {
    echo "文件下载成功。";
} else {
    echo "文件下载失败。";
}

上記の例では、stream_context_create()関数でコンテキストを作成し、httpオプション中でHTTPリクエストのメソッド、ヘッダ情報、タイムアウト時間を設定できます。その後、このコンテキストをfile_get_contents()関数の第3引数として渡すことで、コンテキストを使って大容量ファイルを取得できます。

お役に立てれば幸いです!

bannerAds