我正在撕裂我的头发,试图弄清楚为什么当它从命令行执行时它可能不起作用。在使用 ImageMagick 完成渲染并将帧编译为 GIF 后,我将向用户发送 POV-Ray 动画。我通过 mutt sleep 发送了一个小时的电子邮件,以便有时间编译用户动画。(不过,我已将其更改为 120 秒,这样我就不必等待一个小时来排除故障。在这方面,我还让动画只有 3 帧,直到我找出问题所在。)
每次用户在我的网站上单击 animate 时,都会创建一个新的 bash 文件,animation_done_bash.sh,该文件又会创建一个新文件夹,用于存储动画的帧,其中包含 animation_done_bash.sh。为了使 PHP 页面前进到下一页,bash 文件在 dev null 中执行。我已经测试过这是否是命令行上的问题并且它在那里工作,所以我真的不知道是什么问题。
下面是使用 shell_exec 执行的代码和输出(我将其回显到我的 php 页面上,看看出了什么问题):
$animation_done_email = "#!/usr/bin/bash \nsleep 120; mutt -s \"Animation Finished\" -a animation.gif -- ".$email." <email.txt;";
/*Creates new animation_done_bash each time user hits animate*/
$directory_bash = "./User_Files/Animation/".$location."/";
$filename_bash = 'animation_done_bash.sh';
$handler_bash = fopen($directory_bash.$filename_bash, "w");
fwrite($handler_bash, $animation_done_email);
fclose($handler_bash);
/*Need to change the permissions on bash file so it can execute*/
chmod($directory_bash."/animation_done_bash.sh", 0777);
$command_5 = 'cd /home/ouraccount/public_html/User_Files/Animation/'.$location.'/; bash animation_done_bash.sh > /dev/null 2>/dev/null &';
$shellOutput = shell_exec($command_5);
其中 $email 是用户的电子邮件,$location 是存储框架的文件夹。email.txt 存储在同一文件夹中。
输出:cd /home/ouraccount/public_html/User_Files/Animation/ani_51/;bash animation_done_bash.sh > /dev/null 2>/dev/null &
任何指导将不胜感激。谢谢!