1

所以我有一个需要来自远程服务器的数据的 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"
4

2 回答 2

1

要在不超时的情况下运行,set_time_limit(0).

要在不等待结果的情况下运行,请通过管道传输脚本..php -f /path/to/file 2>&1

于 2013-07-03T21:51:19.783 回答
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);
于 2013-07-03T22:02:29.860 回答