我想将 mp3 文件转换为 ogg。我尝试了以下代码
exec("/usr/local/bin/ffmpeg -i 1.mp4 -vcodec libtheora -acodec libvorbis testjohn4545454.ogg",$output);
var_dump($output);
但它不会转换文件,它只会返回array(0) { }
,只需要一点执行时间。
但是使用 ssh 命令时转换是成功的。
请给我解决方案。
有趣的是,您想在自己的进程和后台执行此操作,否则您的 PHP 脚本将在等待转换完成时挂起。
编码:
passthru("nohup /usr/local/bin/ffmpeg -i 1.mp4 -vcodec libtheora -acodec libvorbistestjohn4545454.ogg 1> /path/to/logfile.txt 2>&1 &");
注意末尾的“nohup”和&符号:这些应该可以满足您的要求。此外,您现在可以定期检查您的日志文件,以确保它正在执行您想要的操作。
最后,如果您愿意,请查看此问题以创建进度条。
我曾经遇到过类似的问题,但我选择在 apache 可写文件夹中保存和读取文件(输入文件和输出转换文件)您还可以通过读取该目录来检查转换是否已经完成。
你能检查一下你在 PHP 上的 disabled_functions 配置,看看 exec 是否不存在吗?此外,您可能希望启用所有错误报告,然后尝试使用简单的 bash echo 执行 exec() 并查看它是如何进行的。如果一切顺利,请检查您是否使用了正确的文件,正如 Jamie 指出的那样,工作目录可能是错误的,所以使用绝对路径或相对路径,无论哪种最方便。用于检查当前工作目录是什么的 Unix 命令是pwd
.
编辑:此外,exec有另一个警告When safe mode is enabled, you can only execute files within the safe_mode_exec_dir
,因此请务必仔细阅读手册以了解其他问题。
感谢您的答复。我使用passthru()
而不是exec()
它工作正常。