2015-04-23 87 views
1

我想獲取某個網站的源代碼,並通過搜索來查找字符串。我做了這樣的事情:preg match - on string vs on file_get_contents()

$source = file_get_contents('http://website.com'); 

preg_match('/foobar/', $source, $match); 

var_dump($match); 

源包含表達我期待已久,傾倒$source變量證明。但結果是一個空陣列。

的事情是,一切正常,結果是正確的,當我複製源,然後將其粘貼這樣的:

$source = <<<EOF 
    // paste here 
EOF; 

preg_match('/foobar/', $source, $match); 

var_dump($match); 

現在,它完美的作品。

什麼是錯,爲什麼會發生?謝謝!

+0

你試過'var_dump($ sourceFromUrl === $ sourceFromPasting);'檢查你的輸入是否相同?這應該是你的第一個檢查點 –

+0

仔細檢查你從file_get_contents('echo htmlentities($ source);')得到的字符串是你期望的。它可能會阻止php下載它的源代碼(用戶代理匹配,檢查會話),或者您看到的源代碼是從javascript生成的,file_get_contents不可訪問。 –

回答

0

做更多的調試。

打印出$source通過file_get_contents()得到它後,它會給你什麼?

很有可能您無法從網站獲取數據,這可能是它無法匹配正常表達的原因。

可能有以下幾個原因,例如您正在嘗試使用重定向的頁面或https,而file_get_contents()不是先進的來檢測它並獲取它。


可能的解決辦法是使用cURL更換file_get_contents()功能,它提供了更多的功能,甚至https獲取。

類似的東西has been solved here