2011-04-14 65 views
0

我使用curl傳遞cookie有一個相當有趣的問題。我有一個腳本登錄到我公司的排隊系統,然後從成功登錄中抓取cookie。之後,腳本會回憶這些cookie來查詢系統並解析輸出。該腳本完美地在localhost上運行,但將其遷移到公司的服務器上卻不行。它正在創建cookie文件,但所有文件大小= 0字節。我認爲這是一個權限問題,但我沒有看到(我竟然chmod 777文件)。最奇怪的是我可以使用fwrite()添加到任何文件。我不確定從哪裏開始調試,所以我希望你們中的一個人可能有一個想法。下面是相關的代碼片段:PHP CURLOPT_COOKIEFILE/CURLOPT_COOKIEJAR似乎沒有在遠程服務器上工作

[syntax=php] 

main class{ 

include_once('../shared_data/cquserdata.php'); 
$ckfile_name = tempnam('temp/', sha1('CqAuth')); 
$ckfile = fopen($ckfile_name, 'w') or die('Derp...open...nooooooooo!'); 

cqUserData::cqLogin($credentials['username'],$credentials['pass'],$ckfile); 

(skip a few thousand lines) 
$puname = sanitizers::sanitize($_POST['puname']); //sanitize post input 
$manager = cqUserData::getManager($puname, $ckfile); 


} 

cqLogin($username, $pass, $ckfile){ 

$url = 'URL'; 

     $options = array(

      CURLOPT_RETURNTRANSFER => true,  // return web page 
      CURLOPT_HEADER   => false, // don't return headers 
      CURLOPT_FOLLOWLOCATION => true,  // follow redirects 
      CURLOPT_ENCODING  => "",  // handle all encodings 
      CURLOPT_AUTOREFERER => true,  // set referer on redirect 
      CURLOPT_CONNECTTIMEOUT => 120,  // timeout on connect 
      CURLOPT_TIMEOUT  => 120,  // timeout on response 
      CURLOPT_MAXREDIRS  => 10,  // stop after 10 redirects 
      CURLOPT_SSL_VERIFYHOST => 0, 
      CURLOPT_SSL_VERIFYPEER => 0, 
      CURLOPT_USERAGENT  => 'uuberness', 
      CURLOPT_COOKIEJAR  => $ckfile, 
      CURLOPT_POSTFIELDS  => "redirect=&username=$username&password=$pass" //derp 

     ); 

     $ch  = curl_init($url); 
     curl_setopt_array($ch, $options); 
     $content = curl_exec($ch); 
     $err  = curl_errno($ch); 
     $errmsg = curl_error($ch); 
     $header = curl_getinfo($ch); 
     curl_close($ch); 

     return true; 

} 

getManager($user,$ckfile){ 

$url = "URL"'; 

     $options = array(

      CURLOPT_RETURNTRANSFER => true,  // return web page 
      CURLOPT_HEADER   => false, // don't return headers 
      CURLOPT_FOLLOWLOCATION => true,  // follow redirects 
      CURLOPT_ENCODING  => "",  // handle all encodings 
      CURLOPT_AUTOREFERER => true,  // set referer on redirect 
      CURLOPT_CONNECTTIMEOUT => 120,  // timeout on connect 
      CURLOPT_TIMEOUT  => 120,  // timeout on response 
      CURLOPT_MAXREDIRS  => 10,  // stop after 10 redirects 
      CURLOPT_SSL_VERIFYHOST => 0, 
      CURLOPT_SSL_VERIFYPEER => 0, 
      CURLOPT_USERAGENT  => 'uuberness', 
      CURLOPT_COOKIEFILE  => $ckfile, 
      CURLOPT_POSTFIELDS  => "username=$user&usernamecheck=1" //derp 

     ); 

     $ch  = curl_init($url); 
     curl_setopt_array($ch, $options); 

     $content = curl_exec($ch); 
     $err  = curl_errno($ch); 
     $errmsg = curl_error($ch); 
     $header = curl_getinfo($ch); 

     curl_close($ch); 

     $header['errno'] = $err; 
     $header['errmsg'] = $errmsg; 
     $header['content'] = $content; 
     $header['data'] = $data; 

     $doc = new DOMDocument; 

     $doc->loadHTML($content); 
     $doc->preserveWhiteSpace = false; 
     $tables = $doc->getElementsByTagName('table'); 

     foreach($tables as $table){ 

      ***Code excluded, loops rows to find correct, then defines manager** 

      $manager = $manager[1]; 


     } 

     return $manager; 

} 

[/syntax] 

在這一點上,我想它可能是一個好主意,試圖解析只爲餅乾頭,並與他們合作....但就是少比理想。任何建議,不勝感激:D

謝謝!

回答

1

問候,

所以我想清楚是什麼問題。我用fopen()打開文件,然後將文件處理程序傳遞給cURL。我應該做的是將完整的文件路徑+名稱傳遞給cURL。已更正的部分代碼:

$ckfile = dirname(__FILE__) . "/". sha1($username);