2011-06-14 118 views
0

我用這個函數成功下載了SWF文件(flash遊戲)。當我爲一個特定的站點使用這個腳本時,它會下載所有的遊戲(我告訴腳本從列表中下載4個遊戲),確切大小爲299bytes?我試着用Google Chrome下載這些遊戲,並且下載成功了。在我使用的CURL函數中是否存在缺失或者下載算法不夠好?任何幫助將不勝感激。使用PHP和cURL下載文件

function saveFlash($fullPaths,$folder,$gamenames,$i){ 
     $curl = curl_init($fullPaths[$i]); 
     curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
     //Create a new file in the given folder 
     $fp = fopen($folder."/".$gamenames[$i].".swf", 'w'); 
      if ($fp == FALSE){ 
       echo "File not opened<br>";} 
     //Ask cURL to write the contents to a file 
     curl_setopt($curl, CURLOPT_FILE, $fp); 
     //Execute the cURL session 
     curl_exec ($curl); 
     //Close cURL session and file 
     curl_close ($curl); 
     fclose($fp); 
    } 

文本編輯提供了以下

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> 
<html><head> 
<title>302 Found</title> 
</head><body> 
<h1>Found</h1> 
<p>The document has moved <a href="http://www.freeonlinegames.com/">here</a>.</p> 
<hr> 
<address>Apache/2.2.3 (CentOS) Server at freeonlinegames.com Port 80</address> 
</body></html> 
+2

你用文本編輯器看過那些299字節的文件嗎?很可能它會是「對不起,不允許直接訪問」的某種錯誤消息。 – 2011-06-14 16:12:49

+2

您的腳本被阻止。查看返回的數據(應該是HTML)是有原因的。 – hakre 2011-06-14 16:13:09

+0

它說,該文件已移動 – George 2011-06-14 16:14:34

回答

1

你要設置CURLOPT_FOLLOWLOCATION以使其遵循重定向。

您可能還想設置一個CURLOPT_MAXREDIRS,以避免重定向失控。

1

你得到的錯誤是一種常見的方式,告訴你不允許盜鏈。如果您只是想要下載SWF,則需要設置引用者。

curl_setopt($ch, CURLOPT_REFERER, 'http://urlofpagetheswfwasfoundon'); 

如果在此之後它仍然不起作用,則可能需要設置適當的用戶代理字符串。

curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 Something Something'); 

另外,要確保你可以做你正在嘗試做的事情。從別人的網站上刪除內容非常不理想,而且通常是非法的。

+0

真想測試,因爲知識的代碼,這行,但有可能這個網站跟蹤我的IP,並填寫針對我的訴訟?作爲一個首發的Web開發人員,我應該知道如何防止CURL攻擊我的網站。 – George 2011-06-14 16:34:00

+0

當然,如果你認爲一分鐘我們會幫助你違法,那麼你在錯誤的網站,並不歡迎在這裏。我提供了這個例子來幫助你學習,而不是幫你成爲一個屁股。 – Brad 2011-06-14 16:35:20

+0

謝謝。我不想成爲一個屁股。瞭解更多關於使用CURL和CURL防禦的信息並不是什麼錯誤。應該在朋友的PC上測試我的服務器上的這些代碼。 – George 2011-06-14 16:39:30