php - 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。
我真的被困在这里..有什么想法吗?
解决方案
需要检查的几件事:
- 检查以确保 youtube-dl 具有网络服务器用户的执行权限。在 Linux 系统上,脚本必须标记为可执行才能直接运行。设置 755 权限应该可以解决问题。
- 将 ./ 添加到路径(例如 ./youtube-dl)或确保 youtube-dl 在 Web 服务器的 $PATH 上。与 Windows 不同,当前目录不会自动包含在路径中。
- 如果您的 Linux 服务器正在运行 SELinux 或 AppArmor,这些应用程序可能会阻止您的 Web 服务器运行命令。您通常可以在系统日志中找到有关项目被阻止的信息。
推荐阅读
- uitableview - 使用 Xcode9 重用和构建时,UITableView 中的单元格绑定无法正常工作
- python-3.x - 如何保存openCV分类器?
- reactjs - 反应原生两张卡将如何连续对齐(从服务器动态获取数据到卡时)
- reactjs - 如何使用 yarn 创建 React 应用项目?
- django - Django/Ubuntu 16.04/ 指定 python 版本
- amazon-web-services - 从 springloops 部署代码
- triggers - Aqua Studio 中的 DB2 触发器创建设置
- autocad - 从工具面板插入块时出现“需要点或选项关键字”错误
- php - 如何在会话中注册多个版本的同一变量
- python - 也许是 matplotlib/seaborn 轴范围的错误?