我正在創建一個Web應用程序,我希望向公衆發佈以供下載並安裝在任何人自己的Web服務器上,但是我剛剛被通知某些Webhosts由於「安全問題」而禁用了在php中使用fopen
,特別是共享主機。我在應用程序的安裝過程中使用fopen
,我應該關心這個嗎?這是共享主機的常見做法嗎?如果是這樣,還有另一種方法可以寫入文件嗎?我聽說過cURL,但這需要終端用戶有更高級的知識,不是嗎?如果是這樣,這顯然是不可預料的。非常感謝!Fopen可以安全地在公共軟件中使用嗎?
4
A
回答
3
fopen()永遠不會被禁用。但是,php.ini設置爲「allow_url_fopen」。所以,如果你只訪問本地文件,而不是通過fopen()訪問http:// URL,這實際上並不是一個問題。
如果您需要URL支持,您應該另外包含HTTP請求類,如the one in PEAR。這樣可以避免用戶不友好的對cURL擴展模塊的依賴。
2
在我有限的經驗中,fopen()
很少被禁用。用捲曲書寫本地文件是無稽之談,所以這不是一個替代方案。由於所有寫入到本地文件一種依賴的fopen,正常包最常用的途徑是:
- 試圖用在一個體面的默認設置在安裝文件中的內容(可能是文件已經存在正常的包文件)。
- 失敗時,向用戶展示您想要設置的內容,併爲他提供選項以手動複製/粘貼該內容,或者重試設置內容(例如,用戶設置文件時正確的權限,你當然會解釋如何做)。
1
使用捲曲:
function GET($url,$header = null,$post = 0,$cookie = null){
$handle = curl_init();
curl_setopt($handle, CURLOPT_URL, $url);
curl_setopt($handle, CURLOPT_HEADER, $header);
curl_setopt($handle, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
if($post) {
curl_setopt($handle, CURLOPT_POST, true);
curl_setopt($handle, CURLOPT_CUSTOMREQUEST,($post)?"POST":"GET");
curl_setopt($handle, CURLOPT_POSTFIELDS, $post);
}
curl_setopt($handle, CURLOPT_COOKIE, $cookie);
if(preg_match('/https/',$url)) {
curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, false);
}
return($buffer = @curl_exec($handle)) ? $buffer : 0;
}
//A basic example of the requisition process :
echo GET('http://google.com',1)
//post data:
GET('/test.php',1,
array('Name' => 'Jet',
'id' => 12,
'foo' => 'abc'));
returns:
successfully : source-code;
0 : Request failed
//send cookies :
GET('http://example.com/send.php',1,
array('Name' => 'Jet',
'id' => 12,
'foo' => 'abc'),"cookies");
file_put_contents: http://php.net/file_put_contents
相關問題
- 1. Malloc可以安全地使用nogil嗎?
- 2. 我可以安全地使用WinForms設計器中只有公共工廠方法的控件嗎?
- 3. 在公共網絡中使用wxTCPConnection安全嗎?
- 4. 谷歌地圖可以在公共網站上使用嗎?
- 5. 我可以安全地在公共頭文件中用unsigned char替換一個bool成員嗎?
- 6. 共享變種可以安全嗎?
- 7. Task.Delay可以安全地在ASP.NET中使用嗎?
- 8. sitemesh 3可以安全地在生產中使用嗎?
- 9. sync.WaitGroup可以安全地重用嗎?
- 10. 可以安全地應用補丁嗎?
- 11. JDK7現在可以安全使用嗎?
- 12. C中的Fopen/fread/fgets PID安全嗎?
- 13. 現在我們可以使用diagnostics.wadcfgx安全地刪除diagnostics.wadcfg嗎?
- 14. VBScript可以用於公共網站嗎?
- 15. ngx.shared.DICT可以安全使用嗎?
- 16. AesCryptoServiceProvider.GenerateKey可以安全使用嗎?
- 17. 可以安全使用dompdf + file_get_contents嗎?
- 18. scrapy.conf可以安全使用嗎?
- 19. 用戶代碼可以安全地使用struct padding嗎?
- 20. 我可以將PHP配置文件安全地放置在可公開訪問的文件夾中嗎?
- 21. 我可以安全地使用域URI
- 22. 可以安全地使用MainActivity.this
- 23. MonoTouch可以安全地與Core Audio一起使用嗎?
- 24. 我可以安全地使用utf8mb4列的utf8連接嗎?
- 25. 當SynchronizationContext.Current爲空時,我可以安全地使用Task.Wait嗎?
- 26. Typhoeus可以安全地使用activerecord嗎? resque?
- 27. -fomit-frame-pointer,它可以安全地使用它嗎?
- 28. 不使用PDO :: PARAM可以安全地綁定嗎?
- 29. Github安全 - 公共項目
- 30. Firesheep - 安全公共網絡
有關創建臨時文件的東西,如'的tempnam()'什麼?用'fopen()'訪問它們不會使用URL,是嗎? – 2010-07-15 01:10:29
@Ben:不,那很安全。 tempnam()只創建本地文件,不包含任何URL。 – mario 2010-07-15 02:05:22
永不說永遠:任意功能可以被禁用.... – Wrikken 2010-07-15 02:31:38