我之前曾问过一个问题and got the answer,但我认为我遇到了另一个问题。
我正在使用的php脚本执行此操作:
1 - 从我的备份服务器将文件传输到我的服务器
2 - 当它完成转移时,它会使用curl向它发送一些帖子数据,这会创建一个zip文件
3 - 完成后,结果将被回显,具体取决于结果;传输文件,或什么都不做。
我的问题是: 当文件足够小(低于500MB)时,它会创建它,并且传回没有问题。当它更大时,它超时,完成在远程服务器上创建zip,但因为它超时它不会被转移。
我是从备份服务器上的命令行运行的。我在php脚本中有这个:
set_time_limit(0); // ignore php timeout
ignore_user_abort(true); // keep on going even if user pulls the plug*
while(ob_get_level())ob_end_clean(); // remove output buffers
但是当我运行sudo php backup.php
正在使用curl使其超时,就像正在制作zip的另一端的浏览器一样?我认为问题是答案没有得到回应。
编辑: (@symcbean) 我没有看到任何东西,这就是为什么我在挣扎。当我从浏览器运行它时,我在地址栏中看到了加载的东西。大约30秒后它就停止了。当我从命令行执行此操作时,同样的交易。 30秒,它就停止了。只有在需要创建大拉链时才会发生这种情况。
它是通过文件调用的。该文件加载一个类,将连接信息发送给该类。哪个联系服务器来制作zip,将zip传回,为它做一些东西然后将其传输到S3进行存档。
它登录到远程服务器,使用curl上传文件。在一个有效的响应,它再次卷曲文件的位置作为一个网址(我将永远知道它是什么),它启动我刚刚转移的php文件。拉链始终没有问题,甚至高达22GB,有时需要很长时间。之后,它等待“创建”的响应。等待回应就是死亡的地方。
因此拉链始终会被创建,但等待的时间就是“我认为”使它死亡的原因。
第二次修改: 我从命令行尝试了这个:
$ftp_connect= ftp_connect('domain.com');
$ftp_login = ftp_login($ftp_connect,'user','pass');
ftp_pasv($ftp_connect, true);
$upload = ftp_put($ftp_connect, 'filelist.php', 'filelist.php', FTP_ASCII);
$get_remote = 'filelist.php';
$post_data = array (
'last_bu' => '0'
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'domain.com/'.$get_remote);
curl_setopt($ch, CURLOPT_HEADER, 0 );
// adding the post variables to the request
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
//echo the following to get response
$response = curl_exec($ch);
curl_close($ch);
echo $response;
得到了这个:
<HTML>
<HEAD>
<TITLE>500 Internal Server Error</TITLE>
</HEAD><BODY>
<H1>Internal Server Error</H1>
The server encountered an internal error or
misconfiguration and was unable to complete
your request.<P>
Please contact the server administrator to inform of the time the error occurred
and of anything you might have done that may have
caused the error.<P>
More information about this error may be available
in the server error log.<P>
<HR>
<ADDRESS>
Web Server at domain.com
</ADDRESS>
</BODY>
</HTML>
同样,错误日志为空白,zip仍然被创建,但由于创建的650MB左右超时,我无法得到响应。
答案 0 :(得分:0)
问题在于生成要返回的文件的服务器代码。
检查php错误日志
由于某些原因可能会超时,但日志应告诉您原因。
答案 1 :(得分:0)
我修好了这些人,非常感谢所有帮助过我的人,它指出了我正确的方向。
最后,问题出在远程服务器上。发生的事情是它超时了cURL连接,它没有发送我需要的结果。
我做了什么来修复它是为我的类添加一个函数(再次)使用curl,检查zip文件http代码我知道它正在创建当它完成时,然后在本地抛出结果。如果没有完成,请睡几秒钟然后再次检查。
private function watchDog(){
$curl = curl_init($this->host.'/'.$this->grab_file);
//don't fetch the actual page, you only want to check the connection is ok
curl_setopt($curl, CURLOPT_NOBODY, true);
//do request
$result = curl_exec($curl);
//if request did not fail
if ($result !== false) {
//if request was ok, check response code
$statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($statusCode == 404) {
sleep(7);
self::watchDog();
}
else{
return 'zip created';
}
}
curl_close($curl);
}