我需要使用curl将备份文件从一个Web服务器下载到另一个Web服务器。但是我有一些限制:
以下是我所谈论的例子:
让我们假设example.com存在于IP地址为1.1.1.1的服务器上,而域本身指向的是其他IP地址(例如2.2.2.2)。
我知道example.com文件夹中的1.1.1.1服务器上有一些存档文件
我创建了一些测试代码,这些代码似乎适用于数百KB的文件,但不适用于600 MB的文件,我无法检测到问题。
在这种情况下,curl是否将文件下载到RAM或像复制功能那样读取大块数据?如果它首先将数据下载到RAM中,是否有一些解决方案可以执行此wget的确切操作:“ wget --header ='Host:example.com'http://1.1.1.1/a.tar”?
function get_file( $domain, $path_to_remote_file, $ip, $f_out )
{
$url = "http://" . $domain . "/" . $path_to_remote_file;
$handle = fopen($f_out, "w");
$ch = curl_init( $url );
curl_setopt( $ch,
CURLOPT_RESOLVE,
array (
$domain . ":80:" . $ip,
"www." . $domain . ":80:" . $ip
)
);
curl_setopt( $ch, CURLOPT_DNS_USE_GLOBAL_CACHE, false );
curl_setopt( $ch, CURLOPT_FILE, $handle );
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1 );
curl_setopt( $ch, CURLOPT_TIMEOUT, 300);
$result = curl_exec( $ch );
curl_close( $ch );
fclose( $handle );
echo $result;
}
答案 0 :(得分:0)
您的问题不在于curl,wget,dns或文件大小。也许是您编写PHP脚本的时间。
您可以尝试启用PHP LOG,并检查脚本为何停止。然后,您可以尝试使用set_time_limit(0)
。请注意,您是否正在使用共享主机,也许管理员会警告您有关时间。
一个很好的解决方案:使用工作者或cron作业。例如,plesk和cpanel具有使用php-cli
运行PHP的模式,而没有任何http请求。