You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux终端正常的youtube-dl带cookies命令在PHP exec中失效求助

解决PHP中调用youtube-dl带cookies参数失败的问题

碰到这种终端里能正常跑,但PHP调用就出错的情况,我太熟悉了!核心问题基本都出在执行环境差异上——毕竟PHP是用web服务器的用户(比如www-data)来执行命令的,和你终端登录的用户完全不是一回事。咱们一步步排查解决:

1. 先把路径问题搞定!

这是最常见的坑:

  • cookies文件要用绝对路径:PHP里的相对路径是基于web服务器的工作目录(比如/var/www/html),不是你终端里的当前文件夹。把命令里的cookies.txt改成绝对路径,比如/home/your-username/cookies.txt。
  • youtube-dl也要用绝对路径:终端里能直接敲youtube-dl是因为它在系统PATH里,但PHP的执行环境PATH可能不一样。先在终端里跑which youtube-dl拿到它的绝对路径(比如/usr/local/bin/youtube-dl),然后在PHP命令里用这个完整路径。

修改后的PHP代码应该是这样(记得用escapeshellarg()转义URL,避免特殊字符搞砸命令):

$url = "https://www.youtube.com/watch?v=yIRBMRTb260";
// 替换成你自己的绝对路径
$youtubeDlPath = "/usr/local/bin/youtube-dl";
$cookiesPath = "/home/your-username/cookies.txt";

$command = "$youtubeDlPath --cookies $cookiesPath --get-url " . escapeshellarg($url);
exec($command, $output, $returnCode);

// 调试用:打印输出和返回码,看看具体问题
var_dump($output);
var_dump($returnCode);

2. 给cookies文件设置正确的权限

web服务器用户(比如www-data)得能读取你的cookies文件才行:

  • 先修改文件权限,让其他用户能读:
    chmod 644 /home/your-username/cookies.txt
    
  • 如果还是不行,直接把文件所有权改成web服务器用户:
    chown www-data:www-data /home/your-username/cookies.txt
    

3. 捕获完整的错误信息

默认情况下,exec只捕获命令的标准输出,错误信息会被丢掉。把命令改成这样,就能把错误输出也抓回来,方便排查:

$command = "$youtubeDlPath --cookies $cookiesPath --get-url " . escapeshellarg($url) . " 2>&1";

这样你就能看到比原来更详细的错误提示,比如是不是权限不够,或者路径找不到。

4. 检查PHP的安全限制

有些服务器会限制PHP执行外部命令:

  • 打开php.ini,检查disable_functions里有没有exec,如果有就去掉(操作前确保服务器安全)。
  • 检查open_basedir设置,确保你的cookies文件在它允许访问的目录范围内。

5. 最后确认cookie格式

youtube-dl只认Netscape格式的cookies文件,如果你是从浏览器导出的,要选对格式(比如Chrome导出时选“Netscape格式”,别选JSON)。不过你终端里能跑的话,格式应该没问题,但还是确认一下更稳妥。


内容的提问来源于stack exchange,提问作者skhmatin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 21:12:29