导入csv超时问题


Importing csv timeout issue

我试图修改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 '. ';
}
?>