2012-04-18 40 views
1

我的php應用程序中繼承了對file_get_contents(),file_put_contents和getimagesize()的調用的幾個函數。在服務器上禁用了錯誤處理和解決方法allow_url_fopen和allow_url_include

問題是,當allow_url_fopen中的allow_url_include在php.ini中被禁用時,我在這些關鍵函數上收到錯誤。

警告:和getimagesize()[function.getimagesize]:URL文件訪問是 在 /home/content/.../html/_sites/mysite/wp-content/themes服務器配置禁用/mytheme/functions.php on line 2534

解決這些問題有哪些選擇?

編輯:這些都是與調用php腳本在同一個web服務器上的所有本地文件。有讀/寫文件內容的首選方法嗎?

+0

如果(http://php.net/manual/en/book.curl.php)在服務器上啓用[cURL'']你可以將它轉移到本地文件系統,在本地操作文件。如果它沒有啓用,你很困難。 – DaveRandom 2012-04-18 12:12:29

+0

編輯:這些都是在調用PHP腳本在同一個Web服務器上的本地文件。有讀/寫文件內容的首選方法嗎? – RegEdit 2012-04-18 12:18:25

+0

嗯,如何使用他們的文件系統本地路徑,而不是http:URL? – mario 2012-04-18 12:20:53

回答

3

您可以使用curl來獲取遠程頁面。您可以將curl請求的結果存儲到變量並使用echo()來代替使​​用url包裝器來獲取內容。

理論上,你也可以eval()返回的數據。但是運行遠程獲取的PHP代碼具有巨大的安全風險,這樣包含的任何PHP代碼都可以從字面上做任何事情。 不要做!這同樣適用於allow_url_include太

+0

謝謝戈登。這些都是與調用php腳本相同的web服務器上的本地文件。有讀/寫文件內容的首選方法嗎? – RegEdit 2012-04-18 12:18:50

+0

如果要包含的文件位於同一臺服務器上,則只需直接包含()或打開()即可。不需要通過URL並添加以這種方式進行的開銷。 – GordonM 2012-04-18 12:21:11

+0

感謝您清除Gordon,我錯誤地將該文件調用爲http而不是ABSPATH。 – RegEdit 2012-04-18 12:52:22

1

如果您可以訪問到Web服務器,你可能必須要找到你的php.ini文件,例如:

/etc/php5/apache/php.ini 

,並使用這些選項:

; http://php.net/allow-url-fopen 
allow_url_fopen = On 

; http://php.net/allow-url-include 
allow_url_include = Off 

如果您使用託管帳戶,可以在控制面板上以交互方式提供這些選項。

第二種解決方案可能是使用cURL。我想你試圖用URL調用getimagesize。文檔瀏覽:http://php.net/manual/en/book.curl.php

$ch = curl_init('http://example.com/image.php'); 
$fp = fopen('/my/folder/flower.gif', 'wb'); 
curl_setopt($ch, CURLOPT_FILE, $fp); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_exec($ch); 
curl_close($ch); 
fclose($fp); 
相關問題