shell脚本在终端中可以完全工作,但在php运行时则不能


shell script works fully in terminal but not when run by php

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

,否则这些更改将不起作用
相关文章: