0

更新されたスクリプト

Web ページにログインして、セッションをテキスト ファイルに保存しようとしています。

ログインは成功し、必要に応じてメンバー ページまたは他のページにリダイレクトされます。

しかし今、curl でファイルをダウンロードする必要があり、サーバーはFatal error: Out of memoryと言います

  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));

何か案が?

ありがとう

4

1 に答える 1

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)ではなくfilename()が必要です。これはlogin()関数内にあります。

更新
1回のセッションで複数のページを操作している場合は、次を追加してみてください。

curl_setopt($ch, CURLOPT_COOKIESESSION, TRUE); 
curl_setopt($ch, CURLOPT_COOKIE, session_name() . '=' . session_id()); 
于 2012-09-29T10:13:24.360 に答える