Как запустить скрипт без браузера?
Здравствуйте! Не могу сообразить, как запустить скрипт, когда кончается обратный отсчет. Подскажите, пожалуйста.
$count_down = intval($enddate) - time(); if($count_down $( function() < $.get( "index.php?act=member_refund&op=add_refund_all&order_id=&end_time_cancel=1" ); > ); >
Обновление Объясню подробно. Покупатель оплачивает заказ. К времени заказа прибавляется определенное время (допустим 5 минут) и с этого момента начинается отсчет времени. Если продавец не отправил заказ в этот промежуток времени, то запускается скрип и заказ отменяется. Ответ не нужен, просто нужно запустить эту ссылку с $_GET параметрами. Работа скрипта заносится в базу. Скрипт запускается только один раз, потом меняется статус заказа и скрипт не запускается. Покажите, пожалуйста, пример, как использовать exec, я пробовал — не получилось.
Отслеживать
11 1 1 золотой знак 2 2 серебряных знака 8 8 бронзовых знаков
задан 24 авг 2014 в 8:55
1 2 2 бронзовых знака
Что вам мешает запустить крон с гет параметрами?
24 авг 2014 в 8:57
Ну раз GET — значит браузер используется. А раз надо без браузера, то может быть на страничке exec использовать? Запускаем команду в фоне с нужным параметром — и все готово. Хотя если бы вы задачу описали, было бы ясно, что хотите. Вам, может, на страничке нужно отобразить результат выполнения команды? Тогда зачем таймер? Разрешить выполнять операцию через некоторое время? Ну так первый запрос — запускаем таймер и на клиенте отображаем отсчет. Как отсчет закончился — второй запрос, и если время на сервере вышло — выполняем, что надо.
24 авг 2014 в 9:07
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Пример запуска скрипта, например, используя exec и argv:
$orderId = 4; //$_GET['orderId']; $command = "php exec.php > /dev/null 2>&1 &"; exec($command); echo "DONE";
if (count($argv) == 1) < exit("Not enough args"); >$orderId = intval($argv[1]); if (!$orderId) < exit("OrderId is wrong"); >sleep(5); $filename = 'test.out'; file_put_contents($filename, $orderId);
Практически то же самое можно сделать через какой-нибудь брокер сообщений, например Activemq. Примеры использования можно посмотреть здесь.
Тогда если отправка в очередь была неудачной, можно будет сказать об этом пользователю. Слушателей (т.е. постоянно запущенные скрипты) можно будет разнести на несколько серверов (если будет много пользователей сайта).
Activemq предоставляет различные средства для мониторинга очереди сообщений (например, через web-интерфейс, можно получать статистику консольными средствами, если настроить как следует).
Вот только. Эти способы (если через sleep делать) для обратного отсчета требуют того, чтобы они были запущены. Соответственно, если будет 100 запросов, то будет висеть 100 скриптов. А оно вам надо?
Может быть, стоит просто сохранять в базе заказы с указанием времени заказа и запускать по крону скрипт каждую минуту, который удаляет необработанные за некоторое время заказы? Тогда некоторый заказ может существовать на 59 секунд дольше необходимого, но я не думаю, что это будет критично, ведь так?
DELETE FROM `t_orders` WHERE `f_create_stamp`
Если же время будет критично, тогда можно будет в фоне постоянно крутить скрипт, который каждую секунду удаляет из базы устаревшие данные (после удаления делаем sleep(1), чтобы не забирать все ресурсы).
P.S. exec и stomp привел только для того, чтобы показать, как можно вызвать другой скрипт из страницы.
Как запустить php скрипт через ssh соединение?
У меня есть доступ к хостингу по ssh. Я хочу работать через консоль с командами фрэймворка Laravel artisan . Но я не могу запустить скрипт php через ssh соединение. В консоли пишу так:
php artisan .
Пробовал еще так:
#/usr/bin/php artisan .
, хотя не понимаю, что это значит, (это попытка запустить консоль bash через ssh?): В ответ получаю, что такая команда не найдена. Это ограничения моего хостинга, или я что-то делаю не так? UPD:
1. ищу php на сервере командой whereis php
2. получаю ответ php: /usr/lib/php
3. ввожу команду /usr/lib/php -v
4. получаю ответ: -sh: /usr/lib/php: is a directory
5. Что это значит? Что я в этом случае делаю не так? UPD2 Ответ Оказалось на шаред хостинге установлено несколько версий Php, из за чего доступ к каждой из них имеет свой путь. Этот путь не увидишь при помощи команды whereis php По вопросу в поддержке - мне предоставили эту информацию.
Отслеживать
задан 3 ноя 2015 в 4:12
1,349 1 1 золотой знак 16 16 серебряных знаков 38 38 бронзовых знаков
Уточнил вопрос.
3 ноя 2015 в 5:22
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Не беда, когда человек спрашивает про то, чего не понимает. Мы все учились. Беда, когда тот же самый человек начинает пытаться учить других и отвечать на любой вопрос, который видит на сайте.
"через ssh" никакую консоль запускать не надо. SSH - это УЖЕ консоль. После соединения с сервером мы УЖЕ на сервере и про SSH можно забыть. поэтому вопрос должен звучать просто "как запустить РНР скрипт через командную строку". И ответ на него простой:
Во-первых, надо указывать правильный путь к РНР интерпретатору. Если, паче чаяния, РНР не находится в PATH и нельзя написать просто php , то можно набрать команду whereis php и посмотреть полный путь к интерпретатору.
В-вторых, надо указывать правильный путь к РНР-файлу. Для чего либо сначала перейти в папку, где файл лежит, либо указать полный путь, php /path/to/file
И, разумеется, надо обязательно читать сообщения об ошибках, поскольку в них говорится, что именно мы делаем неправильно и что надо исправить.
Если whereis не выводит путь к бинарнику РНР, то это значит, что версия для командной строки не установлена. Надо почитать в гугле, как установить php-cli для своей операционной системы.
Запуск php скрипта без web сервера
Здраствуйте, имеется php скрипт. Нужно что б он запускался на локальной машине без установленого web сервера. Возможно ли такое ?
Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
php запуск скрипта без браузера или преобразование в exe
Нужно преобразовать как-то .php в .exe файл. И чтобы запустить его и был результат выполнения кода.
PHP запуск скрипта(ов) на сервере из моего скрипта
Что я хочу сделать: Запускаю я PHP скрипт у себя на ПК, который запускает скрипт на.
Запуск bash скрипта от имени (без пароля) из php
Здравствуйте! Я хочу запустить bash скрипт через браузер. От имени конкретного юзера, не.
Запуск скрипта по старту сервера
Нужно что бы при старте сервера, скрипт начинал работать, и заканчивал только по выключению.
VPS и php скрипт в фоновом режиме
правильно ли я понимаю, что скрипт можно запустить из прямо из консоли на vps set_time_limit(0); ? fsockopen("localhost",XXX); do < здесь обрабатываем входящие данные >while (true); Такое будет работать? Не будет ли не нужной нагрузки на сам сервер при постоянной работе данного скрипта? Или какие пути есть?
На сайте с 04.11.2007
14 августа 2015, 08:09
Дать команду php -v, если после версии есть (cli) - можно запускать. В CLI скрипт будет работать пока сам не остановится или не прервут. set_time_limit(0) бесполезен. Убедиться можно командой php -r 'sleep(600);', что даст 10 минут работы без нагрузки. Проще запускать файл php -f myfile.php без всяких первых строк #!/usr/bin/php а сразу <. >Нагрузка - как написан скрипт. Может и 100% ядра на процесс съесть.
На сайте с 26.09.2013
14 августа 2015, 08:44
error_reporting(E_ALL);
set_time_limit(0);
ob_implicit_flush();
$address="localhost";
$port=7777;
$sock=socket_create(AF_INET,SOCK_STREAM,0);
if($sock <0)
echo "socket_create() failed! reason: ".socket_strerror($sock)."\n";
$ret=socket_bind($sock,$address,$port);
if ($ret <0)
echo "socket_bind() failed! reason: ".socket_strerror($ret)."\n";
$ret=socket_listen($sock,5);
if ($ret <0)
echo "socket_listen() failed! reason: ".socket_strerror($ret)."\n";
while(true) <
$msgsock=socket_accept($sock);
if ($msgsock <0)<
echo "socket_accept() failed! reason: ".socket_strerror($msgsock)."\n";
break;
>
$msg="Welcome!";
socket_write($msgsock,$msg,strlen($msg));
while(true) <
$buf=socket_read($msgsock,2048);
if($buf===false) <
echo "socket_read() failed! reason: ".socket_strerror($ret)."\n";
break 2;
>
if(!$buf=trim($buf))
continue;
$talkback="Answer!";
socket_write($msgsock,$talkback,strlen($talkback));
>
socket_close($msgsock);
>
socket_close($sock);
Вам нужно запустить скрипт в SSH. nohup php5 -q /var/www/script.php > script.log 2>&1 & обратите внимание, если у вас php5 или php. nohup позволяет запустить скрипт демоном, с переопределением вывода в лог.
★Сервис идентифицирует (https://socfishing.com/?utm_source=searchengines) посетителей вашего сайта и предоставляет их профили ВКонтакте, Телефон, Почта! Цены копеечные, работаем 8 лет.
На сайте с 03.03.2007
14 августа 2015, 09:28
SocFishing:
Вам нужно запустить скрипт в SSH.
nohup php5 -q /var/www/script.php > script.log 2>&1 &
обратите внимание, если у вас php5 или php. nohup позволяет запустить скрипт демоном, с переопределением вывода в лог.
Т.е. в данном варианте скрипт будет выполнятсья "все время" и постоянно мониторить нужный порт? PS: Спасибо за помощь
На сайте с 03.12.2007
14 августа 2015, 12:17
Начиная с версии PHP 5.4.0 модуль CLI SAPI содержит встроенный web-сервер. http://php.net/manual/ru/features.commandline.webserver.php
-= Онлайн сервисы =-
На сайте с 19.07.2010
14 августа 2015, 13:11
Небольшое дополнение: не используйте версию PHP 5.2 и меньше в них "утекает" память и "вечный" цикл умирает через день-два. Тот же код в PHP 5.3 / 5.4 работал месяцами. Или для PHP 5.2 нужно делать перезапуск скрипта через каждые ХХ-тысяч итераций.
На сайте с 26.09.2013
15 августа 2015, 01:08
imbalance:
Т.е. в данном варианте скрипт будет выполнятсья "все время" и постоянно мониторить нужный порт?
Если скрипт не выходит из цикла или ожидания, то в фоне он будет работать бесконечно долго. В вашем случае при прослушивании порта потребуется такой запуск. nohup просто перенаправляет консольный вывод, вам не нужно держать открытый SSH коннект. Процесс будет запущен в фоне, как демон.
