2011-11-15 192 views
0

我试图修改导入60秒后超时的csv导入函数。对于每一行都有被调整大小的图像并执行一些其他代码。导入csv超时问题

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

设置我提出:

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

我已经试过睡眠(),每10日线,但这只是使工艺进口较少生产线

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 
} 

服务器:

  • 阿帕奇
  • PHP 5.3.3
  • MYSQL
  • 光油缓存

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

+0

请更新您的问题,并添加更多关于您尝试从命令行运行脚本的详细信息。 –

回答

1

脚本超时时尝试的第一件事是使用php-cli运行它。对通过命令行运行的脚本没有执行时间限制。

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

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

+0

我在memory_get_usage()的每一行上做了一个file_put_contents(),用法介于8.25mb到8.75mb之间。 我无法做命令行导入我试图在2小时后放弃 – Ivar

0

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

使用睡眠会使它输入更少的行,基本上脚本超时,因为它超过60秒。通过增加睡眠,它在60秒内完成得更少。

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

0

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

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