2011-04-06 101 views
0

我嘗試在我的php代碼(Joomla模塊)中運行passthru函數時出現問題。代碼如下(這只是一個片段)服務器上的passthru問題

ob_start(); 
passthru("/usr/bin/whois 85.70.231.130 | /usr/bin/grep 'address:'",$code); 
$whoisData = ob_get_contents(); 
ob_end_clean(); 
$whoisData = str_replace("address:", "", $whoisData); 
$whoisArray = split("\n",$whoisData); 
echo trim($whoisArray[1]);  

,當我在我的本地運行它,它呼應它應該是什麼,但是當我運行在生產服務器上的代碼,它呼應沒有和$代碼變量包含127(找不到命令)。我嘗試將這些命令的絕對路徑添加到passthru函數中,但它沒有幫助。有趣的是,當我通過ssh和php命令從終端運行代碼時,它運行良好,但是當它從應用程序上下文調用時,它不會。有誰知道我應該怎麼辦?謝謝

部分編輯.. safe_mode設置爲on Web服務器沒有看到到/ usr/bin和/斌/文件夾等什麼是如何運行從PHP這些命令的最佳方式?

回答

2

usr/bin/grep看起來不像命令的有效路徑。

的路徑第二個命令開頭的缺失/或許可以解釋沒有找到錯誤命令,即使找到的第一個whois命令。

+0

哎喲,我編輯了我在這裏發佈的代碼,該代碼片段來自我的小測試文件,其中不是最新的,但是在我測試它的生產服務器上,是否可以..所以,謝謝,這不是重點:)我會編輯帖子。 – simekadam 2011-04-06 11:31:39

1

你看看你的web服務器/ php是否運行chrooted?

print_r(glob('/*')); 
if (file_exists('/usr/bin/grep') && file_exists('/usr/bin/whois')) { 
    print "maybe its a permissions thing?\n"; 
} else { 
    print "can't see executables required\n"; 
} 

應該給你一個線索。

+0

所以它似乎沒有運行chroot ..它打印此警告: 警告:file_exists()[function.file-exists]:open_basedir限制有效。文件(/ bin/grep)不在以下路徑中:/ mnt/data/accounts/m /第11行的medusedesign/data/www/new2/untitled.php – simekadam 2011-04-06 17:53:11

0

所以我已經解決了我的問題與phpwhois庫。我似乎與我的服務器配置是不太可能的,這些功能將運作良好。所以感謝您的幫助:)