shell脚本在终端中完全运行,但在php运行时则不行

时间:2014-11-03 02:34:26

标签: php shell

我有一个使用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”

抱歉造成混淆

1 个答案:

答案 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

,否则更改将无效