如何使用php执行shell cmd(python)并打印所有constantupdated输出?

2024-09-30 22:17:58 发布

您现在位置:Python中文网/ 问答频道 /正文

实际上,我对php还很陌生。所以事情是这样的: 我想为著名的youtube dl制作一个简单的web shell,所以我制作了一个简单的网页和一个简单的php页面,尝试使用php来执行youtube dl并将所有输出显示到浏览器。在

我尝试过command和escapeshellcmd(),它们都可以从youtube dl中输出最初几行不断更新的输出(它们可以很好地与其他命令如“ls”配合使用),但似乎当它得到第一行时,python脚本就会停止,不再更新,我的服务器上也没有下载的视频文件。在

顺便说一句,都是在Ubuntu 14 LTS上。在

到目前为止,我已经试过了:

    <?php
    $command = shell_exec('youtube-dl https://www.youtube.com/watch?v=z456k6yBeo0');
    echo "<pre>$command</pre>";
    ?>

以及

^{pr2}$

以及

    <?php
    $command = escapeshellcmd('youtube-dl https://www.youtube.co/watch?v=z456k6yBeo0');
    $output = shell_exec($command);
    echo $output;
    ?>

它们都能很好地与“ls”配合使用,但与youtube dl的配合却不太好


Tags: httpsechooutputyoutubewwwshellprels
3条回答

试试^{} function

<?php
$output = shell_exec('ls -lart');
echo "<pre>$output</pre>";
?>

你问题中的这个例子对我很有用:

<?php
    $command = escapeshellcmd('youtube-dl https://www.youtube.co/watch?v=z456k6yBeo0');
    $output = shell_exec($command);
    echo $output;

你的PHP版本是什么?我的是5.5.9。在

您也可以像这样使用proc\u open(我们可能在这里遗漏了错误,所以请尝试更新版本):

^{pr2}$

您还可以使用exec,它将显示退出状态:

<?php
$cmd = 'youtube-dl https://www.youtube.co/watch?v=z456k6yBeo0';
exec(escapeshellcmd($cmd), $output, $status);
if ($status) echo "Exec command failed.";
else echo var_dump($output);

所以我设法解决了这个问题。@zahyur是对的,这是关于许可的问题。由于我习惯使用root来管理我的服务器,所以当我从shell执行命令时不会有任何问题。但是服务器需要额外的权限才能执行命令,以便在目录中写入内容。在

解决方案是建立一个新目录并赋予它写访问权限,在该目录中执行命令,就不会出现问题。在

相关问题 更多 >