Как сделать чтобы скрипт работал постоянно php

Добавил пользователь Валентин П.
Обновлено: 18.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.

Как делают практически все новички:

  1. Создают PHP-файл (иногда HTML-файл, но это самые новички).
  2. Записывают туда PHP-код.
  3. И двойным кликом пытаются открыть его в браузере.

Результат, браузер код открывает, но исполнять его не торопится. А просто выводит какие-то куски кода обычным текстом, либо вообще ничего не выводит.

Ошибка данного подхода состоит в том, что ученик не понимает, что 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?

Здравствуйте Михаил!я пробовал все что сказано в коментариях и все получилась! за этоспасибо большое . теперь пишу вот такой простинкий код

Читайте также: