2017-07-18 83 views
0

所以我寫了一個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

回答

0

你有沒有試過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語句確保這些變量是正確的。 –