我试图修改csv导入函数,该函数在导入60秒后超时。对于每一行都有调整大小的图像,并执行一些其他代码。
我知道vps可以处理这个,但在批量,因为我有另一个网站在同一服务器上运行不同的csv程序,但做同样的事情。该程序可以导入8000行并调整图像大小。设置有:处理10行,等待3秒,重复。
设置:
- set_time_limit
- max_execution_time
- 浏览器http keep alive超时
我尝试过每隔10行调用sleep(),但这只会使进程导入更少的行
if( (($current_line % 10) == 0) && ($current_line != 0) )
{
sleep(3);
}
脚本是这样循环遍历文件
的for ($current_line = 0; $line = fgetcsv($handle, MAX_LINE_SIZE, Tools::getValue('separator')); $current_line++)
{
//code here
}
服务器:
- Apache >PHP 5.3.3
- MYSQL
- <
- 清漆缓存/gh>
我能做些什么使它工作?
当脚本超时时,首先要尝试的是使用php-cli运行它。通过命令行运行的脚本没有执行时间限制。
如果这不能解决你的问题,那么你知道这不是执行时间限制。
要尝试的第二件事是打印出常规的状态消息,包括来自memory_get_usage()的消息,这样您就可以消除作为脚本崩溃原因的内存泄漏。这可以帮助您确定您的脚本是否因某些输入而死亡。
可以覆盖默认超时时间。Set_time_limit (0);
使用sleep将使它导入更少的行,基本上脚本超时了,因为它占用了超过60秒。如果增加睡眠时间,60秒内完成的事情就会变少。
如果这是一个关键的脚本,我会考虑把它移动到另一种编程语言,可以执行这个更快。如果它只是一次性的,或者不是关键任务,尝试set_time_limit(0),使它永远不会超时。还可以尝试在浏览器中键入PHP scriptname,以便在命令行中运行脚本。
尝试向浏览器输出一些内容以保持浏览器正常运行。如果不活动FF为3分钟,IE将在1分钟后超时。
<?
if( (($current_line % 10) == 0) && ($current_line != 0) )
{
sleep(3);
echo '. ';
}
?>