Не только для части кода.
Однако есть альтернативные решения, без изменения исходного кода, как требуется:
set_time_limit
set_time_limit()
прервет весь сценарий, если он выполняется слишком много времени. Вы все еще можете настроить функцию отключения .
pcntl_alarm
pcntl_alarm()
отправит вам сигнал через заданный промежуток времени, который может прервать системный вызов блокировки, который класс делает в это время, и это может позволить вам попросить класс прервать его операции, если это предусматривает такой метод. Это может не подходить для среды веб-сервера.
Время ожидания по умолчанию
Если класс использует потоковые функции, вы можете установить время ожидания по умолчанию:
ini_set('default_socket_timeout', 5);
stream_context_set_default(array(
'http' => array(
'timeout' => 5,
),
));
Выполнить в отдельном процессе
Вы можете выполнить форк с pcntl_fork()
, но это не подходит для серверной среды.
Вы также можете использовать proc_open
или popen
, чтобы выполнить скрипт PHP в отдельном процессе и завершить его, если он выполняется слишком долго. (После того, как процесс порожден, выполните ожидание ожидания в потоке stdout процесса с stream_select
.)
Или настроить сервер для обработки этих задач.