Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Запуск ресурсоемкой задачи из админ-панели

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
freelsd
Отправлено: 23 Января, 2016 - 16:22:01
Post Id


Гость


Покинул форум
Сообщений всего: 108
Дата рег-ции: Февр. 2015  


Помог: 1 раз(а)




В общем, такая ситуация - нужно из интерфейса запустить скрипт (например через exec() или system()), который будет производить расчеты а в это время часть интерфейса будет недоступна, но состояние работы скрипта должно как-то выводится полльзователю. Я такого раньше не реализовывал, поэтому идея такая:

1)Запускаем скрипт через system (только как потом перенаправить пользователя на главную страницу, ведь этот вызов, вроде как, блокирующий)
2)Сделать запись в бд, что идет работа и часть интерфейса показываться не будет (смотрим в бд, если есть запись о том что работа идет, то не показываем некоторые меню)
3)Но как от скрипта получать результаты в реальном времени? Например, чтобы аяксом каждые 30 секунд производились запросы к скрипту и он возвращал какие-то данные (но так не получится, потому что скрипт работать будет, значит нужен какой-то промежуточный?)
 
 Top
OrmaJever Модератор
Отправлено: 23 Января, 2016 - 17:41:44
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




freelsd пишет:
3)Но как от скрипта получать результаты в реальном времени? Например, чтобы аяксом каждые 30 секунд производились запросы к скрипту и он возвращал какие-то данные (но так не получится, потому что скрипт работать будет, значит нужен какой-то промежуточный?)

а это всё зависит от приложения которое вы собрались запускать. Оно например может например записывать в файл ход действий, или выводить что-то в консоль. Если же оно это не делает, а просто молча что-то выполняет то никак вы это не сделаете. Максимум что вы можете получить в таком случае дак это только статус работает/не работает.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
freelsd
Отправлено: 23 Января, 2016 - 17:45:37
Post Id


Гость


Покинул форум
Сообщений всего: 108
Дата рег-ции: Февр. 2015  


Помог: 1 раз(а)




OrmaJever пишет:
freelsd пишет:
3)Но как от скрипта получать результаты в реальном времени? Например, чтобы аяксом каждые 30 секунд производились запросы к скрипту и он возвращал какие-то данные (но так не получится, потому что скрипт работать будет, значит нужен какой-то промежуточный?)

а это всё зависит от приложения которое вы собрались запускать. Оно например может например записывать в файл ход действий, или выводить что-то в консоль. Если же оно это не делает, а просто молча что-то выполняет то никак вы это не сделаете. Максимум что вы можете получить в таком случае дак это только статус работает/не работает.


Ну чтобы, например аякс статус получал, скрипт должен возвращать данные в базу или файл, по-другому видимо никак. И тут нужен какой-то промежуточный скрипт. Типа
рабочий скрипт ->скрипт вывода<-интерфейс с аяксом. Но вот еще вопрос - как запустить скрипт работать а дальше сценарий страницы выполнять (что-то типа никсового &) только чтобы не зависело от платформы. Короче, чтобы вызов неблокирующим был.


Я подробнее опишу, чтобы понятно было. Смотрите, я загружаю файл и процешу файл, но мне нужно чтобы вывод был не после того как скрипт отработает, а в прямом эфире. Только как такое сделать я хз.

(Отредактировано автором: 23 Января, 2016 - 18:04:55)

 
 Top
Viper
Отправлено: 23 Января, 2016 - 18:32:59
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




freelsd пишет:
Смотрите, я загружаю файл и процешу файл, но мне нужно чтобы вывод был не после того как скрипт отработает, а в прямом эфире.
большинство толковых загрузчиков "умеет" калбеки и статусы. Если у вас велосипед, то реализовываем сами. За пример можно покопаться в http://www[dot]plupload[dot]com/examples/events


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
freelsd
Отправлено: 23 Января, 2016 - 18:43:02
Post Id


Гость


Покинул форум
Сообщений всего: 108
Дата рег-ции: Февр. 2015  


Помог: 1 раз(а)




Viper пишет:
freelsd пишет:
Смотрите, я загружаю файл и процешу файл, но мне нужно чтобы вывод был не после того как скрипт отработает, а в прямом эфире.
большинство толковых загрузчиков "умеет" калбеки и статусы. Если у вас велосипед, то реализовываем сами. За пример можно покопаться в http://www.plupload.com/examples/events


Вопрос более общий - как запустить код на php "в фоне". То есть чтобы пользователь, если даже закроет браузер, не помешал выполнению задачи, и скрипт проработает, пока не завершится.

CODE (htmlphp):
скопировать код в буфер обмена
  1. $cmd = "start /B  \"php test.php > C:\\users\\alex\\desktop\\123.txt\"";
  2. pclose( popen($cmd,'r'));

Так работает, но в файл не перенаправляется. И не ясно как определить успещность запуска скрипта.

(Отредактировано автором: 23 Января, 2016 - 19:16:31)

 
 Top
freelsd
Отправлено: 24 Января, 2016 - 09:53:04
Post Id


Гость


Покинул форум
Сообщений всего: 108
Дата рег-ции: Февр. 2015  


Помог: 1 раз(а)




Для потомков, рабочий вариант для windows: http://stackoverflow.com/questions/13289595/starting-a-windows-process-in-php-and-get-its-pid

(Отредактировано автором: 24 Января, 2016 - 09:53:24)

 
 Top
esterio
Отправлено: 25 Января, 2016 - 11:42:28
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




Можно использовать например Gearman. Что это такое гуглиться за 5 минут
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB