2011-04-19 48 views
2

我想寫文本文件(如日誌條目/數據/其他),其中,服務器是在UNIX系統上fopen + fwrite比shell_exec快嗎?

是人們能夠更快的使用方法:

$handle = fopen("somefile"); fwrite($handle,"sometext");

或本:

shell_exec("echo 'sometext' > somefile");

是否有任何其他的缺點,以使用了shell_exec方法? 速度?安全?性能與特點?

回答

4

對於你的例子那樣簡單的事情,既不會明顯更快,安全性也不成問題。如果你的shell參數是PHP變量,那麼一定要使用escapeshellcmd()docs here)。

但是,在程序代碼中,我認爲我更喜歡fopen() fwrite()方法,只是因爲在寫入之前更容易檢查錯誤和文件句柄的有效性,然後檢查返回fwrite()以確保您的寫入操作成功。 shell命令只會返回一個錯誤代碼,所以調試錯誤發生的位置會更困難。

1

從長遠來看,f ...()函數會明確地更快/更安全。即使你只「做」回聲,服務器仍然需要自行分配exec()shell,shell必須解析其參數,調用echo,然後STILL打開文件以通過其寫入數據擁有fopen/fwrite/fclose序列。

對於簡單的一點調試,沒什麼大不了的。爲了在繁忙的網站上寫出「頻繁」的日誌條目,這將是你的服務器的死亡。

把它想象成行走< ---冰箱裏的飲料,或者走出去---在門外和世界各地之間的區別,只是最後再次回到冰箱。

2

方式更快。只要考慮shell_exec是分叉的,然後加載一個shell二進制文件,運行它,然後shell解釋命令,然後shell再次分叉運行命令...