首页 > 解决方案 > shell_exec 在 Linux 服务器上不起作用

问题描述

我在我的 Windows WAMP 服务器上使用 youtube-dl.exe,并且shell_exec()在 Windows 上运行良好,我从 youtube-dl 获得了正确的信息(返回一个字符串)。

一旦将相同的 PHP 脚本上传到我的真实 Linux 服务器上,它就会停止工作,即使我上传了 youtube-dl 的 Linux 版本。

对于我从 VirtualBox 上的 Linux 机器上的 sudo curl 命令获得的 Linux 版本文件,我正在尝试这样做:

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

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

$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);

$errors返回一个空的 Array()

$var = shell_exec("echo test > test.txt");

像魅力一样工作(创建内部带有“test”的测试文件)。

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

标签: phplinuxserverexecshell-exec

解决方案


需要检查的几件事:

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

推荐阅读