2014-01-27 77 views
1

我剛開始學習php,我正在閱讀約fsockopen()。我試圖重複這本書中的一個例子,但是結果我得到一個沒有任何信息的空白頁面。php函數fsockopen()不起作用

<?php 
function get_content ($hostname, $path) 
{ 
    $line = ""; 
    $fp = fsockopen($hostname, 80, $errno, $errstr, 30); 
    if(!$fp) echo "$errstr ($errno)<br />\n"; 
    else 
    { 
     $headers = "GET $path HTTP/1.0\r\n"; 
     $headers .= "Host: $hostname\r\n"; 
     $headers .= "Connection: Close\r\n\r\n"; 
     fwrite($fp, $headers); 
     while (!feof($fp)) 
     { 
      $line .= fgets($fp, 1024); 
     } 
     fclose ($fp); 
    } 
    return $line; 

    $hostname = "www.php.net"; 
    $path = "/index.php"; 
    //set_time_limit(180); 
    echo get_content ($hostname, $path); 
} 
?> 

這段代碼有什麼問題,爲什麼它不起作用?

+0

'fsockopen()'所需的模塊/依賴關係沒有安裝。如果您啓用[PHP錯誤消息](http://www.mjdigital.co.uk/blog/php-display-errors-at-runtime/),它可能會告訴您它發生的致命錯誤。 – MackieeE

+0

如何檢查'fsockopen()'所需的模塊/依賴性是否已安裝? –

+0

總是如果你看到一個空白頁面,請檢查你的'apache錯誤日誌'(在* nix:/var/log/apache2/error.log)。另外,如果您想抓取特定網站的內容,請嘗試使用'PHP cURL'完成此操作:http://pl1.php.net/curl – ex3v

回答

3

return聲明後的行將永遠不會到達。

您可能想從函數中獲取函數的最後三行。

function get_content($hostname, $path) { 
    $line = ""; 
    $fp = fsockopen($hostname, 80, $errno, $errstr, 30); 
    if (!$fp) echo "$errstr ($errno)<br />\n"; 
    else { 
     $headers = "GET $path HTTP/1.0\r\n"; 
     $headers .= "Host: $hostname\r\n"; 
     $headers .= "Connection: Close\r\n\r\n"; 
     fwrite($fp, $headers); 
     while (!feof($fp)) { 
      $line .= fgets($fp, 1024); 
     } 
     fclose($fp); 
    } 

    return $line; 
} 

//Outside the function! 
$hostname = "www.php.net"; 
$path  = "/index.php"; 
//set_time_limit(180); 
echo get_content($hostname, $path); 
+0

非常感謝,您絕對正確,我的錯誤。 –

+3

@ truslivii.lev:當然,它會發生:)。使用現代IDE可以減輕這種影響。 (當我將你的代碼複製到PhpStorm時,它立即告訴我這些行不可訪問)。 –