导入csv超时问题

时间:2011-11-15 21:27:16

标签: php csv import timeout

我正在尝试修改导入60秒后超时的csv导入功能。对于每一行,都有调整大小的图像,并执行其他一些代码。

我知道vps可以处理这个但是批量处理,因为我在同一台服务器上有另一个运行不同csv程序的网站但做同样的事情。该程序可以导入8000行并调整图像大小。其中的设置是:处理10行并等待3秒,重复。

我提出的设置:

  • set_time_limit
  • 的max_execution_time
  • 浏览器http保持活动超时

我已经尝试了每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
  • 清漆缓存

我可以做些什么来完成这项工作?

3 个答案:

答案 0 :(得分:1)

当脚本超时时,首先要尝试使用php-cli运行它。通过命令行运行的脚本没有执行时间限制。

如果这不能解决您的问题,那么您知道这不是执行时间限制。

要尝试的第二件事是打印常规状态消息,包括来自memory_get_usage(),以便您可以消除内存泄漏导致脚本崩溃的原因。这可以帮助您确定您的脚本是否因某些输入而死亡。

答案 1 :(得分:0)

您可以覆盖默认的超时时间。 set_time_limit(0);

使用sleep将导致它导入更少的行,基本上脚本超时是因为它超过60秒。通过添加睡眠,它可以在60秒内完成。

如果这是一个关键脚本,我会考虑将其移动到另一种可以更快地执行此操作的编程语言。如果它只是一个关闭,或者不是关键任务尝试set_time_limit(0),这使它永远不会超时。也尝试在浏览器中输入php scriptname以在命令行中运行脚本。

答案 2 :(得分:0)

尝试向浏览器输出内容以使浏览器保持活动状态。如果不活动FF为3分钟,则IE在1分钟后超时。

<?
if( (($current_line % 10) == 0) && ($current_line != 0) )
{
  sleep(3);
  echo '. ';
}
?>