用popen()函数打开进程
上面的方法只能简单地执行命令,却不能与命令交互。但有些时候必须向命令输入一些东西,如在增加Linux的系统用户时,要调用su来
把当前用户换到root才行,而su命令必须要在命令行上输入root的密码。这种情况下,用上面提到的方法显然是不行的。
popen ()函数打开一个进程管道来执行给定的命令,返回一个文件句柄。既然返回的是一个文件句柄,那么就可以对它读和写了。在PHP3中,
对这种句柄只能做单一 的操作模式,要么写,要么读;从PHP4开始,可以同时读和写了。除非这个句柄是以一种模式(读或写)打开的,否则
必须调用pclose()函数来关闭 它。
例子1:
复制代码 代码如下:
<?php
$fp=popen("/bin/ls -l", "r");
?>
示例2:
<?php
/* PHP中如何增加一个系统用户
下面是一段例程,增加一个名字为james的用户,
root密码是 verygood。仅供参考
*/
$sucommand = "su --login root --command";
$useradd = "useradd ";
$rootpasswd = "verygood";
$user = "james";
$user_add = sprintf("%s "%s %s"",$sucommand,$useradd,$user);
$fp = @popen($user_add,"w");
@fputs($fp,$rootpasswd);
@pclose($fp);
?>
PHP编程中,由于代码处理的数据量太大,单个进程处理需要很长的时间,所以需要用到并发进行处理。
popen命令说明:打开一个指向进程的管道,该进程由派生指定的 command 命令执行而产生。
使用popen结合SHELL命令也可以实现多进程并发编程。
下面开始代码实现,文件a.php:
<?php
for ($i=0;$i<10;$i++){
file_put_contents('./t.txt',$i,FILE_APPEND);
sleep(1);
}
?>
程序b.php:
<?php
echo "start curl\n";
//popen函数,参数1执行php命令(PHP的路径 需要执行的php命令文件或其他shell命令),参数2以只读方式执行命令
$out = popen("/usr/local/bin/php ./a.php", "r");
echo "test\n";
pclose($out);
echo "end curl\n";
?>
运行b.php:
我们发现test立即被输出,而a.php仍然在执行中。
10秒后,a.php执行完毕,整个程序执行结束。t.text文件中,已被写入内容。
popen()函数打开进程
最新推荐文章于 2024-06-26 00:45:00 发布