2013-03-05 102 views
0

我正在寫php腳本,它將用於從「standart」站點製作站點。 有很多unix shell命令,我發現顯示錯誤的問題。來自unix命令的PHP CLI錯誤

示例:我需要檢查站點文件夾是否還不存在。

$ls_newsite = exec('ls /vhosts/'.$sitename, $output, $error_code); 
if ($error_code == 0) { 
    Shell::error('This site already exists in /vhosts/'); 
} 
Shell::output(sprintf("%'.-37s",$sitename).'OK!'); 

所以,我可以處理錯誤,但它會反正顯示。

php shell.php testing.com 

Checking site... 
ls: cannot access /vhosts/testing.com: No such file or directory 
testing.com.................................OK! 

如何防止顯示?謝謝

+0

正如@Colin Morelli所說,你不需要爲此使用控制檯命令。 'file_exists'就足夠了。 – andy 2013-03-05 11:26:09

+0

這只是顯示問題的例子。 – Kirill 2013-03-05 11:55:12

+0

但即便如此,並不是很多情況下你應該使用'exec'命令。 – andy 2013-03-05 11:56:42

回答

1

您不需要這些CLI調用的輸出,只是錯誤代碼。所以直接輸出到/dev/null(否則PHP將打印任何去stderr,除非你使用proc_open和創建管道爲每個 - 這些 - 矯枉過正)。

$ls_newsite = exec('ls /vhosts/' . $sitename . ' > /dev/null 2>&1', $output, $error_code); 

這將不給你任何輸出工作。現在

,到其他一些問題:

使用escapeshellarg任何東西你傳遞一個shell命令。 一個更好的方式來寫相同的代碼是:

$ls_newsite = exec(sprintf('ls %s > /dev/null 2>&1', escapeshellarg('/vhosts/' . $sitename)), $output, $error_code); 

確保100%,你需要使用控制檯命令。對於大多數基於文件的控制檯命令(stat,file_exists,is_dir等),都有PHP等價物,這會使您的代碼更加安全將允許它與平臺無關。