所以我有一个需要远程服务器数据的php脚本。它是这样的:
set_time_limit(100);
ignore_user_abort(true);
$x = 0
while($x < 10){
$data = file_get_contents("http://www.remoteserver.com/script");
// do something with the data
}
// insert ALL the gained data in the local database
如果我在浏览器中打开脚本,则需要大约10秒钟才能完成。但是,我需要循环它不是10次,而是 24次。然后脚本大约需要22秒才能完成。我无法在循环中插入数据,我需要等到循环结束。
现在,有趣的是,当循环设置为10时,如果通过cronjob运行,脚本将设法完成。 如果设置为24,则脚本无法完成,并且未在本地数据库中插入任何数据!
这是为什么?我的问题有什么解决方案吗?我在浏览器中打开它时工作正常。
我用这个cronjob命令调用脚本:
php public_html/example.com/my_script.php
我使用此cronjob命令获得相同的结果:
curl "http://example.com/my_script.php"
答案 0 :(得分:1)
在没有超时的情况下运行,set_time_limit(0)
。
要在不等待结果的情况下运行,请管理脚本.. php -f /path/to/file 2>&1
答案 1 :(得分:0)
我有类似的问题(并发问题)。你可能也有它,如果你的脚本需要更多的时间来执行,那么cron会调用它。尝试锁定文件,例如:
$fp = fopen(dirname(__FILE__), 'r');
if (flock($fp, LOCK_EX | LOCK_NB)) // lock yourself
{
...do your thing...
flock($fp, LOCK_UN); // unlock yourself
}
fclose($fp);