Intereting Posts
PHP – прекратить отображение полного пути в ошибках Помогите защитить доступ к файлам с помощью htaccess и php? Как выполнить два запроса mysql как один в PHP / MYSQL? Могу ли я использовать промежуточное программное обеспечение Laravel 5, чтобы позволить пакетам перекрывать маршруты приложений? Отправить iPhone HTTP-запрос на веб-сервер Apache PHP регулярное выражение и косая черта Regex для получения информации из квадратных скобок Как запретить PDO интерпретировать знак вопроса в качестве заполнителя? PDO, выбор содержимого из двух таблиц foreach php включает проблему с URL-адресами с параметрами? view = task & others file not found Динамическое создание / вставка в ассоциативный массив в PHP php file_get_contents возвращает значение null, когда allow_url_fopen включен Модель не обновляет laravel Magento getUrl не работает с объектом каталога / категории? PHP Zend Framework – Zend_Config и глобальное состояние

PHP-скрипт выполняется дважды, когда более 60 секунд

Хорошо, так что я обманывал свой мозг об этом в течение последних 3 часов и был похож на сумасшедший, без разрешения проблемы. Итак, я написал пример скрипта, который воспроизводит это, так как мой оригинальный скрипт составляет около 800 строк.

<?php set_time_limit(0); ini_set('max_input_time', '-1'); ini_set('max_execution_time', '0'); error_log("executing script... "); $time = time(); for ($t = 0; $t <= 15; $t++) { error_log("Logging: $t (".(time()-$time)." seconds)"); sleep(5); } error_log("execution done (".(time()-$time)." seconds)"); ?> 

Теперь функция сна используется только для повторного создания времени выполнения страницы и не используется в исходном коде. Это приведет к следующему результату в файле error_log

 [Tue Nov 06 16:24:14 2012] executing script... [Tue Nov 06 16:24:14 2012] Logging: 0 (0 seconds) [Tue Nov 06 16:24:19 2012] Logging: 1 (5 seconds) [Tue Nov 06 16:24:24 2012] Logging: 2 (10 seconds) [Tue Nov 06 16:24:29 2012] Logging: 3 (15 seconds) [Tue Nov 06 16:24:34 2012] Logging: 4 (20 seconds) [Tue Nov 06 16:24:39 2012] Logging: 5 (25 seconds) [Tue Nov 06 16:24:44 2012] Logging: 6 (30 seconds) [Tue Nov 06 16:24:49 2012] Logging: 7 (35 seconds) [Tue Nov 06 16:24:54 2012] Logging: 8 (40 seconds) [Tue Nov 06 16:24:59 2012] Logging: 9 (45 seconds) [Tue Nov 06 16:25:04 2012] Logging: 10 (50 seconds) [Tue Nov 06 16:25:09 2012] Logging: 11 (55 seconds) [Tue Nov 06 16:25:14 2012] executing script... [Tue Nov 06 16:25:14 2012] Logging: 0 (0 seconds) [Tue Nov 06 16:25:14 2012] Logging: 12 (60 seconds) [Tue Nov 06 16:25:19 2012] Logging: 1 (5 seconds) [Tue Nov 06 16:25:19 2012] Logging: 13 (65 seconds) [Tue Nov 06 16:25:24 2012] Logging: 2 (10 seconds) [Tue Nov 06 16:25:24 2012] Logging: 14 (70 seconds) [Tue Nov 06 16:25:29 2012] Logging: 3 (15 seconds) [Tue Nov 06 16:25:29 2012] Logging: 15 (75 seconds) [Tue Nov 06 16:25:34 2012] Logging: 4 (20 seconds) [Tue Nov 06 16:25:34 2012] execution done (80 seconds) [Tue Nov 06 16:25:39 2012] Logging: 5 (25 seconds) [Tue Nov 06 16:25:44 2012] Logging: 6 (30 seconds) [Tue Nov 06 16:25:49 2012] Logging: 7 (35 seconds) [Tue Nov 06 16:25:54 2012] Logging: 8 (40 seconds) [Tue Nov 06 16:25:59 2012] Logging: 9 (45 seconds) [Tue Nov 06 16:26:04 2012] Logging: 10 (50 seconds) [Tue Nov 06 16:26:09 2012] Logging: 11 (55 seconds) [Tue Nov 06 16:26:14 2012] Logging: 12 (60 seconds) [Tue Nov 06 16:26:19 2012] Logging: 13 (65 seconds) [Tue Nov 06 16:26:24 2012] Logging: 14 (70 seconds) [Tue Nov 06 16:26:29 2012] Logging: 15 (75 seconds) [Tue Nov 06 16:26:34 2012] execution done (80 seconds) 

heres некоторые настройки из phpinfo, которые актуальны

 === apache2handler === Max Requests: Per Child: 1000 - Keep Alive: on - Max Per Connection: 200 Timeouts: Connection: 300 - Keep-Alive: 2 === PHP Version 5.4.5 Core Settings === max_execution_time Local: 0 Master: 30 max_input_time Local: -1 Master: -1 

Я пробовал все, что мог придумать. он, по-видимому, является настройкой сервера либо с Apache, либо с PHP, потому что, когда я запускаю этот же скрипт на своем локальном хосте, он успешно работает, как и он, без двойной загрузки. и перед его спросом, да, каждый раз, когда я делаю изменение INI или изменение конфигурации apache, я перезапускаю apache.

также, вот записи access_log для приведенного выше примера.

 *.*.*.* - - [06/Nov/2012:16:43:56 -0700] "GET /test.php HTTP/1.1" 200 20 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:16.0) Gecko/20100101 Firefox/16.0" *.*.*.* *********.com 80 55050278 1012 321 *.*.*.* *.*.*.* - - [06/Nov/2012:16:44:56 -0700] "GET /test.php HTTP/1.1" 200 20 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:16.0) Gecko/20100101 Firefox/16.0" *.*.*.* *********.com 80 60054985 1012 321 *.*.*.* 

Определенно, что-то делает это, как только 60 секунд было достигнуто во время выполнения, потому что, когда я изменяю время выполнения, чтобы сказать, 55 секунд, он работает как только он должен.

 [Tue Nov 06 16:46:00 2012] executing script... [Tue Nov 06 16:46:00 2012] Logging: 0 (0 seconds) [Tue Nov 06 16:46:05 2012] Logging: 1 (5 seconds) [Tue Nov 06 16:46:10 2012] Logging: 2 (10 seconds) [Tue Nov 06 16:46:15 2012] Logging: 3 (15 seconds) [Tue Nov 06 16:46:20 2012] Logging: 4 (20 seconds) [Tue Nov 06 16:46:25 2012] Logging: 5 (25 seconds) [Tue Nov 06 16:46:30 2012] Logging: 6 (30 seconds) [Tue Nov 06 16:46:35 2012] Logging: 7 (35 seconds) [Tue Nov 06 16:46:40 2012] Logging: 8 (40 seconds) [Tue Nov 06 16:46:45 2012] Logging: 9 (45 seconds) [Tue Nov 06 16:46:50 2012] Logging: 10 (50 seconds) [Tue Nov 06 16:46:55 2012] execution done (55 seconds) 

Любая помощь с этим будет высоко оценена!

Related of "PHP-скрипт выполняется дважды, когда более 60 секунд"

Возможно, что-то вроде отсутствующего значка будет вызывать вызов вашего сценария дважды. См. http://www.webdeveloper.com/forum/showthread.php?245809-Script-Running-Twice . Это также может случиться, если у вас нет WWW, перенаправленного на www или наоборот. См. PHP выполняется дважды при загрузке страницы при перенаправлении с не-www на www

Просто, чтобы это исключить, попробовали ли вы проверить это в другом браузере? Я только упоминаю об этом, потому что недавно наткнулся на это:

https://support.mozilla.org/en-US/questions/922783

В качестве обходного пути, возможно, вы можете разделить выполнение на две страницы; когда вы закончите с первым, просто загрузите второй. Это также может работать вокруг определенных ограничений ресурсов, таких как низкий бюджет ОЗУ в вашей конфигурации PHP.