2012-03-28 38 views
3

請幫我解決我在生產服務器上遇到的這個問題。我啓動了一個應用程序,只有在檢查到目錄不存在的情況下才能將圖像保存到目錄中。php執行shell命令只在重用模式下給出隨機輸出

要檢查它是否已經存在,我用下面的命令 find $filePath -name $fileInitial*

我很驚訝地看到,這一切都很好的開發和QA但在實際環境中,從50例,其中5例是即使文件存在,也會返回空白。

我試着用execshell_exec,passthrusystem替換反引號運算符。我甚至試圖用ls代替find命令,但仍然沒有收穫。

請建議可以做些什麼?

+3

我假設你使用的是shell命令,因爲glob()或file_exists()函數沒有做你需要它做的事情? – ChrisK 2012-03-28 18:20:23

+0

鑑於末尾帶有'*',一個exec()調用將使shell查找'whatever *',並在找到任何有機會運行之前立即返回「不匹配」。 – 2012-03-28 18:34:15

+0

@Charanjeet Kaur:請選擇其中一個答案,看起來您的問題已被回答。 – hakre 2012-06-22 10:15:32

回答

2

根據你的代碼,我強烈建議儘可能避免exec/shell_exec。

如果不考慮安全性,它會給整個系統帶來非常大的安全風險。

不知道爲什麼你正在嘗試處理的實際命令有問題,但我的建議是在php中使用file_exists()glob()函數,而不是手動進入文件系統。

+0

我也推薦這種方法,並確定建議不要執行shell命令。 file_exists()和glob()通常也適用於Windows和Linux服務器,其中exec命令通常不會。 – danieltalsky 2012-03-28 19:50:42

0

你是否設置了:ignore_user_abort(true);set_time_limit()合理嗎? 請試用popen()。我總是發現它更容易正確連接。

1

謝謝大家。你的建議真的有效。它與glob()一起運行良好。

可能是通過PHP執行shell命令的原因不等待足夠的時間結果或它與運行php的CGI模式有關。

請分享您的想法。

+0

它可能與文件系統沒有更新,因爲上載後發現實際找到它,或者它可能是由於某種原因執行失敗 - 無論哪種方式避免exec&shell_exec在所有成本(非常非常糟糕的事情一般使用) - 哦,請接受上面的答案:) – ChrisK 2012-03-30 10:47:05

相關問題