Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: PHP: вызов консольного скрипта из Web-скрипта
 
 автор: sl1p   (16.04.2011 в 00:33)   письмо автору
 
 

Задачка весёленькая, есть сервер в котором как объяснили админы на самом апаче стоит лимит времени 120 сек. возможно конечно проблема не в этом, но если вызывать через клиент(браузер) скрипт просто напосто валится. Если вызов идёт консольно (например крон), всё окей. (Если кто может кстати объясните пожалуйста в чём разница)..


Так вот по сути, возможно ли какимто образом вызвать ту же консоль но из пхп скрипта, передав туда пост данные к примеру, и вернуть в браузер ответ скрипта вызваного из под консоли?..

Прошу прощения возможно за глупые мысли, с консолью работал несколько раз всего и не представляю что куда.

  Ответить  
 
 автор: cheops   (16.04.2011 в 09:03)   письмо автору
 
   для: sl1p   (16.04.2011 в 00:33)
 

>(Если кто может кстати объясните пожалуйста в чём разница).
Разные экземпляры PHP запускаются - они друг к другу вообще отношения не имеют (как и их настройки).

>Так вот по сути, возможно ли какимто образом вызвать ту же консоль но из пхп скрипта, передав
>туда пост данные к примеру, и вернуть в браузер ответ скрипта вызваного из под консоли?..
Можно, например, запускать PHP-скрипт через system().

  Ответить  
 
 автор: sl1p   (16.04.2011 в 15:44)   письмо автору
 
   для: cheops   (16.04.2011 в 09:03)
 

хмхм.. а как переделать пост запрос?.. или хотябы строку какуюто в скрипт вызванный через system();

  Ответить  
 
 автор: cheops   (16.04.2011 в 16:01)   письмо автору
 
   для: sl1p   (16.04.2011 в 15:44)
 

Передать данные можно через параметры командной строки (получить их можно в массиве предопределенном $argv).

  Ответить  
 
 автор: sl1p   (16.04.2011 в 21:54)   письмо автору
 
   для: cheops   (16.04.2011 в 16:01)
 

подскажите, а где можно пример глянуть..?
Я понял о чём вы, но не особо понял как правильно этот пост массив всунуть в параметр..

На вроде -params=val=1&val2=2
? :[

  Ответить  
 
 автор: cheops   (16.04.2011 в 21:58)   письмо автору
 
   для: sl1p   (16.04.2011 в 21:54)
 

Вы хотите в одном параметре все передать? Лучше бы несколько
index.php  -val=1 -val2=2

  Ответить  
 
 автор: sl1p   (16.04.2011 в 23:55)   письмо автору
 
   для: cheops   (16.04.2011 в 21:58)
 

ну там просто огромный пост массив.. наверное нужно сериализировать)

  Ответить  
 
 автор: sl1p   (17.04.2011 в 09:03)   письмо автору
 
   для: cheops   (16.04.2011 в 21:58)
 

а что может быть такое, вызываю скрипт из под консоли но всё что в нём могу сделать это либо echo либо print, остальное не работает вообще и команда system() возвращает код "2"..?

и ещё вопрос, возможно я маюсь фигнёй просто, возможно ли таким образом используя из веб-скрипта консоль, вернуть скажем сгенерированный ексель файл?

  Ответить  
 
 автор: cheops   (17.04.2011 в 09:11)   письмо автору
 
   для: sl1p   (17.04.2011 в 09:03)
 

Могут быть расширения не подключены (или php.ini не настроен или вообще отсутствует) - нужно теребить службу тех.поддержки, пока консольный PHP не заработает как вам нужно.

PS Следует так же учитывать, что в консольном варианте у вас не будет никаких серверных переменных и суперглобальных массивов, а текущую директорию следует указывать в обязательном порядке или использовать абсолютные пути.

  Ответить  
 
 автор: sl1p   (17.04.2011 в 09:19)   письмо автору
 
   для: cheops   (17.04.2011 в 09:11)
 

хм да я так и подумал насчет теребить:)

• а какие нужны расширения?..

• зы. и как насчет вопроса возможно ли вернуть из консоли сгенереный ексель?) Если нет то тема для меня будет бессмыслена(

• зыы. PS Следует так же учитывать, что в консольном варианте у вас не будет никаких серверных переменных
А как же тогда при работе с кроном эти переменные таки приходят? В моём случае используется только $_SERVER['DOCUMENT_ROOT'] и она определена... возможно она есть везде?

  Ответить  
 
 автор: cheops   (17.04.2011 в 09:41)   письмо автору
 
   для: sl1p   (17.04.2011 в 09:19)
 

>• а какие нужны расширения?..
Это сами смотрите... кому что нужно, первое что приходит в голову MySQL, сокеты, mb_string(untf-8).

>• зы. и как насчет вопроса возможно ли вернуть из консоли сгенереный ексель?) Если нет то
>тема для меня будет бессмыслена(
Вернуть куда? Консольный скрипт может сохранять файлы, это подходит?

>А как же тогда при работе с кроном эти переменные таки приходят?
Может только часть переменных в $_SERVER, но лучше на это не расчитывать, на другом хосте может не быть и их.

  Ответить  
 
 автор: sl1p   (17.04.2011 в 10:12)   письмо автору
 
   для: cheops   (17.04.2011 в 09:41)
 

Это сами смотрите... кому что нужно, первое что приходит в голову MySQL, сокеты, mb_string(untf-8).
хм, чтото совсем запутался, а какой же пхп тогда используется если там ничего не подключено?..
Имелось ввиду что не работают функции вообще, по типу intval, strlen их же подключать не нужно вроде:)

Вернуть куда? Консольный скрипт может сохранять файлы, это подходит?
Вообще подходит но было отлично если бы результат работы через консоль вернулся бы в веб-скрипт который эту консоль запустил. Там же чтото возвращать то можно:)

  Ответить  
 
 автор: sl1p   (17.04.2011 в 10:34)   письмо автору
 
   для: sl1p   (17.04.2011 в 10:12)
 

зы всё поехало указав команду так:

system('php /test.php');

В данном случае используется же пхп тот же что и при запросе веб-скрипта, правильно?

  Ответить  
 
 автор: cheops   (17.04.2011 в 10:44)   письмо автору
 
   для: sl1p   (17.04.2011 в 10:34)
 

>В данном случае используется же пхп тот же что и при запросе веб-скрипта, правильно?
Не факт, вернее 100% используется другой исполняемый модуль, но возможно, они используют единый конфигурационный файл php.ini.

  Ответить  
 
 автор: sl1p   (17.04.2011 в 10:48)   письмо автору
 
   для: cheops   (17.04.2011 в 10:44)
 

хм а почему так?..

зы. и всё же осталась проблема как передать нормально параметр через консоль, параметр является строкой sql запрос, т.е. с пробелами кавычками и прочей мерзостью. Возможно строку нужно както закодировать?

  Ответить  
 
 автор: sl1p   (17.04.2011 в 10:50)   письмо автору
 
   для: sl1p   (17.04.2011 в 10:48)
 

тьху, всегда так, сначала пишу, потом думаю :(

base64_encode помогла.

  Ответить  
 
 автор: cheops   (17.04.2011 в 10:52)   письмо автору
 
   для: sl1p   (17.04.2011 в 10:48)
 

>хм а почему так?..
Браузеру нужна динамическая библиотека, а в консоли нужен полноценный модуль. Да они могут быть из одной сборки, но как правило, на UNIX-серверах это не так, так как там модули используются не готовые, а компилируемые. Поэтому тот PHP, который нужен для Apache компилируют по ближе к нему, а тот, который нужен в консоли, компилируют отдельно. Хотя удаленно сложно сказать, может конкретно на этом сервере все по-другому. В любом случае проблема того, что в Apache и в консоли разные версии, и по-разному настроены встречается на каждом втором сервере в интернет.

>Возможно строку нужно както закодировать?
Для начала в кавычки возьмите.

  Ответить  
 
 автор: sl1p   (17.04.2011 в 11:23)   письмо автору
 
   для: cheops   (17.04.2011 в 10:52)
 

Спасибо большое за ответы!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования