Резервное копирование PHP скрипт тайм-аут
У меня есть резервная копия script, которая копирует все файлы для веб-сайта в zip файл (используя script, подобный ответе на этот вопрос), Однако для больших сайтов время script истечет, прежде чем оно может завершиться.
Можно ли увеличить время, доступное для script, для запуска? Веб-сайты работают на общих серверах Windows, поэтому у меня нет доступа к файлу php.ini.
Ответы
Ответ 1
Проще говоря; не делайте HTTP-запрос для запуска PHP script. Границы, которые вы испытываете, установлены, потому что вы используете HTTP-запрос, что означает, что вы можете иметь тайм-аут. Лучшим решением было бы реализовать это с помощью "cronjob" или того, что Microsoft называет "Запланированные задачи". Большинство хостинг-провайдеров позволят вам запускать такую задачу в установленные сроки. Вызывая командную строку script, вам больше не нужно беспокоиться о тайм-аутах, но вы по-прежнему рискуете столкнуться с проблемами памяти.
Если у вас есть хороший хостинг-провайдер, почему он не предлагает ежедневные резервные копии для начала?:)
Ответ 2
Если вы находитесь в общей серверной среде и у вас нет доступа к файлу php.ini или вы хотите установить параметры php для каждого сайта, вы можете использовать файл .htaccess
(при запуске на веб-сервер Apache).
Например, чтобы изменить значение max_execution_time
, все, что вам нужно сделать, это отредактировать .htaccess
(находится в корневом каталоге вашего сайта, обычно доступном по FTP) и добавить эту строку:
php_value max_execution_time 300
где 300 - количество секунд, на которые вы хотите установить максимальное время выполнения для php script.
Существует также другой способ, используя функцию ini_set в файле php
например. Чтобы установить время выполнения как 5 секунд, вы можете использовать
ini_set('max_execution_time', 300); //300 seconds = 5 minutes
Пожалуйста, дайте мне знать, если вам нужно больше разъяснений.
Ответ 3
задает лимит времени, но все равно может быть ограничен настройками php.ini
set_time_limit (0);
http://php.net/manual/en/function.set-time-limit.php
Ответ 4
Вы можете использовать следующее в начале script:
<?php
if(!ini_get('safe_mode')){
set_time_limit(0); //0 in seconds. So you set unlimited time
}
?>
И в конце script используйте flush(), чтобы сообщить PHP, чтобы отправить то, что он сгенерировал.
Надеюсь, что это решает вашу проблему.
Ответ 5
Указывает ли сообщение script сообщение об ошибке "Максимальное время выполнения xx секунд превышено" или отображается пустая страница? Если это так, ignore_user_abort может быть тем, что вы ищете. Он сообщает php не останавливать выполнение script, если связь с браузером потеряна, что может защитить вас от других механизмов таймаута, участвующих в сообщении.
В принципе, я бы сделал это в начале вашего script:
set_time_limit(0);
ignore_user_abort(true);
Это, как посоветовал Берри Лангерак, вам не следует использовать HTTP-вызов для запуска вашей резервной копии. Cronjob - это то, что вы должны использовать. Наряду с set_time_limit(0)
он может работать вечно.
В средах с общим хостингом, где изменение директивы max_execution_time
может быть запрещено, и где вы, вероятно, не имеете доступа к какой-либо командной строке, я боюсь, что нет простого (и чистого) решения для ваша проблема и самое простое решение - очень часто использовать решение для резервного копирования, предоставляемое хостером, если оно есть.
Ответ 6
Попробуйте выполнить функцию:
set_time_limit(300);
В окнах есть небольшая вероятность того, что ваш веб-хост позволит вам выполнить настройки езды, загрузив файл php.ini в корневой каталог вашего веб-сервера. Если да, загрузите файл php.ini, содержащий:
max_execution_time = 300
Чтобы проверить, работают ли настройки, выполните phpinfo()
и проверьте Локальное значение для max_execution_time.
Ответ 7
Вариант 1: Попросите хостинговую компанию разместить резервные копии где-нибудь, доступными php, поэтому файл php может перенаправить резервную копию.
Вариант 2: Разделите резервную копию script в нескольких частях, возможно, используйте несколько ajax для вызова script несколько раз подряд, дайте пользователю хороший индикатор выполнения и объедините результат вызовов script в zip с php и предлагать это как загрузку.