Как сделать чтобы скрипт работал постоянно php
Добавил пользователь Владимир З. Обновлено: 10.09.2024
Сначала создал тему в разделе Веб-строительство, но как выяснилось проблема не связана с самим кодом php и в том разделе, возможно нет специалистов которые знают ее решение.
Суть проблемы в том, что сервер обрывает выполнение скрипта на 170-180 секунде без вывода ошибок, в phpinfo() время выполнения стоит 600 секунд:
Проверил на другом хостинге, там вообще обрыв идет на 130 секунде и выдает ошибку:
504 Gateway Time-out
Тут уже обсуждался мой вопрос:
На локальном сервере скрипт отрабатывает до конца.
А у вас сервер или VPS?
Хостинг VPS, любые настройки доступны
Вот тут похожая проблема:
Кстати хостер сказал что у них нет услуги администрирования и в моей проблеме предложили разбираться самому.
Это вы так думаете что в VPS любые настройки доступны ;)
На самом деле, обрывы могут быть по разным причинам, в плоть до перегрузок основного сервера, где стоит ваш vps/
madoff:
На самом деле, обрывы могут быть по разным причинам, в плоть до перегрузок основного сервера, где стоит ваш vps/
Заметьте что обрывы связаны с временным промежутком 170-180 секунд, это уже говорит о том, что это не связано с факторами типа перегрузки из за которой происходит обрыв если не учитывать генерацию нагрузки самим скриптом (которая может достигаться к этому времени), скрипт в свою очередь примитивен и это маловероятно.
Собственно может, кто знает какие лимиты покрутить, может методом тыка решится проблема? Вообще я крайне удивлен, что никто не сталкивался с такими обрывами, с учетом того, что на мной проверенных хостингах она имеется везде.
Как заставить мой сервер запускать PHP-скрипт, запустив его вручную с помощью php? В основном у меня есть довольно большой файл cronjob, который запускается каждые 2 часа, но я хочу иметь возможность запускать файл вручную, не дожидаясь его загрузки (я хочу, чтобы это было сделано на стороне сервера).
EDIT: я хочу выполнить файл из файла php. Не командная строка.
вы можете вызвать PHP-скрипт вручную из командной строки
редактировать OP отредактировал вопрос, чтобы добавить критическую деталь: скрипт должен быть выполнен другим скриптом.
есть несколько подходов. Во-первых и проще всего, вы можете просто включить файл. Когда вы включаете файл, код внутри "исполнено" (фактически, интерпретировано). Любой код, который не входит в тело функции или класса, будет обработан немедленно. Взгляните на документацию для include (docs) и/или require (docs) (Примечание: include_once и require_once связаны, но отличаются. Проверьте документы, чтобы понять разницу), ваш код будет выглядеть так:
второй и немного сложнее использовать shell_exec (docs). С shell_exec , вы вызовете двоичный файл php и передадите желаемый скрипт в качестве аргумента. Ваш код будет выглядеть так:
"; /* output hello world! */
"; /* output hello world! */
документация для функций используется
OP уточнил свой вопрос о том, как PHP-скрипт вызывается из скрипта. Оператор php "require" хорош для dependancy, так как скрипт остановится, если требуемый скрипт не найден.
вы можете использовать обозначение backtick:
вы также можете поместить это в верхней части php-файл, чтобы указать переводчика:
измените его на то, куда вы положили php. Затем дайте разрешение execute на файл, и вы можете вызвать файл без указания php:
Например есть скрипт a.php , в котором нужно вызвать тяжеловесный скрипт b.php и не дожидаясь его окончания продолжить работу. Одно из решений это сокеты:
В примере, в скрипте b.php будет доступна переменная $_POST['foo'] со значением bar .
Комментарии
О! Спасибо! То что нужно!
будут доступны обе переменные. проверено неоднократно
Спасибо за скрипт, очень помог.
разделитель прописывается в php.ini, в директиве arg_separator.output, видимо у вас это &
На действительно тяжеловесный скрипт всё-равно вылетает по тайм-ауту. Поэтому в этом с лучае всё-таки придётся использовать shell_exec()
добрый день,
добавил этот скрипт в views php , встретился с такой ошибкой
Fatal error: Cannot redeclare exec_script() (previously declared in /sites/all/modules/views_php/plugins/views/views_php_handler_field.inc(223) : runtime-created function:2) in /sites/all/modules/views_php/plugins/views/views_php_handler_field.inc(223) : runtime-created function on line 2
как с этим бороться.. или подскажите как запустить другой скрипт из views
Спасибо.
переименовать в любое имя ?
переименовал, все то же
Fatal error: Cannot redeclare myfunc() (previously declared in .
переименовать в любое доступное имя
переименовал в funcxandex , такой занятой не должно быть
и сново та же ошибка
Fatal error: Cannot redeclare funcxandex() (previously declared..
значит пытаетесь создать функцию в цикле. так делать нельзя
Скрипт работает отлично, долго искал решения, спасибо! Но.
Если требуется авторизация, работать перестает :(
добавление
fwrite($fp, "Authorization: Basic ".base64_encode("user:pass")."\r\n");
не помогает.
Может подскажешь что делать? Спасибо!
Данную статью я решил посветить всем начинающим изучать PHP, потому что у всех возникает одна и та же ошибка. Почему её допускают, не знаю, но допускают постоянно. Я без преувеличений скажу, что получил уже около сотни вопросов, на которые ответ будет дан в этой статье. Эта ошибка связана с неправильным запуском в PHP.
Как делают практически все новички:
- Создают PHP-файл (иногда HTML-файл, но это самые новички).
- Записывают туда PHP-код.
- И двойным кликом пытаются открыть его в браузере.
Результат, браузер код открывает, но исполнять его не торопится. А просто выводит какие-то куски кода обычным текстом, либо вообще ничего не выводит.
Ошибка данного подхода состоит в том, что ученик не понимает, что PHP - это серверный язык, а не клиентский. Это HTML или JavaScript клиентские языки, они, конечно, обрабатываются браузером. Но для PHP нужен интерпритатор. И вот данный интерпритатор запускается сервером.
Вывод: запускать PHP-код надо через сервер. Если у Вас Denwer, значит, через него.
Теперь, как запускать PHP-код через Denwer. Большинство новичков вновь делают ошибку. Они вроде бы всё делают правильно, создают нужные папки, перезапускают Denwer и вроде бы, осталось только правильно вызвать файл. Но тут снова ошибка: они вновь открывают файл просто в браузере (либо перетаскиванием файла в браузер, либо двойным кликом). Это легко можно заметить по адресу в адресной строке. Там будет что-то наподобие: file:///Z:\home\mysite.local\www\script.php.
Надеюсь, данная статья поможет многим новичкам, только начинающим изучать PHP.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Она выглядит вот так:
Комментарии ( 49 ):
Установил Denwer, всё сделал как сказано, но PHP в браузере не выводится
Файлы имеют расширение php? Сайты вообще открываются (например, HTML-код)? Если всё так, то скопируйте адрес из адресной строки и покажите его.
Большое Вам спасибо Михаил! С вашей помощью мне наконец удалось решить данную проблему.
Михаил, для меня PHP ещё тёмный лес. Как я понял, для выполнения кода PHP страница должна иметь расширение *.php. А почему тогда у вас страницы на сайте с расширением *.html?
Здравствуйте Михаил!я пробовал все что сказано в коментариях и все получилась! за этоспасибо большое . теперь пишу вот такой простинкий код
Читайте также: