在PHP中由于某种原因没有执行Bash脚本

时间:2017-07-18 03:44:16

标签: php bash

所以我编写了一个包含2个参数的bash脚本。

  1. 本地文件名
  2. 要存储在对象库中的文件名。
  3. 我想要一个php脚本能够运行这个,所以我写了这样的东西:

    <?php
    
        $output = shell_exec("./uploadFile.sh 'confirmation.txt' 'test_conf_script'");
        echo $output;
    ?>
    

    这显然是硬编码的,但使用命令工作正常:

    php -f test.php

    现在我希望我的Web应用程序能够使用相同的bash脚本将文件上传到对象存储库,因此我修改了我的php脚本:

    <?php
    
        $target_dir = "./upload/";
        $name = (string)$_POST['name'];
        $file_name = (string)basename($_FILES["file"]["name"]);
        $target_file = $target_dir . basename($_FILES["file"]["name"]);
        $file_type = $_FILES["file"]["type"];
        $file_size = $_FILES["file"]["size"];
    
        if(move_uploaded_file($_FILES["file"]["tmp_name"], $target_file)){
                echo "Upload\n";
        }
        else{
                echo "couldn't upload!";
        }
    
    
        $output = shell_exec("./uploadFile.sh '$file_name' '$name'");
    
        echo "./uploadFile.sh '$file_name' '$name'";
    ?>
    

    我的前端为脚本提供了文件,我确实在本地看到了我的文件。

    然而,使用shell_exec上传到对象存储不起作用..

    它似乎很棒,因为它与test.php文件完全相同,虽然它可以在终端上运行,但是当我的前端触发这个php脚本时它无法正常工作。

1 个答案:

答案 0 :(得分:0)

你有没有试过this

  

在调用脚本之前,您可能需要chdir到正确的目录。这样,您可以在调用shell命令

之前确保脚本所在的目录
$old_path = getcwd();
chdir('/my/path/');
$output = shell_exec('./script.sh var1 var2');
chdir($old_path);