Что-то из моего почтового ящика (лучше всего читать снизу вверх), следуя CLI, часть 2, есть любители?
+++++++++++++++++++++++++
Сейчас я работаю сейчас с PHP
Версия 5.0.1
ВЕРСИЯ PHP
http://www.php.net/ChangeLog-5.php#5.0.1
Версия 5.0.0, кандидат на выпуск 2 * * 25 апреля 2004 г.
(…)
* Добавлена поддержка pty для proc_open (). (Мы з)
РУКОВОДСТВО
http://www.php.net/manual/en/function.proc-open.php
В PHP 5RC2 появилась поддержка pty для систем с Unix98 ptys. Эта
позволяет вашему сценарию взаимодействовать с приложениями, которые ожидают
разговаривать с терминалом. Pty работает как труба, но является двунаправленным,
поэтому нет необходимости указывать режим чтения / записи. Пример ниже
показывает, как использовать pty; обратите внимание, что вам не нужно иметь все дескрипторы
разговаривать с pty. Также обратите внимание, что создается только один pty, хотя
pty указан 3 раза. В будущей версии PHP это может быть
можно сделать больше, чем просто читать и писать в pty.
(…)
Номера дескрипторов файлов в descriptorspec не ограничиваются 0, 1
и 2 — вы можете указать любой допустимый номер дескриптора файла, и он будет
перешел на дочерний процесс. Это позволяет вашему сценарию взаимодействовать
с другими сценариями, которые выполняются как «совместные процессы». * В частности, это
полезно для передачи парольных фраз в такие программы, как PGP, GPG и openssl в
более безопасный способ *. Это также полезно для чтения информации о состоянии
предоставленные этими программами на дескрипторах вспомогательных файлов.
Правильно? Вот мой сценарий …
echo "this is a testr";
// Create a pseudo terminal for the child process
$descriptorspec = array(
0 => array("pty"),
1 => array("pty"),
2 => array("pty")
);
$process = proc_open("/usr/bin/passwd", $descriptorspec, $pipes);
if (is_resource($process)) {
fwrite($pipes[0], "mypasswd");
fclose($pipes[0]);
while (! feof ($ pipe [1])) {
echo fgets ($ pipe [1], 1024);
}
fclose ($ труб [1]);
// Важно, чтобы вы закрыли все каналы перед вызовом
// proc_close, чтобы избежать тупика
$ return_value = proc_close ($ process);
echo «команда вернула $ return_valuen»;
}
?>
НО … когда я запустил программу:
username:~/Sites/Grid david$ php pty.php
this is a test
Warning: proc_open(): pty is not a valid descriptor spec/mode in
/Users/david/Sites/Grid/pty.php on line 10
ЛИНИЯ 10
$ process = proc_open («/ usr / bin / passwd», $ descriptorspec, $ pipe);
Не могли бы вы мне помочь, пожалуйста?
> Привет, Дэвид,
>
> Не уверен, что это вопрос новичка;) Это не тот вопрос, который я пробовал, но PHP
> 5+ следует
> (теоретически) разрешить это с помощью функции proc_open, описанной в
> второй PHP
> Статья CLI. В руководстве есть несколько заметок
( http://www.php.net/proc_open ).
> Вам нужен дескриптор spec что-то вроде;
>
> $ descriptorspec = array (
> 0 => массив («pty»),
> 1 => массив («pty»),
> 2 => массив («pty»)
>);
>
> Было бы интересно услышать, как вы поживаете.
>
>> ———————————————————–
>> От: «Дэвид»
>> Сообщение: это вопрос новичка, может быть, мне нужен большой RTFM. Это
>> Очень интересные и полезные две ваши статьи «PHP на команде»
>> Линия ».
>>
>> У меня есть большие сомнения … Мы работаем с PHP 4.3.3, я должен
>> написать скрипт PHP для изменения пароля пользователя unix.
>>
>> Нечто подобное
>> http://www.faqs.org/faqs/unix-faq/faq/part3/section-9.html
>>
>> Можно ли это сделать с помощью PHP? Спасибо
>> заранее.