shell_exec在Linux服务器上不起作用

时间:2018-07-25 02:30:00

标签: php linux server exec shell-exec

我在Windows WAMP服务器上使用youtube-dl.exe,而var para = document.querySelector('button'); para.addEventListener('click', updateValue); function updateValue() { var value = prompt('Enter a new value'); para.textContent = value; } 在Windows上运行良好,我从youtube-dl获得了正确的信息(返回字符串)。

将相同的PHP脚本上传到我真正的Linux服务器上后,即使我上传了linux-dl的Linux版本,它也会停止运行。

对于我从VirtualBox上的Linux机器上的sudo curl命令获得的Linux版本文件,我正在尝试执行以下操作:

shell_exec()

对于我在WAMP服务器(exe)上使用的相同版本:

$var = shell_exec("youtube-dl -g https://www.youtube.com/watch?v=97Eagwlt-ZA");

这两个命令绝对不会返回任何内容,两个不同版本的文件位于同一根(/)文件夹中,并且

$var = shell_exec("youtube-dl.exe -g https://www.youtube.com/watch?v=97Eagwlt-ZA");

$var = exec("youtube-dl -g https://www.youtube.com/watch?v=97Eagwlt-ZA", $errors); 返回一个空Array()

但是

$errors

像超级按钮一样工作(创建包含“ test”的测试文件)。

PHP和youtube-dl文件的CHMOD设置为755。PHP版本5.6。
我真的被困在这里。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

要检查的几件事:

  • 检查以确保youtube-dl具有网络服务器用户的执行权限。在Linux系统上,脚本必须标记为可执行文件才能直接运行。设置755权限应该可以解决问题。
  • 将./添加到路径(例如./youtube-dl),或确保youtube-dl位于网络服务器的$ PATH上。与Windows不同,当前目录不会自动包含在路径中。
  • 如果您的Linux服务器正在运行SELinux或AppArmor,则这些应用程序可能会阻止您的Web服务器运行命令。通常,您可以在系统日志中找到有关被阻止的项目的信息。