2009-11-26 170 views
3

在我的虛擬主機服務器上,file_get_contents()功能被禁用。我正在尋找替代品。請幫助函數file_get_contents()有沒有其他選擇?

+0

此外FREAD()被禁用 – Rajasekar 2009-11-26 15:45:05

+0

我不需要讀取URL的內容。我只需要執行或觸發網址。對於那個任何其他功能呢? – Rajasekar 2009-11-26 15:50:13

+1

正如我在我的回答中寫的,使用cURL打開url。這正是你需要的。 – 2009-11-26 16:06:30

回答

4

file_get_contents()函數幾乎執行以下操作:

$filename = "/usr/local/something.txt"; 
$handle = fopen($filename, "r"); 
$contents = fread($handle, filesize($filename)); 
fclose($handle); 

由於file_get_contents()函數是殘疾人,我敢確信上面不會有工作,要麼雖然。

取決於你想讀什麼,在我的經驗主機通常禁用遠程文件讀取,你可能有其他的選擇。如果您嘗試讀取遠程文件(通過網絡,即http等),則可以查看cURL庫函數

1

我假設你正在試圖通過HTTP遠程訪問文件://或ftp://。

從理論上講,有像fread()的替代品,如果一切都失敗了,fsockopen()。 但是,如果供應商擅長他們的工作,那麼他們也會被禁用。

0

使用PEAR package Compat。這就像使用PHP編碼解決方案正式取代原生PHP函數一樣。

require_once 'PHP/Compat.php'; 
PHP_Compat::loadFunction('file_get_contents'); 

或者,如果你不想使用這個類,你可以手動加載它。

require_once 'PHP/Compat/Function/file_put_contents.php'; 

  • compat的所有功能均由if(!function_exists())包裹所以它真的失敗保存,如果你的網絡託管商升級服務器功能後。
  • 所有函數都可以像原生PHP一樣使用,並且相關常量也可用!
  • List of all available functions
2

最明顯的原因file_get_contents()被禁止是因爲它加載主存儲器中的整個文件第一。如果您的託管服務商向您分配了非常低的內存限制,則代碼code_burgar可能會造成問題。
作爲一般規則,只有在確定要加載的文件很小時才使用file_get_contents()(或 - 替換)。通過SplFileObject,您可以通過一個方便的界面逐行掃描文件。如果你的文件很大,請使用它。

+0

我不需要閱讀url的內容。我只需要執行或觸發網址。對於那個任何其他功能呢? – Rajasekar 2009-11-26 15:51:05

+3

如果你只需要觸發這個url,並且你對這個反應不感興趣,'get_headers($ url)'就足夠了。 – 2009-11-26 16:00:22

0

如果你正在嘗試做的是觸發一個給定的URL命中,並不需要閱讀,您可以使用捲曲輸出()提供您的虛擬主機有它的服務器上啓用。

文檔here給出呼叫使用捲曲的URL的一個例子。

0

如果一切都失敗了,總會有cURL。安裝它的可能性很大。

2

試試這個代碼:

$ch = curl_init(); 
$timeout = 5; // set to zero for no timeout 
curl_setopt ($ch, CURLOPT_URL, $url); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
$content = curl_exec($ch); 
curl_close($ch); 
+0

將運行在php 5.0或更高版本 – raja 2010-08-24 08:47:10

+0

其工作感謝 – 2012-11-13 05:12:55

+0

這是一個節省時間在我目前的情況...謝謝。 – Underdog 2014-10-23 07:37:06

3

一切的位。

function ff_get($f) { 
     if (!file_exists($f)) { return false; } 
     $result = @file_get_contents($f); 
     if ($result) { return $result; } 
     else { 
      $handle = @fopen($f, "r"); 
      $contents = @fread($handle, @filesize($f)); 
      @fclose($handle); 
      if ($contents) { return $contents; } 
      else if (!function_exists('curl_init')) { return false; } 
      else { 
       $ch = @curl_init(); 
       @curl_setopt($ch, CURLOPT_URL, $f); 
       @curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
       $output = @curl_exec($ch); 
       @curl_close($ch); 
       if ($output) { return $output; } 
       else { return false; }}}} 
相關問題