命令行中的输出未显示

时间:2018-01-15 19:20:29

标签: php command-line

我在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

为什么仅在从文件执行命令时才显示命令行的输出消息?

3 个答案:

答案 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可以帮助你