Как выполнить PHP скрипт, занимающий более 5 минут на обработку
Есть php-скрипт, который возвращает информацию о файле. Работает через api одного сайта. Первое, что нужно, это отправить файл на сервер через POST. В ответе будет json строка, содержащая id задачи:
$url = "https://site.com/api/file/upload"; $path = "your_file_path_here"; $file = new \CURLFile($path); $params = array( "param1" => "text", "param2" => $file ); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: multipart/form-data', 'X-Auth-Token: Your Token Here' )); curl_setopt($ch, CURLOPT_POSTFIELDS, $params); $result = curl_exec($ch); $result = json_decode($result, true); curl_close($ch);
Далее я делаю GET запрос, используя данный id, чтобы получить интересующую информацию о файле:
$url = "https://site.com/api/file/result/".$result["data"]["id"]; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_POST, false); curl_setopt($ch, CURLOPT_HTTPGET, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array( "X-Auth-Token: Your Token Here" )); $result = curl_exec($ch); $result = json_decode($result, true); curl_close($ch);
Однако проблема заключается в том, что информация на сервере обрабатывается не сразу. И результат приходит не полный. Максимальное время, которое требуется для получения всех результатов 5 минут. Сначала я использовал простую форму, с action=»» на страницу php, где был код, который представлен выше. Я пробовал делать цикл while , который проверял не готов ли результат и делал задержку на минуту. Макс. кол-во итераций было задано 6, но сервер через некоторое время давал ошибку:
timeout. set_time_limit
$max_iterations = 6; $current_iteration = 0; $retrieve_results = true; while($retrieve_results) < $objects= $result["data"]; $scanned_count = 0; foreach($objectsas $object)< if($object["status"] === "true")< $count++; >> if($count === count($objects)) < exit; >$current_iteration++; if($current_iteration === $max_iterations) < $retrieve_results = false; exit; >sleep(60); >
Далее решил попробовать загрузку файла через ajax:
$.ajax( < url: 'upload.php', type: 'post', data: formdata, contentType: false, processData: false, success: function(data)< alert(data); >>);
Однако ровно через 1 минуту скрипт сбрасывается, так и не дождавшись ответа. Без цикла while все работает, но результат, который нужен не полный, как я уже писал выше Какие есть варианты решения проблемы? Как вариант хотел попробовать сделать запись в базу данных с последующим обновлением страницы с помощью js, если данные были обновлены, но пока даже не знаю как это все реализовать
Как выполнить php скрипт

- Главная
- Отправить заявку
- База знаний
- Новости
Авторизация на портале поддержки осуществляется в личном кабинете my.active.by (my.activecloud.ru), вкладка Поддержка. Благодарим за понимание.
База знаний
База знаний: Виртуальный хостинг (Linux)
Как запустить PHP скрипт через планировщик?
Для того что бы PHP скрипты запускались через крон, необходимо в планировщике использовать команду вида:
/usr/bin/php /home/username/www/domain.by/plugins/parser.php
где:
/usr/bin/php — путь к интерпретатору PHP.
Пожалуйста, используйте полный путь к интерпретатору PHP.
В зависимости от установленного ПО, укажите полный путь (прим. /usr/bin/php70, /usr/bin/php56).
/home/username/www/domain.by/script.php — полный адрес скрипта
Если решение вопроса найти не удалось, Вы можете отправить нам заявку:
Как выполнить php скрипт
Для запуска PHP-скриптов нужно предварительно определить полный путь до интерпретатора PHP на сервере.
Для этого можно создать файл phpinfo.php с содержимым:
Создать этой файл можно с помощью панели Plesk. Для этого перейдите:
Панель Plesk — Файлы — Выберите сайт — — Создать файл
В открывшемся окне введите название файла. Это будет info.php и нажмите кнопку OK.
Созданный файл появится в папке. После этого необходимо добавить в него содержимое.
Щелкните по названию файла и в открывшемся окне введите:
После чего нажмите кнопку “Сохранить”.
При открытии через браузер данный файл выглядит следующим образом: phpinfo.php
Обратите внимание на строку:
Loaded Configuration File /var/www/vhosts/system/uchtechserver.host4g.ru/etc/php.ini
Она указывает положение конфигурационного файла PHP на сервере, полный путь к которому нужно будет указывать при запуске скрипта.
Панель Plesk — Сайты и домены — Выберите сайт — Планировщик задач
Вверху нажмите кнопку Добавить задачу.
Прежде всего выберите тип задачи в зависимости от своей цели:
Команда. Укажите полный путь к исполняемому файлу, который нужно запустить. Сюда относятся двоичные файлы,
shell-скрипты и пакетные файлы.
Получить URL-адрес. Укажите только URL, не нужно писать команду, такую как curl или wget .
Выполнить PHP-скрипт. Укажите путь к скрипту относительно папки виртуального сервера. Можно нажать на значок папки, чтобы быстро найти файл скрипта.
Затем выберите, как часто задача будет запускаться, и установите желаемое время и дату. По умолчанию время указывается в часовом поясе сервера. Если вам нужен другой часовой пояс, перейдите на страницу Сайты и домены > Планировщик задач > Настройки . Также можно добавить описание задачи и настроить уведомления.
Наконец, прежде чем сохранить задачу, есть возможность запустить ее в тестовом режиме, чтобы проверить, что она настроена верно. Нажмите Запустить сейчас и дождитесь окончания задачи. Если задача завершается с ошибкой, ошибка будет происходить и при выполнении задачи планировщиком, пока вы не найдете и не устраните проблему.
При выборе типа задачи «Выполнить команду» она выглядит следующим образом:
/opt/plesk/php/5.6/bin/php -c /var/www/vhosts/system/uchtechserver.host4g.ru/etc/php.ini -f /var/www/vhosts/uchtechserver.host4g.ru/httpdocs/cron.php
В этой строке /opt/plesk/php/5.6/bin/php — путь к интерпретатору PHP 5.6.
Чтобы указать путь к локальному php.ini , нужно использовать параметр -с , далее — путь к файлу php.ini .
Для запуска исполняемого файла нужно указать параметр -f , далее — полный путь к файлу, начиная от корневого каталога сервера.
Общий вид команды для запуска скриптов находящихся в директории домена domain.com , недоступной для HTTP, имеет вид:
/opt/plesk/php/5.6/bin/php -c /var/www/vhosts/system//etc/php.ini -f /var/www/vhosts//httpdocs/. /cron.php
Рекомендация: если какой-либо скрипт требует для выполнения больших ресурсов и запускается один раз в день, его следует выполнять ночью, в период с 0 до 6 часов утра — нагрузка на серверы в это время минимальна.
Как запустить PHP скрипт из корневой директории или любой папки на сервере

Система безопасности движка блокирует обращение ко всем сторонним php файлам сайта, и позволяет работать с пользовательскими скриптами только в папке mg-pages/ . Но при разработке специфичиских решений, иногда необходимо разрашить исполнять сторонние PHP файлы находящиеся либо в корне сайта, либо в одной из папок сайта.
Как открыть доступ к конкретному скрипту в директории
В файле .htaccess перед строчками
вставьте следующий код
Как открыть доступ ко всем скриптам в нужной директории
В файле .htaccess перед строчками
