2012-09-29 43 views
0

更新腳本我如何使用cookie在遠程頁面上使用php curl下載?

我想登錄到網頁並將會話保存在文本文件中。

如果我需要,登錄成功並將我重定向到成員頁面或其他頁面。

但現在我需要下載的捲曲文件,服務器說致命錯誤:內存不足

ini_set("memory_limit","2048M"); //Limite 2GB 
    set_time_limit(0);     //Tiempo de transferencia ilimitada 

    //Definimos las variables de la pagina 
    $username = ""; 
    $password = ""; 
    $loginUrl = 'http://login.mysite.com/login.php'; 
    $loginFields = array('username' => $username, 'password' => $password); 

    //Ahora se ha iniciado la sesion y la sesion de la cookie ha sido generada 
    getUrl($loginUrl, 'post', $loginFields); 

    //Cargamos la pagina que queremos ver 
    $remote_page_content = getUrl('http://miembros.mysite.com/3098'); 
    echo $remote_page_content; 

    //Simple funcion para acceder 
    function getUrl($url, $method='', $vars='') 
    { 
     $ch = curl_init(); 
     if ($method == 'post') 
     { 
     curl_setopt ($ch, CURLOPT_POST, 1); 
     curl_setopt ($ch, CURLOPT_POSTFIELDS, $vars); 
     } 

     curl_setopt ($ch, CURLOPT_URL, $url); 
     curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7"); 
     curl_setopt ($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); 
     curl_setopt ($ch, CURLOPT_COOKIEFILE, 'cookie.txt'); 
     curl_setopt ($ch, CURLOPT_MAXREDIRS, 10); 
     curl_setopt ($ch, CURLOPT_TIMEOUT, 0); 
     curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 0); 
     curl_setopt ($ch, CURLOPT_FAILONERROR, true); 
     curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, true); 
     curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, false); 
     $buffer = curl_exec($ch); 
     curl_close ($ch); 

     return $buffer; 
    } 

,所以我叫下載文件與此:

//Cargamos la pagina que queremos ver 
    $remote_page_content = getUrl('http://content.mysite.com/PSP.mp4/'); 
    file_put_contents('/downloads/video.mp4',file_get_contents($remote_page_content)); 

任何想法?

感謝

+0

什麼第一次調用後是在cookie.txt? – dmitry

+0

更新的Cookie文件 –

回答

0

嘗試更換您的以下行:

curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookies); 
curl_setopt ($ch, CURLOPT_COOKIEFILE, $cookies); 

這一個:

curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookie); 
curl_setopt ($ch, CURLOPT_COOKIEFILE, $cookie); 

,因爲它似乎你在變量輸入有誤,您想要的文件名($cookie )不是已經關閉的描述符($cookies)。這是你的login()函數。

UPDATE
如果你有多個頁面中的一個會議期間的工作,嘗試添加此:

curl_setopt($ch, CURLOPT_COOKIESESSION, TRUE); 
curl_setopt($ch, CURLOPT_COOKIE, session_name() . '=' . session_id()); 
+0

但在此模式下cookie不存儲在Cookie文件中 –

+0

爲什麼不?你試過了嗎? CURLOPT_COOKIEJAR和CURLOPT_COOKIEFILE需要一個文件名,這就是$ cookie所具有的。 – Nelson

+0

您的問題可能是由於從同一個會話中獲取多個頁面,我已經使用一些可以嘗試的選項更新了我的答案。 – Nelson