Maison > php教程 > php手册 > le corps du texte

php执行外部命令

PHPz
Libérer: 2018-09-30 16:25:46
avant
1235 Les gens l'ont consulté

php执行外部命令的不少,例如:exec、shell_exec、system、popen等。

我特意的讲一下popen,它跟其他函数不太一样,其他函数执行一个命令后,会等待其返回后,再向下执行,而popen则不会。

所以你想用php程序并行的处理一些业务的时候,可以用popen。

我举个例子,有两个php文件,numgame.php和numgenerate.php,numgame.php循环的生产一个数传参给numgenerate.php,用popen和shell_exec做个对比(其中numgenerate.php不做更改):

umgenerate.php

$num=$argv[1];
file_put_contents('/tmp/shell.log',$num."\t".date('H:i:s')."\n",FILE_APPEND);
Copier après la connexion

1、用popen:

numgame.php:

function getnum($num){
$cmd=popen("ps -ef | grep 'php -f numgenerate.php'| wc -l",'r');
$currentnum=fgets($cmd,512);
fclose($cmd);
$maxnum=20;
if($currentnum>$maxnum){
sleep(5);
getnum($num);
}else{
$cmd2=popen("php -f numgenerate.php $num ",'r');
fclose($cmd2);
}
}
for($i=1111;$i<=99999;$i++){
if($i%1111!=0 && strpos($i,&#39;0&#39;)===false){
getnum($i);
}
}
Copier après la connexion

2、如果在执行numgenerate.php文件时,加入一个&,将其放倒后台,即将

$cmd2=popen("php -f numgenerate.php $num ",'r');
改为
$cmd2=popen("php -f numgenerate.php $num &",'r');
会发生什么变化。

3、用shell_exec:

numgame.php:

function getnum($num){
$currentnum=shell_exec("ps -ef | grep &#39;php -f numgenerate.php&#39;| wc -l",&#39;r&#39;);
$maxnum=20;
if($currentnum>$maxnum){
sleep(5);
getnum($num);
}else{
shell_exec("php -f numgenerate.php $num ",&#39;r&#39;);
}
}
for($i=1111;$i<=99999;$i++){
if($i%1111!=0 && strpos($i,&#39;0&#39;)===false){
getnum($i);
}
}
Copier après la connexion

4、同样的,跟第2个例子一样,在其后面加个&,即将

shell_exec("php -f numgenerate.php $num ",'r');
改为
shell_exec("php -f numgenerate.php $num &",'r');

通过运行以上四个例子,shell.log的前1000条记录生成所需时间(记得每次运行完后,清空一下shell.log):

1、1分6秒
2、33秒
3、5分29秒
4、1分2秒

看吧,时间差距还是蛮大的。我觉得用&将命令放倒linux后台去执行,linux系统就不会等待其php程序执行的返回,从而更节省了时间。

更多相关教程请访问 php编程从入门到精通全套视频教程

Étiquettes associées:
php
source:cnblogs.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Recommandations populaires
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!