浦口网站建设,汉中市建设工程招投标交易中心,全网通网站,企业运营的五大系统你唯一的select是增加允许的执行时间(将其设置为0使其无限#xff0c;但不推荐)或产生一个新的线程#xff0c;并希望最好的。这是不可捕捉的原因是它并没有真正抛出。 没有一行代码实际上触发了这个错误#xff0c;而是PHP说#xff1a;“不#xff0c;不好意思#xff…你唯一的select是增加允许的执行时间(将其设置为0使其无限但不推荐)或产生一个新的线程并希望最好的。这是不可捕捉的原因是它并没有真正抛出。 没有一行代码实际上触发了这个错误而是PHP说“不不好意思这太长了现在closures了。 这是有道理的。 想象一下一个脚本的最大执行时间为30秒捕捉到这个错误又花了30秒…在一个devise不好的程序中开辟了一些相当恶劣的利用机会。 它至less会为DOS攻击创造机会。如何尝试PHP文档(以及至less有一个读者)说看看下面的链接这不是一个例外这是一个错误。 exception和错误之间有重要的区别首先错误不能被try / catch语义捕获。PHP脚本是build立在执行时间短的范例之上的所以PHP默认configuration为假设脚本运行时间超过30秒它必须被陷入无限循环因此应该被终止。 这是为了防止错误的PHP脚本导致拒绝服务无论是意外或恶意的意图。但是脚本有时需要比默认分配更多的运行时间。您可以尝试通过使用set_time_limit()或通过更改php.ini文件中max_execution_time的值来提高限制来更改最大执行时间。 您也可以通过将执行时间设置为0来完全删除限制但不build议这样做。set_time_limit()可能被诸如disable_functions的机制禁用所以它可能对您不可用同样您可能无法访问php.ini 。 如果这两种情况都是这样那么你应该联系你的主机寻求帮助。PHP脚本从命令行运行是个例外。 在这些运行条件下PHP脚本可能是交互式的需要花费很长时间处理数据或等待input。 为此默认情况下从命令行运行的脚本没有max_execution_time限制。你无能为力。 但是可以使用register_shutdown_function进行正常closures在某些情况下处理“致命错误最大执行时间超过30秒”的方法有点棘手function time_sublimit($k 0.8) { $limit ini_get(max_execution_time); // changes even when you set_time_limit() $sub_limit round($limit * $k); if($sub_limit 0) { $sub_limit INF; } return $sub_limit; }在您的代码中您必须测量执行时间并在超时之前抛出exception否则可能会触发致命错误。 $ k 0.8是允许执行时间的80所以你有20的时间来处理exception。try{ $t1 time(); // start to mesure time. while (true) { // put your long-time loop condition here time_spent time() - $t1; if(time_spent time_sublimit()) { throw new Exception(Time sublimit reached); } // do work here } } catch(Exception $e) { // catch exception here }我想出了这个答案 pinkal-vansia给了。 所以我不是要求一个原始的答案而是一个实际应用的答案。 我需要一种方法让页面在超时的情况下自行刷新。 由于我已经观察到我的cURL脚本有足够的超时时间来知道代码正在工作但有时出于某种原因无法连接到远程服务器或者完全读取所提供的html并且在刷新后问题消失没有问题的脚本刷新自己“治愈”一个最大执行超时错误。仅供参考对于正在运行的抓取脚本来说300秒不会太长只需要一点点就可以从我正在抓取的各种页面中提取数据。 有时由于连接不正常而仅仅过了几秒钟。 了解到连接时间有时会失败而不是脚本处理最好不要增加超时而只是自动刷新页面然后重试。是的我通过TheJanOnlinetesting了解决scheme。 sleep()不计入php的执行时间所以这里是工作版本与无限循环把这个在PHP文件的开始编辑1但首先检查是否没有这样的代码while (11) { echo ); }编辑2抓住这个错误看看set_error_handler