proc_open

(PHP 4 >= 4.3.0, PHP 5, PHP 7)

proc_open ִ��һ��������Ҵ���������/������ļ�ָ�롣

˵��

proc_open ( string $cmd , array $descriptorspec , array &$pipes [, string $cwd [, array $env [, array $other_options ]]] ) : resource

���� popen() ������ ���� proc_open() �ṩ�˸���ǿ��Ŀ��Ƴ���ִ�е�������

����

cmd

Ҫִ�е�����

descriptorspec

һ���������顣 ����ļ���ʾ������������Ԫ��ֵ��ʾ PHP ��ν���Щ�������������ӽ��̡� 0 ��ʾ��׼���루stdin����1 ��ʾ��׼�����stdout����2 ��ʾ��׼����stderr����

�����е�Ԫ�ؿ����ǣ�

  • ������Ҫ���������̵Ĺܵ���������Ϣ�� ��һ��Ԫ��Ϊ���������ͣ� �ڶ���Ԫ������Ը���������ѡ� ��Ч�������У�pipe ���ڶ���Ԫ�ؿ����ǣ� r ����̴��͸ùܵ��Ķ�ȡ�ˣ�w ����̴��͸ùܵ���д��ˣ��� �Լ� file���ڶ���Ԫ��Ϊ�ļ�������
  • ���һ����ʵ�ļ�������������Դ���� �����磺�Ѵ򿪵��ļ���һ�� socket �˿ڣ�STDIN����

�ļ���������ֵ������ 0��1 �� 2�������ʹ���κ���Ч���ļ������� �����䴫�����ӽ��̡� ��ʹ����Ľű����Ժ������ű����������� ���磬����ͨ��ָ���ļ��������������Ը��Ӱ�ȫ�ķ�ʽ ���������� PGP��GPG �� openssl ���� ͬʱҲ���Ժܷ���Ļ�ȡ��Щ�����״̬��Ϣ��

pipes

������Ϊ�������飬 ���е�Ԫ���DZ�ִ�г��򴴽��Ĺܵ���Ӧ�� PHP ��һ�˵��ļ�ָ�롣

cwd

Ҫִ������ij�ʼ����Ŀ¼�� ������ ���� ·���� ���ô˲���Ϊ NULL ��ʾʹ��Ĭ��ֵ����ǰ PHP ���̵Ĺ���Ŀ¼����

env

Ҫִ�е�������ʹ�õĻ��������� ���ô˲���Ϊ NULL ��ʾʹ�ú͵�ǰ PHP ������ͬ�Ļ���������

other_options

�㻹����ָ��һЩ����ѡ� Ŀǰ֧�ֵ�ѡ�������

  • suppress_errors �������� Windows ƽ̨���� ����Ϊ TRUE ��ʾ���Ʊ����������Ĵ���
  • bypass_shell �������� Windows ƽ̨���� ����Ϊ TRUE ��ʾ�ƹ� cmd.exe shell��

����ֵ

���ر�ʾ���̵���Դ���ͣ� ��ʹ�����֮������� proc_close() �������رմ���Դ�� ���ʧ�ܣ����� FALSE��

������־

�汾 ˵��
5.2.1 Ϊ other_options �������� bypass_shell ѡ�

����

Example #1 proc_open() ����

<?php
$descriptorspec 
= array(
   
=> array("pipe""r"),  // ��׼���룬�ӽ��̴Ӵ˹ܵ��ж�ȡ����
   
=> array("pipe""w"),  // ��׼������ӽ�����˹ܵ���д������
   
=> array("file""/tmp/error-output.txt""a"// ��׼����д�뵽һ���ļ�
);

$cwd '/tmp';
$env = array('some_option' => 'aeiou');

$process proc_open('php'$descriptorspec$pipes$cwd$env);

if (
is_resource($process)) {
    
// $pipes ���ڿ������������ģ�
    // 0 => �������ӽ��̱�׼����д��ľ��
    // 1 => ���Դ��ӽ��̱�׼�����ȡ�ľ��
    // �����������׷�ӵ��ļ� /tmp/error-output.txt

    
fwrite($pipes[0], '<?php print_r($_ENV); ?>');
    
fclose($pipes[0]);

    echo 
stream_get_contents($pipes[1]);
    
fclose($pipes[1]);
    

    
// �мǣ��ڵ��� proc_close ֮ǰ�ر����еĹܵ��Ա���������
    
$return_value proc_close($process);

    echo 
"command returned $return_value\n";
}
?>

�������̵���������ڣ�

Array
(
    [some_option] => aeiou
    [PWD] => /tmp
    [SHLVL] => 1
    [_] => /usr/local/bin/php
)
command returned 0

ע��

Note:

Windows �����ԣ����� 2 ��������Ҳ������Ϊ�ɼ̳еľ�����͵��ӽ��̡� ���ǣ����� Windows �ļܹ��������ļ��������͵ײ������й����� ���ԣ��ӽ����޷����������ľ���� ��׼���룬��׼����ͱ�ע����ᰴ��Ԥ�ڹ�����

Note:

�����ֻ��Ҫ����Ľ��̹ܵ��� ʹ�� popen() ��������Ӽ򵥡�

�μ�

  • popen() - �򿪽����ļ�ָ��
  • exec() - ִ��һ���ⲿ����
  • system() - ִ���ⲿ���򣬲�����ʾ���
  • passthru() - ִ���ⲿ��������ʾԭʼ���
  • stream_select() - Runs the equivalent of the select() system call on the given arrays of streams with a timeout specified by tv_sec and tv_usec
  • The ִ�в�����