2016-04-07 3 views
0

У меня есть сценарий php, который принимает таблицы mysql с удаленного хоста и вставляет их в локальную базу данных.500 ошибка сервера после 1 минуты

Мне нужен сценарий для работы неограниченное количество времени, но он продолжает давать 500-серверную ошибку через ровно 60 секунд.

Я попытался изменить ини ВАР, как так:

ini_set('max_execution_time', 0); 
ini_set('max_input_time', -1); 
ini_set('default_socket_timeout', 15); 
ini_set('mysql.connect_timeout', 15); 
set_time_limit(0); 

А также устанавливать их в php.ini. При печати переменных конфигурации я вижу, что эти изменения вступают в силу. Но мой скрипт продолжает давать 500 после ровно 60 секунд исполнения.

Что мне не хватает?

EDIT

Я не считаю, что это может иметь ничего общего с какими-либо ограничений по размеру, как предложено в связанном «продублировать» вопрос. Это связано с тем, что при запуске этого сценария у меня есть разные результаты в базе данных, иногда вставка 100 000 строк, а иногда и вставка 300 000, и каждый раз ошибка отображается почти ровно 60 секунд.

Я удалил сценарий базы данных и только побежал (70), чтобы узнать, что произошло с установленными выше временными ограничениями, и сценарий по-прежнему дает ошибку 500 через 60 секунд.

UPDATE

Это странно, если я указываю браузер скрипт и запустить его, он останавливается через 60 секунд. Но если я закрою браузер до получения ошибки, скрипт будет работать на сервере.

+1

Возможный дубликат [сценария php останавливается через 360 секунд и показывает 500 ошибок сервера для больших файлов] (http://stackoverflow.com/questions/14601330/php-script-stops-after-360-seconds-and-shows -500-server-error-for-large-files) –

+0

Вы изменяете конфигурацию на удаленном сервере или локальном хосте? Из-за того, что вы пытаетесь сделать, вам нужно изменить настройки для обоих. Однако вы можете настроить свой сценарий, чтобы он не пытался работать более 60 секунд. –

+1

Если вы выполняете 'sleep (50)' перед запуском кода, вы все равно получите сообщение об ошибке через 60 секунд или получите его через 110 секунд? – apokryfos

ответ

1

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

Проблема возникает, если вы используете сценарий в течение длительного времени, но нет выхода. Я исправил это просто, убедившись, что скрипт выводит что-то каждые несколько секунд. Для меня это было:

$counter = 0; 
while($continue === TRUE){ //The long loop 
    if($counter%1000==0) echo '.'; //write out a dot every 1000 iterations 
    $counter ++; 
    //Code... 
} 

Я получил намек на мою проблему здесь: https://serverfault.com/questions/277386/apache-2-2-cgi-timeout-configuration

Это что-то о том, как тайм-ауты выводится на апача, если нет выхода из сценария в течение нескольких секунд (60 для меня).

Возможно, вы можете исправить это в каком-либо файле конфигурации, чтобы вам не пришлось выполнять вышеупомянутый взлом.

Смежные вопросы