2017-08-11 82 views
-1

我試圖在本地運行一個PHP腳本,該腳本用wget颳去Google,並將HTML轉儲爲temp.html從PHP的shell_exec中調用wget不起作用

運行從終端這個命令正常工作:

wget -O temp.html http://www.google.ca 

從PHP運行此命令也能正常工作(所以它不是一個權限問題):

shell_exec('touch temp.html'); 

但是從運行PHP這樣做不工作(不創建temp.html):

shell_exec('wget -O temp.html http://www.google.ca'); 

有什麼建議嗎?包裝var_dump()中的最後一個命令輸出爲空。

謝謝!

+0

您是否可以更新您的問題以添加您遇到的特定錯誤? –

+0

我沒有收到任何錯誤。正如我在問題中指出的那樣,'shell_exec'命令不會創建文件'temp.html',其中包含「http:// www.google.ca」的內容。謝謝。 –

+0

wget是否安裝在服務器上? –

回答

-1

如何使用file_put_contents & file_get_contents而不是?這應該不用擔心wget

<?php 
    $filename = 'temp.html'; 
    $address = 'http://www.google.ca'; 
    file_put_contents($filename,file_get_contents($address)); 
?> 
+0

謝謝,這對Google有用,但我只是以Google爲例。我正在抓取的實際URL不適用於'file_get_contents'(服務器阻止請求 - 與cURL請求相同)。 –

0

man wget,用wget -O temp.html http://google.com需要的所有文件,將其連接在temp.html打印的一切,而不產生任何stdout所以PHP的shell_exec不返回任何東西(null)。

被抓網頁的內容應該存在於temp.html中,但shell_exec("wget ...")不會返回任何內容,因爲不會生成輸出。

正如你所提到的,你試圖抓取的網頁是行不通的,也許他們實施了某種機器人防護措施,以防止你正在嘗試。

編輯:您可以用-來代替stdout。因此,請嘗試使用shell_exec("wget -O - https://google.com");應將所請求頁面的內容返回給您的PHP腳本。

+0

感謝您的回答。如果網頁已經實現了某種機器人保護,那麼直接從終端運行'wget -O temp.html http:// www.whoever.com'也不起作用,但它確實......對嗎? –

+0

正確的是,如果有某種保護措施(即顯示一個瀏覽器檢查頁面或者假定爲bot的訪問者沒有任何內容),'wget'不應該返回你想要的內容/代碼/ HTML(根據我的經驗)。 – GxTruth

0

最簡單的解決方案是提供wget二進制文件的完整路徑,因爲看起來運行腳本的用戶沒有與您相同的$ PATH。