У меня есть форма регистрации PHP, которая очень трудоемка, когда пользователь нажимает кнопку отправки до такой степени, что это заставит сервер выкинуть следующую ошибку:
Request Timeout This request takes too long to process, it is timed out by the server. If it should not be timed out, please contact administrator of this web site to increase 'Connection Timeout'.
Я искал в google способы решения этой проблемы, и, похоже, есть несколько способов решения этой проблемы. однако я хотел бы знать, каков наилучший способ сделать это.
Я объясню шаги в регистрационной форме, когда пользователь нажмет кнопку отправки:
step 1- it will checks the mysql database for duplicated data. step 2- it will create 2 mysql tables with their columns step 3- it will enter the data passed on by the user into the mysql table. step 4- it will create a subdomain on my server. step 5- it will move some files from one folder on my server into the newly created subdomain. there are alot of files but i don't think this should take that long? I need some advise on this please and what is the best way of doing this? step 6- it will send a confirmation email to the user.
Я могу опубликовать свой код, но он очень большой, поэтому я подумал, что это может заставлять кого-то читать этот вопрос.
в верхней части моей страницы регистрации PHP, у меня есть эта строка кода, но это не влияет:
set_time_limit(0);
как вы думаете, лучше всего использовать следующий код?
ini_set('max_execution_time', 300);
любые рекомендации по решению этой проблемы будут оценены по достоинству.
благодаря
Это похоже на то, что делают хостинг-серверы.
Если у вас есть процесс с несколькими «длинными» шагами, то обычной практикой является разделение его и выполнение «длинных» шагов в фоновом режиме с помощью задания cron.
Поэтому попробуйте сделать следующее: пусть шаги 1,2,3 пройдут, как ожидалось, но заблокируйте учетную запись пользователя после этого и дайте ему / ей сообщение вроде «Ваша учетная запись будет разблокирована в ближайшее время. Мы отправим вам последующее электронное письмо».
После этого напишите сценарий консоли (это может быть PHP или любой другой язык), который извлекает всех новых пользователей, которые зарегистрировались, но еще не прошли всю процедуру, и выполняет шаги 4,5,6 для каждого из них.
Наконец напишите задание cron, которое выполняет скрипт каждую минуту .
PS: Разделение может быть разным. Как отметил @Mark_Baker, лучше сначала установить ограничение по времени на 0 и измерить время для каждого шага.
Это конкретное сообщение об ошибке создается веб-сервером LiteSpeed (более быстрая замена Apache). Он имеет специальную функцию, благодаря которой он отменяет длительные сценарии. Чтобы отключить это, вам нужно поместить следующее в ваш .htaccess
файл в корень вашего сайта.
RewriteEngine On RewriteRule .* - [E=noabort:1] RewriteRule .* - [E=noconntimeout:1]