2012-09-22 172 views
5

我試圖在PHP中運行bash腳本,但無法運行它。 php -v無法在PHP中運行bash腳本

PHP 5.3.10-1ubuntu3.2 with Suhosin-Patch (cli) (built: Jun 13 2012 17:19:58) 
Copyright (c) 1997-2012 The PHP Group 
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies 

Ubuntu 12.04 LTS 64位。

我的PHP代碼:

$cmd='/www/var/pl/bash.sh'; 
    $retval =-1; 
    exec($cmd, $output); //executing the exec function. 
    foreach($output as $tmp) 
    { 
     echo "$tmp <br>"; 
    }; 

bash.sh:

#!/bin/bash 
swipl --quiet -s /var/www/pl/ples.pl -g "f(R, gel), writeln(R),open('/var/www/pl/in.txt',write, Stream), 
write(Stream, (R)), 
nl(Stream), 
close(Stream)" -t halt. 

我在做什麼錯?

而且我可以在Linux終端中運行bash.sh。

+0

嘗試在shell腳本之前用「bash」 - 所以有「bash /www/var/pl/bash.sh」 – Robbie

+0

將'$ cmd'改爲'/www/var/pl/bash.sh 2> &1'。它仍然不會運行,但可能會給你一些關於它爲什麼沒有的見解。 – LSerni

+1

你看到了什麼錯誤,如果有的話?我假設你的PHP沒有在安全模式下運行,並且exec命令沒有被禁止? – Basic

回答

0

最有可能是路徑或權限問題;例如Web應用程序運行的用戶,不知道程序在哪裏。

將2> & 1添加到exec之前的命令行中,以便它告訴您問題所在。或者,您可以在Web服務器錯誤日誌(或PHP錯誤日誌;請在php.ini中檢查其路徑和設置)中找到stderr輸出。

5

在終端中運行腳本時,您正在您登錄的帳戶下執行該腳本。你有一個搜索路徑等外殼設置等。

當php執行腳本,它沒有一個shell設置,並運行在Web服務器的用戶帳戶。當執行:

  • 請確保您有完整的路徑文件,swipl是不夠的,它應該是/path/to/swipl
  • 確保web服務器進程有足夠的訪問權限來獲得它需要的一切。