PHP: превышено максимальное время выполнения 30 секунд

У меня есть приложение php, которое вызывает класс Client. Каждый раз так часто я получаю ошибку времени. Сначала я подумал, что это SQL, но он обращается к самому классу.

Неустранимая ошибка: максимальное время выполнения 30 секунд превышено в C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\ClientPortal\classes\Connections.php в строке 3

<?php
    session_start();
    class Connections { //line 3

Кто-нибудь знает, что здесь происходит?

спасибо,

Билли

Ответы

Ответ 1

PHP-скрипты имеют максимальное время, за которое им разрешено выполнять, как указано в php.ini.

Вы можете обойти это, если хотите, добавив следующую строку:

ini_set('max_execution_time', 123456);

где 123456 - это количество секунд, в течение которых вы хотите, чтобы предел был.

Вы также можете использовать функцию set_time_limit, о которой я только что узнал и предполагаю, делает то же самое. Я всегда делал первое.

Вы можете изменить его в файле php.ini, но вы можете использовать script для выполнения пакетной операции или чего-то еще. Вы бы не захотели, чтобы на PHP скрипт, к которому обращается конечный пользователь, чтобы сидеть там, висящий в течение 30 секунд и более, поэтому, вам лучше оставить его по умолчанию или даже отключить его в php.ini файл и установить max_execution_time по мере необходимости.

Как видно в комментариях ниже, вы можете установить max_execution_time равным 0, чтобы остановить ошибку, когда-либо происходящее, но визитная карточка права сказать, что, по крайней мере, для веб-запроса, вы действительно не должны этого делать. Для интерпретатора командной строки php это поведение по умолчанию.

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

Вы также можете засунуть несколько вещей $s = microtime(true); yourstuff(); var_dump(microtime(true)-$s);, чтобы получить смутный обзор того, какие биты замедляют работу, просто убедитесь, что вы не оставите их в дальнейшем!

Если вы все еще пытаетесь найти основную причину, установите xdebug на свой локальный компьютер и запустите профайлер. Расширение доступно в виде предварительно скомпилированного двоичного файла Windows (хотя, похоже, запутанный массив версий). Вы можете проверить результаты запуска профилировщика, используя wincachegrind.