Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Как заставить работать proc_open ()

Ответить
Настройки темы
Как заставить работать proc_open ()

Ветеран


Сообщения: 1862
Благодарности: 132


Конфигурация

Профиль | Сайт | Отправить PM | Цитировать


Есть код
PHP код: Выделить весь код

$descriptorspec = array(     

=> array("pty"),     
=> array("pty"),       
=> array("pty"
);  
$process proc_open("cvs -d :pserver:anoncvs@anoncvs.at.FreeBSD.org:/home/ncvs login"$descriptorspec$pipes);  
if (
is_resource($process)) {    
sleep(1);    
fwrite($pipes[0], "anoncvs");     
sleep(1);       
fwrite($pipes[0], "cvs status");    
sleep(1);     


Запуск которого приводит к ошибке - Warning: proc_open() [function.proc-open]: failed to open /dev/ptmx, errno 2
Собственно вопрос на стыке взаимодействия php и Freebsd, не совсем еще разобрался с терминалами.
Сходный вопрос по терминалам в другой ветке форума.

-------
ДИЛЕТАНТ - это курьезный человек, который испытывает удовольствие делать то, чего не умеет.
AMD 4200+, MSI Neo2Platinum, 2Gb, ATI 9600, D-Link DWL-G510, FreeBSD 8.0, KDE 4.3.4


Отправлено: 23:18, 13-10-2006

 

Аватара для Prisoner

Engrossed by the Void


Сообщения: 2229
Благодарности: 60

Профиль | Отправить PM | Цитировать


Первое, что бросилось в глаза это отличие Ваше $descriptorspec от "мануального", где указаны режимы открытия.

-------
Не могу дать более дельный совет - не хватает системных ресурсов...


Отправлено: 09:38, 14-10-2006 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 1862
Благодарности: 132

Профиль | Сайт | Отправить PM | Цитировать


PHP код: Выделить весь код

// Crée un pseudo terminal pour le processus fils  

$descriptorspec = array(     
=> array("pty"),     
=> array("pty"),     
=> array("pty")  );  
$process proc_open("cvs -d:pserver:cvsread@cvs.php.net:/repository login"$descriptorspec$pipes);  
if (
is_resource($process)) {     
// Travaille sur la documentation PHP ici  


Не вижу отличий, тыкните пожалуйста - где.

-------
ДИЛЕТАНТ - это курьезный человек, который испытывает удовольствие делать то, чего не умеет.
AMD 4200+, MSI Neo2Platinum, 2Gb, ATI 9600, D-Link DWL-G510, FreeBSD 8.0, KDE 4.3.4


Отправлено: 11:16, 14-10-2006 | #3


Аватара для Prisoner

Engrossed by the Void


Сообщения: 2229
Благодарности: 60

Профиль | Отправить PM | Цитировать


Вот тут можно глянуть, "Пример 1. A proc_open() example".

-------
Не могу дать более дельный совет - не хватает системных ресурсов...


Отправлено: 12:39, 14-10-2006 | #4


Аватара для vadimiron

Ветеран


Сообщения: 1864
Благодарности: 120

Профиль | Отправить PM | Цитировать


Igor_I
попробуй всё таки точно для каждого дескриптора указать, в какую сторону он открываеться (чтение - запись)

Сама функция работает без проблем у меня (правда Винда-сервер)

Prisoner
как раз оттуда был взят пример, только чуть ниже )

-------
Fortes fortuna adiuvat


Отправлено: 22:02, 14-10-2006 | #5


Пользователь


Сообщения: 67
Благодарности: 5

Профиль | Сайт | Отправить PM | Цитировать


а в строке подключения к cvs пароль написан или это все, что есть???
и у юзера anoncvs доступ есть (даже с пустым паролем)?

Отправлено: 22:24, 14-10-2006 | #6


Ветеран


Сообщения: 1862
Благодарности: 132

Профиль | Сайт | Отправить PM | Цитировать


В том-то и дело, что винда-сервер. На FreeBSD не все работает.
3 варианта
PHP код: Выделить весь код

$status_man system ("whoami"$outputexec);


  echo 
'<hr>$process 1';
$descriptorspec = array(
   
=> array("pty"),  // stdin is a pipe that the child will read from
   
=> array("pty"),  // stdout is a pipe that the child will write to
   
=> array("file""/var/tmp/error-output.txt""a"// stderr is a file to write to
);
$process proc_open("cvs -d :pserver:anoncvs@anoncvs.at.FreeBSD.org:/home/ncvs login"$descriptorspec$pipes);
if (
is_resource($process)) {
  
sleep(5);
  
fwrite($pipes[0], "anoncvs");
  
sleep(5);
  
fwrite($pipes[0], "cvs status");
  
sleep(1);
}

   echo 
'<hr>$process 2';
$descriptorspec2 = array(
   
=> array("pty""r"),  // stdin is a pipe that the child will read from
   
=> array("pty""w"),  // stdout is a pipe that the child will write to
   
=> array("file""/var/tmp/error-output.txt""a"// stderr is a file to write to
);
$process2 proc_open("cvs -d :pserver:anoncvs@anoncvs.at.FreeBSD.org:/home/ncvs login"$descriptorspec2$pipes2);
if (
is_resource($process2)) {
  
sleep(5);
  
fwrite($pipes2[0], "anoncvs");
  
sleep(5);
  
fwrite($pipes2[0], "cvs status");
  
sleep(1);
}

   echo 
'<hr>$process 3';
$descriptorspec3 = array(
   
=> array("pipe""r"),  // stdin is a pipe that the child will read from
   
=> array("pipe""w"),  // stdout is a pipe that the child will write to
   
=> array("file""/var/tmp/error-output.txt""a"// stderr is a file to write to
);

$process3 proc_open("cvs -d :pserver:anoncvs@anoncvs.at.FreeBSD.org:/home/ncvs login"$descriptorspec3$pipes3);
if (
is_resource($process3)) {
  
sleep(5);
  
fwrite($pipes3[0], "anoncvs");
  
sleep(5);
  
fwrite($pipes3[0], "cvs status");
  
sleep(1);


Что возвращает сервер- lighttpd, запущен от имени пользователя dokuwiki, группа его же. PHP5 как FastCGI.
Цитата:
dokuwiki dokuwiki
--------------------------------------------------------------------------------
$process 1
Warning: proc_open() [function.proc-open]: failed to open /dev/ptmx, errno 2 in /home/dokuwiki/test.php on line 52

--------------------------------------------------------------------------------
$process 2
Warning: proc_open() [function.proc-open]: failed to open /dev/ptmx, errno 2 in /home/dokuwiki/test.php on line 68

--------------------------------------------------------------------------------
$process 3
лог-файл
Цитата:
CVS password:
cvs login: warning: failed to open //.cvspass for reading: No such file or directory
cvs [login aborted]: could not open //.cvspass for writing: Permission denied
Все три строчки от третьего варианта.
Если убрать сервер, то пишется, что не установлен CVSROOT, хотя в .profile он прописан (шелл - sh).
Если сделать su dokuwiki и попытатся залогинится, то все нормально.
Под FreeBSD год назад был патч
http://www.mail-archive.com/internal.../msg14854.html
Сейчас он не работает. Вернее сам файл proc_open.c изменился, что при make patch - либо ошибка в патче, либо он просто игнорируется.

-------
ДИЛЕТАНТ - это курьезный человек, который испытывает удовольствие делать то, чего не умеет.
AMD 4200+, MSI Neo2Platinum, 2Gb, ATI 9600, D-Link DWL-G510, FreeBSD 8.0, KDE 4.3.4


Отправлено: 23:56, 14-10-2006 | #7


Пользователь


Сообщения: 67
Благодарности: 5

Профиль | Сайт | Отправить PM | Цитировать


Цитата:
Если сделать su dokuwiki и попытатся залогинится, то все нормально
и все-таки мне кажется, что проблема не в proc_open(), а в полномочиях

Отправлено: 00:52, 16-10-2006 | #8


Ветеран


Сообщения: 1862
Благодарности: 132

Профиль | Сайт | Отправить PM | Цитировать


Докумекал

PHP код: Выделить весь код

echo '<hr>Кто я - ';

 
$status_man system ("id"$outputexec);
 echo 
'<hr>Где я - ';
 
$status_man system ("pwd"$outputexec);
 echo 
'<hr>Содержимое файла тест - ';
 
$status_man system ("cat /home/dokuwiki/test"$outputexec);
 echo 
'<hr>Пишем строку в файл - ';
 
$status_man system ("echo '2 stroka' >> /home/dokuwiki/test"$outputexec);
 echo 
'<hr>Содержимое файла тест - ';
 
$status_man system ("cat /home/dokuwiki/test"$outputexec);
 echo 
'<hr>Содержимое файла .cvspass - ';
 
$status_man system ("cat //.cvspass"$outputexec);

  echo 
'<hr>env';
 
system ("env");
  echo 
'<hr>set';
 
system ("set");

$descriptorspec3 = array(
   
=> array("pipe""r"),  // stdin is a pipe that the child will read from
   
=> array("pipe""w"),  // stdout is a pipe that the child will write to
   
=> array("file""/var/tmp/error-output.txt""a"// stderr is a file to write to
);
   
$cwd "/home/dokuwiki";
$process3 proc_open("cvs -d :pserver:anoncvs@anoncvs.at.FreeBSD.org:/home/ncvs login"$descriptorspec3$pipes3$cwd);
if (
is_resource($process3)) {
  
sleep(5);
  
fwrite($pipes3[0], "anoncvs");
  
sleep(5);
  
fwrite($pipes3[0], "cvs status");
  
sleep(1);


Цитата:
Кто я - uid=80(www) gid=80(www) groups=80(www)
--------------------------------------------------------------------------------
Где я - /home/dokuwiki
--------------------------------------------------------------------------------
Содержимое файла тест - 1 stroka
--------------------------------------------------------------------------------
Пишем строку в файл -
--------------------------------------------------------------------------------
Содержимое файла тест - 1 stroka2 stroka
--------------------------------------------------------------------------------
Содержимое файла .cvspass -
--------------------------------------------------------------------------------
env
HOME=/ PATH=/sbin:/bin:/usr/sbin:/usr/bin
--------------------------------------------------------------------------------
set
HOME=/ PS1='$ ' OPTIND=1 PS2='> ' PPID=595 PATH=/sbin:/bin:/usr/sbin:/usr/bin IFS=' '
Несмотря на то, что казалось бы PHP & lighthttpd запущены от пользователя dokuwiki, никакие переменные из ~/.chsrc не читаются.

-------
ДИЛЕТАНТ - это курьезный человек, который испытывает удовольствие делать то, чего не умеет.
AMD 4200+, MSI Neo2Platinum, 2Gb, ATI 9600, D-Link DWL-G510, FreeBSD 8.0, KDE 4.3.4


Отправлено: 16:42, 29-10-2006 | #9



Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Как заставить работать proc_open ()

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - Как заставить работать Sleuthhound (ищейка)? montajor Microsoft Windows 7 6 18-12-2009 11:32
Как заставить работать программу? aerosmit Хочу все знать 3 22-04-2009 17:22
Пуль ДУ. Как заставить работать ? Vitalik2003 Железо в Linux 15 27-01-2006 03:54
Как заставить WinXP работать в 640х480??? dascon Microsoft Windows 2000/XP 11 03-05-2005 16:21
Как заставить работать?.. Guest Хочу все знать 1 03-09-2002 10:34




 
Переход