由于某种原因bash脚本不能在php中执行

问题描述:

所以我写了一个bash脚本,它需要2个参数。存储在对象存储由于某种原因bash脚本不能在php中执行

  1. 本地文件名
  2. 文件名。

我想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不工作的对象存储..

看来自的bizzare它完全一样的test.php的文件,虽然从终端,当我的前端触发此PHP脚本它不起作用。

+0

前检查'uploadFile.sh'的权限(所有者:组),这是有可能的地方问题是... –

+0

uploadFile.sh的权限-rwxr-xr-x –

+1

用'echo getcwd();'检查当前的工作目录。你是否在'uploadFile.sh'文件夹中? – hek2mgl

你有没有试过this

你可能需要调用脚本之前CHDIR到正确的目录。这种方式可以确保你的脚本是什么目录“中”调用shell命令

$old_path = getcwd(); 
chdir('/my/path/'); 
$output = shell_exec('./script.sh var1 var2'); 
chdir($old_path); 
+0

我的工作目录是/ var/www/html/ajax,它与uploadFile.sh的位置相同。我不认为它与目录的问题,因为我的test.php文件工作得很好。它包含相同的代码来执行shell,只是对文件名和名称变量进行了硬编码。我使用echo语句确保这些变量是正确的。 –