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]   

> Без описания
NeoN121
Отправлено: 17 Августа, 2012 - 14:19:15
Post Id


Новичок


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


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




Значит, задача: запустить из одного скрипта PHP через командную строку другой PHP скрипт

Суть скрипта следующая. Есть файл index.php, его я стартую обращением через браузер. Файл index.php должен запустить файл client.php. Поскольку в будущем предполагается запускать этот client.php несколько раз параллельно и, кроме того, требуется, чтобы выполнение index.php продолжалось, а не ожидало, пока исполнится client.php, я пытаюсь запускать client.php через командную строку функцией popen()

index.php:
PHP:
скопировать код в буфер обмена
  1.  
  2. echo 'This is index';
  3. $handle = popen('/usr/local/apache/bin/php-cgi.5 -q -f /home/username/public_html/client.php', 'r');
  4. if (is_resource ($handle)) while (!feof($handle)) echo fread($handle, 1024);
  5.  


client.php


Вывод по идее должен быть примерно таким:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. This is indexThis is client
  3.  


Однако вместо этого имею много раз повторяющееся This is index - то есть, судя по всему, popen() запускает не client.php, а перезапускает index.php. В результате имеем рекурсивный запуск index.php, который заканчивается, когда я исчерпываю разрешенное количество одновременно запущенных скриптов

Собственно, вопрос. Что я делаю не так?

Еще пообщался с провайдером, его ответ таков, что реально исполняется вот такая команда:
sh -c /usr/local/apache/bin/php-cgi.5 -q -f файл.php
То есть, судя по всему, по каким-то причинам sh не всю часть того, что написано после php-cgi.5, воспринимает как аргументы именно для php-cgi.5, и интерпретирует их как аргументы для самого sh. Получается, нужно какое-то экранирование? Но какое? Кавычки (одинарные и 2ые) пробовал, команда просто не исполняется

Кстати добавлю к этому то, что ключ -q тоже игнорируется: заголовки в ответе присутствовать не должны с этим ключем, но они присутствуют

(Отредактировано автором: 17 Августа, 2012 - 14:29:33)

 
 Top
NeoN121
Отправлено: 18 Августа, 2012 - 12:43:17
Post Id


Новичок


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


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




Проблема была в том, что данная операция блокировалась провайдером на виртуальных хостингах. Я переехал на VPS, и все заработало
 
 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