2012-01-27 160 views
6

它可以在Xampp的localhost上完美工作,但是當我在我的服務器(host-ed.net)上嘗試它時,fopen無法打開任何URL,它只適用於沒有http的文件。fopen在我的服務器上不能正常工作

<?php 
$file="http://www.google.es"; 
$gestor = fopen($file, "r") or die ("Nothing"); 
?> 

在我的服務器上用這段代碼顯示Nothing。可以是任何在php.ini?

編輯:在php.ini:allow_url_fopen選項=在

編輯:它解決了。我的服務器禁用了它,但現在它已啓用。感謝您的答案。

回答

8

的fopen無法打開任何URL

檢查allow_url_fopen php.ini setting的價值:

var_dump(ini_get('allow_url_fopen')); 

這也可能是假的。您需要與您的虛擬主機通話,或嘗試其他方法。 Mabye CURL已啓用?

您還應該檢查您的error_reportingdisplay_errors值。 PHP應該大聲抱怨無法打開該URL。在開發代碼的時候,你會想把它們都變成完整的,所以你可以更容易地理解錯誤。

+0

對不起,我忘了寫它......沒關係。 allow_url_fopen = On – Fischer 2012-01-27 19:15:02

+0

在這種情況下,您需要檢查錯誤報告級別並確保顯示錯誤。然後,PHP可以告訴你實際發生了什麼問題。 – Charles 2012-01-27 19:16:04

2

用於與fopen打開URL許可由所述php.ini設置allow_url_fopen控制。您可以使用phpinfo()查看您當前的設置,它將轉儲包含所有服務器設置的html文檔。

0

由於http://php.net/manual/en/function.fopen.php狀態,

如果文件名的形式是「方案:// ......」,它被認爲是一個URL,PHP將搜索協議處理器(也被稱爲包裝)的計劃。如果沒有註冊該協議的包裝器,PHP將發出通知幫助您跟蹤腳本中的潛在問題,然後像文件名指定常規文件一樣繼續。

因此,我會假設沒有註冊包裝的url,並且php將它當作普通文件名來處理,該文件名不存在。

0

嘗試捲曲,它會工作,如果它安裝在該Web服務器上。

0

你有免費的託管帳戶?大多數託管服務限制免費帳戶的傳出連接以防止濫用。試試這個:

$fp = fsockopen("some.alive.site", 80, $errno, $errstr, 30); 
if (!$fp) { 
    echo "$errstr ($errno)<br />\n"; 
} else { 
    echo "Everything is OK"; 
    fclose($fp); 
} 

如果你會看到一個錯誤消息 - 你不允許進行傳出連接。

0

如果您正在使用PHP-FPM,還請檢查pool.d/中的配置文件。PHP-FPM池可以通過使用php_admin_flagphp_admin_valuephp_flagphp_value重寫PHP設置。 (我們在Ubuntu 16 vps上遇到過這個問題)