2011-08-30 39 views
2

我必须处理大量图像(10 MB /图像)php - 如何确定执行时间?

如何确定处理队列中所有图像的执行时间?

  • 从我们的数据中确定时间基准。

  • 设置时间限制。

  • 运行过程。

什么做的执行时间取决于? (服务器,网络速度,数据的类型...?)

@All: 我已经改变了我的方式做我的问题,发送1reqeust/1image,

所以有40张图片,我们将有40请求。没必要在意excution时间:d

感谢

+2

您究竟在做什么(什么类型的处理,图像来自哪里......)以及您为什么需要确定预先持续时间? –

+0

恩:我已创建了图片大拇指。 30岁:我们可以处理20张图片5mb /图片。如果我处理超过20张图像,我想知道处理时间。否则处理将被打破:( – Chameron

+0

你想计算X图像的平均时间 – ComFreek

回答

1

您可以用代码

// first image 
$start = time(); 
// ... work on image ... 
$elapsed = time() - $start; 

if (ini_get('max_execution_time') > $elapsed * $imageCount) 
    trigger_warning("may be not able to finish in time", E_USER_WARNING); 

请注意两件事测试设置:在PHP的CLI版本中,是max_execution_time仅仅硬编码到0/inifinity(根据this comment)。此外,您还可以通过再次调用set_time_limit()像这样复位定时器:

foreach ($imagelist as $image) { 
    // ... do image work .... 

    // reset timer to 30 
    set_time_limit(30); 
} 

这样的话,你可以让你的脚本永远,或者至少运行,直到你与你的图像处理完毕。您必须在apache配置中启用适当的覆盖规则以允许通过AllowOverride All

+1

我改变了我的方式来做我的问题,发送1reqeust/1image,所以有40个图像,我们将有40个请求。没必要在意excution时间:d – Chameron

+0

这也是解决这个问题的一种方式。 =) – Lars

0

我建议(鉴于该问题的有限信息),您尝试使用试错法 - 运行过程,看看需要多长时间 - 增加时间限制直至完成 - 您可能可以缩短流程。

+0

什么是跟踪并增加时间限制的最佳方式? – Chameron

+0

记录该时间开始' - $开始=时间();'然后在结束显示时间取 - '回波时间() - $ start'。执行时间限制是一个php.ini设置 – ManseUK

+0

怎么做,当脚本中断。我们需要在运行之前计算持续时间scriptt – Chameron

0

请注意,服务器的处理时间可以变化取决于来自其它processess服务器上的当前负载了很多。如果它是一个共享服务器,其他用户可以在这个确切的时间运行一些脚本,使您的脚本只执行一半。

我认为这将是很难确定前的脚本运行的执行时间。

我会上传图片的批次(收费)。图像的数量取决于一些测试。

例如,从不同的页面上同时运行脚本几次,看他们是否都还没有完全打破。如果它适用于队列中的5个图像,请编写脚本以处理5个图像。在处理了前五个图像后,将它们存储起来(写入数据库或任何您需要的),稍等一会,然后取下5张图像。

如果运行三个脚本在同一时间每5个图像一切正常,你应该是安全的与任何服务器上的一些其他用户正在做着做着一次。

您更改文件php.ini中的时间执行时间限制,或者如果您无权访问该文件,您可以使用set_time_limit(600)进行600秒的动态设置。然而,我会写更聪明的代码,而不是依赖时间限制。

我的5美分。祝你好运!

+0

是的,我尝试将图像分割成一些请求,而不是一个大的请求。但是我们有一个问题是图像的数量并不总是相同的。请求1:10张图片/ 5mb /图片;请求2:10images/10mb/image – Chameron

+0

然后在传输大量字节而不是特定数量的图像之后暂停脚本。例如,处理25 MB后,存储并暂停,直到队列中的下一个图像。 – Mattis