8

我已经尝试了一切来更改max_execution_timephp 爬虫脚本,以便它可以运行无限的时间。

我已将 php.ini 文件设置更改max_execution_time0or100000000但没有更改

我也尝试通过使用从 php 脚本本身设置它ini_set('max_execution_time', 0);

所有 php 脚本都抛出相同的错误Fatal error: Maximum execution time of 3000 seconds exceeded,我可能会丢失什么以及如何确保没有最大执行时间限制?

脚本

<?php
ini_set('MAX_EXECUTION_TIME', -1);
error_reporting(E_ALL);  // turn on all errors, warnings and notices for easier debugging
//ini_set('max_execution_time', 123456);
ini_set('max_input_time', -1);
ini_set('memory_limit', '512M');
set_time_limit(0);
date_default_timezone_set('Europe/London');

/*code which scrapes websites*/

?>

phpinfo()

max_execution_time  0   0
max_input_time     -1   -1
4

11 回答 11

4

尝试在php中关闭安全模式,然后尝试以下代码

if( !ini_get('safe_mode') ){ 
    set_time_limit(0); //this won't work if safe_mode is enabled.
}

这应该允许您无限期地运行脚本。

在 Apache 中,您可以通过 .htaccess 使用此行更改最大执行时间

php_value max_execution_time 200

set_time_limit() php 手册参考。

于 2012-07-07T06:44:31.163 回答
3

您不应该让您的爬虫在 apache 下运行,最好通过 cli 作为Gearman设置的一部分单独运行它。

这样它就不会占用你的网络服务器,它可以运行只要你想运行。您可以找到许多可以使用的 Gearman 绑定,当然包括 PHP。

于 2012-07-07T06:50:57.997 回答
2

利用

set_time_limit(0);

在脚本的顶部

于 2012-07-10T12:10:22.317 回答
0

您也可以尝试ignore_user_abort(TRUE);在脚本中设置,因为它可能是浏览器超时而不是脚本。

来自 php.net 手册

<?php
// Ignore user aborts and allow the script
// to run forever
ignore_user_abort(true);
set_time_limit(0);

请参阅此处了解更多信息

http://www.php.net/manual/en/function.ignore-user-abort.php

于 2012-07-08T12:43:30.710 回答
0

在 WAMP 中有 3 个 PHP.ini 文件,因此您也可以在 xampp 中找到 3 个文件,因此只需使用 find 搜索它并替换max_execution_time为您正在设置的内容。但是你必须保持一些小而不是太大,以便快速运行你的应用程序。

于 2012-07-01T19:14:32.660 回答
0

我在xampp 文档中找到了以下内容。也许您正在尝试编辑错误的 php.ini 文件?

为什么我的 php.ini 中的更改没有效果?

从 XAMPP 1.7.1 开始,“php.ini”只在目录“\xampp\php”中。直到 XAMPP 1.7.0 位于目录“\xampp\apache\bin”中。

如果“php.ini”中的更改无效,则 PHP 可能仍在使用另一个。您可以使用 phpinfo() 来验证这一点。转到 URI localhost/xampp/phpinfo.php 并搜索“加载的配置文件”。该值向您显示 PHP 真正使用的“php.ini”。

信息:更改“php.ini”后,您必须重新启动 Apache,这样 Apache/PHP 才能读取新设置。

于 2012-07-10T13:13:20.197 回答
0

如果您在 Windows 上,并且这是一个 CLI 运行脚本,则可以阅读此.

于 2012-07-08T14:49:15.140 回答
0

您必须在 php.ini 中更改这两个(并通过在phpinfo();输出中查找位置来检查这是否是正确的 php.ini!)

max_execution_time = 0
max_input_time = 0

然后检查是否某些 php 文件没有在本地覆盖这些变量。

于 2012-07-13T12:47:23.497 回答
0

检查phpinfo()临时脚本并搜索max_execution_time. 确保它与您设置的值相同。默认应该是 30 秒。尝试将其更改为几个不同的值并重新启动 apache,然后检查该值phpinfo()以确认。

如果当您更改该值时,它会正确反映在 中,phpinfo()这意味着您的脚本中有一些代码正在更改该值。在您的代码中搜索两件事:

  1. 搜索您的代码ini_set()并检查它是否已更改max_execution_time
  2. 搜索set_time_limit()

这些函数可以更改脚本的最大执行时间限制。否则,您应该检查.htaccess可以设置此值的位置。但这也会影响phpinfo()

于 2012-07-10T09:07:27.570 回答
0

您所做的只是将 设置为max_execution_time页面内的任何内容。您无法使用 ini_set 更改此设置。你可以改变memory_limit唯一的。

在此处查看更多详细信息... 来自 php 官方网站。

如果您希望更改它们,请在 php.ini 中进行更改。

于 2012-07-12T16:58:02.753 回答
0

打开php.ini记事本文件并搜索或查找upload_max_filesize = 1000M,您应该更改Post_max_filesize = 1000M然后重新启动您的xampp并刷新本地phpmyadmin ..

于 2016-04-18T11:58:39.800 回答