我有一个使用unoconv然后使用pdftk的shell脚本。当我通过命令行运行脚本时,它的工作原理完全符合我的要求。当我在php中使用shell_exec($cmd)
时使用相同的命令运行脚本(我知道因为脚本中有回声),但看起来它不使用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";
}
这是shell脚本
#!/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 / powerpoints / pptest / pptest.ppt”
抱歉造成混淆
答案 0 :(得分:1)
发现了什么问题。答案就在这里 http://johnparsons.net/index.php/2013/08/05/how-to-keep-unoconv-apache-from-making-you-sad/
基本上你必须为apache2的用户设置一个主目录作为www-data并在passwd文件中更改shell的路径
他没有提到它,但除非你重启apache
,否则更改将无效