我创建了一个 Joomla 扩展,在其中我将记录从表 A 存储到表 B。如果表 A 包含的数据较少,我的脚本工作正常。如果表 A 包含大量数据。在插入这个巨大的数据时,执行超出并显示此错误“致命错误:/mysite/libraries/joomla/database/database/mysqli.php 在第 382 行的最大执行时间超过 30 秒”。我可以通过更改 ini 文件来克服这个问题,但是它的 Joomla 扩展名是人们将在他们的网站中使用它的,所以我不能告诉他们在 ini 文件中进行更改,事实上我不想告诉他们。
3 回答
看看这个
http://davidwalsh.name/increase-php-script-execution-time-limit-ini_set
ini_set('max_execution_time', 300);
使用这种方式或
set_time_limit(0);
在您编写查询代码set_time_limit(0)的页面开头使用以下代码 ;
从技术上讲,您可以使用set_time_limit
. 就个人而言,我不会搞乱其他人在他们的服务器上设置的限制,假设他们出于某种原因(性能、安全性——尤其是在共享托管环境中,经常发现像 Joomla! 这样的软件)。此外,set_time_limit
如果 PHP 在安全模式下运行,将无法工作。
因此,您剩下的就是将任务拆分为多个步骤。例如,如果您的表有 100000 条记录,并且您测量可以在合理的时间内处理大约 5000 条记录,那么请在 20 个单独的步骤中执行操作。
在平均系统上,每个步骤的执行时间应该少于 30 秒。请注意,步数是动态的,您以编程方式将记录数除以一个常数(在测试期间找出一个有用的值)以获得运行时的步数。
您需要将脚本分成两部分,一部分找出所需的步骤数,将它们显示给用户,并通过向第二个脚本发送 AJAX 请求(例如:“处理记录 5001 到 10000 "),并在适当的服务器响应到达(即请求完成)时将步骤标记为已完成(供用户查看)。
第二部分完全是服务器端的并接受 AJAX 请求。该脚本在服务器上执行实际工作。它必须接收某种参数(“处理记录 5001 到 10000”请求)以了解它应该处理哪个步骤。当它完成它的步骤时,它会向客户端脚本返回一个“成功”(或可能是“失败”)代码,以便它可以通知用户。
这个主题有一些变化,例如,您可以构建一个将用户重定向到自身的脚本,但使用不同的参数,因此它知道它在哪里停止并且可以从那里继续下一步。通常,您会希望解决方案能够为用户提供尽可能多的信息和控制权。