Php 壳牌执行董事不';不能在Linux服务器上工作

Php 壳牌执行董事不';不能在Linux服务器上工作,php,linux,server,exec,shell-exec,Php,Linux,Server,Exec,Shell Exec,我在Windows WAMP服务器上使用youtube-dl.exe,并且shell\u exec()在Windows上工作得很好,我从youtube dl获得了正确的信息(返回字符串) 一旦相同的PHP脚本被上传到我真正的Linux服务器上,它就会停止工作,即使我上传了Linux版本的youtube dl 对于我从VirtualBox上Linux机器上的sudo curl命令获得的Linux版本文件,我尝试执行以下操作: $var = shell_exec("youtube-dl -g htt

我在Windows WAMP服务器上使用youtube-dl.exe,并且
shell\u exec()
在Windows上工作得很好,我从youtube dl获得了正确的信息(返回字符串)

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

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

$var = shell_exec("youtube-dl -g https://www.youtube.com/watch?v=97Eagwlt-ZA");
对于我的WAMP服务器(exe)上的相同版本:

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

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

但是

工作起来就像一个符咒(创建内部带有“test”的测试文件)

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

需要检查的几件事:

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

您的youtube dl在哪里?也许可以试试shell_exec(“/youtube dl-g……”)?所有文件都放在根(/)文件夹中,这是FileZilla:的屏幕,CHMOD设置为755。我必须承认我现在很迷路。更新:经过数小时的欺骗,我想我找到了问题所在:youtube dl需要由sudo apt安装的资源。问题是,即使我在私有服务器上,我也无法执行该命令,终端会向我抛出一些东西,好像你不在sudoers组中。grep-Po命令不返回任何内容(我的服务器上没有sudoers)。。。我觉得我只需要找到一种方法来执行“sudo apt install youtube dl”命令,然后在我的PHP端,我会像shell_exec(“youtube dl-g etc”)一样调用它!谢谢你的回复。1.文件权限似乎正常(FileZilla的屏幕:)2$_服务器[“PATH”]是/bin:/usr/bin我试过system(“ls”)来查看实际的执行文件夹是什么,它显示了我的youtube dl、php等文件所在的根(/)文件夹。我在Linux上不如在Windows上舒服,所以我不太了解UNIX文件夹的结构,但下面是我在服务器的根上可以走多远:3。我已经联系了我的主人询问,因为日志中没有显示任何内容。。。
$var = exec("youtube-dl -g https://www.youtube.com/watch?v=97Eagwlt-ZA", $errors);
$var = shell_exec("echo test > test.txt");