我在PHP中有这些行:
public function run(){
$command = 'php -S localhost:1337';
exec($command);
}
我在php中创建了一个简单的命令,如下所示:
php file run
当用户输入此命令时,PHP转到run()方法,但输出消息为空,服务器已在运行。
但是当我直接在cli中运行command php -S localhost:8000
时,它会显示以下消息:
C:\xampp\htdocs\hola>php -S localhost:8000
PHP 5.6.31 Development Server started at Mon Jan 15 15:52:34 2018
Listening on http://localhost:8000
为什么仅在从文件执行命令时才显示命令行的输出消息?
答案 0 :(得分:0)
exec
函数的签名是:
string exec ( string $command [, array &$output [, int &$return_var ]] )
因此,如果您执行以下操作,它应该可以工作:
public function run(){
$output = array();
$command = 'php -S localhost:1337';
exec($command, $output);
echo implode("\n", $output);
}
exec
函数完成后,输出将在$output
中,每个输出行作为数组的元素。然后implode
函数将数组的元素组合成一个由换行符分隔的字符串,然后echo
语句将打印该字符串。
答案 1 :(得分:0)
还没有人提到shell_exec
功能。结合@pgngp和@ DrKey的答案:
public function run(){
$command = 'php -S localhost:1337';
echo shell_exec($command);
}
这里的区别在于exec
仅返回输出的最后一行,其中shell_exec
返回执行的命令的整个结果。此外,backtic(`ls -al`
)运算符与运行shell_exec
。
public function run(){
echo `php -S localhost:1337`;
}
答案 2 :(得分:0)
exec
不会在命令执行结束时实时返回输出,但php -S
永远不会结束。我想你正在寻找像proc_open这样的东西。
可能this answer可以帮助你