我有一个shell脚本,它使用unoconv,然后使用pdftk。当我通过命令行运行脚本时,它完全按照我希望的方式运行。当我在php中使用shell_exec($cmd)
和相同的命令时,它会运行脚本(我知道,因为脚本中有echo),但它看起来不使用unoconv(因此无法使用pdftk)。你知道如何解决这个问题吗?这里有一些代码:
if(isset($_FILES["file"]["name"]) && !empty($_FILES["file"]["name"])){
$fname = $_FILES["file"]["name"];
$tmp_name = $_FILES["file"]["tmp_name"];
$dir = "powerpoints/".$name."/";
$ispdf = "1";
$output = shell_exec('mkdir '.$dir);
chmod($dir, 0777);
echo $output;
if(move_uploaded_file($tmp_name, $dir.$fname)){
chmod($dir.$fname, 0777);
$cmd = 'importppt.sh '.$name.' '.str_replace(".ppt", "", $fname);
echo "'n".$cmd;
$output = shell_exec($cmd);
echo $output;
}else{
$message = "move_uploaded_file() Failed";
}
这是外壳脚本
#!/bin/bash
echo $1 ' is the argument:' $2 ' is the second '
STRING="/var/www/html/devclassroomproject/powerpoints/"
echo $STRING$1/$2'.ppt '
unoconv $STRING$1/$2'.ppt'
pdftk $STRING$1/$2'.pdf' burst output $STRING$1/$1'_%2d.pdf'
这是从回声中打印出来的:
importppt.sh pptest pptestpptest is the argument: pptest is the second
/var/www/html/devclassroomproject/powerpoints/pptest/pptest.ppt
编辑:破解我的调试命令:"importppt.sh pptest pptest"importppt.sh是shell脚本;pptest是的第一个和第二个自变量
由shell脚本中的第一个echo打印:"pptest是参数:pptest是第二个"
由脚本中的第二个echo打印,验证pdf的完整路径,该路径确实存在:"/var/www/html/devclassroomproject/powepts/pptest/ppt"
很抱歉造成混淆
发现问题所在。答案就在这里http://johnparsons.net/index.php/2013/08/05/how-to-keep-unoconv-apache-from-making-you-sad/
基本上,您必须为用户为apache2设置一个主目录作为www数据,并在passwd文件中更改shell的路径
他没有提到这一点,但除非您重新启动apache