popen()函数打开进程

用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文件中,已被写入内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值