2011-04-14 1 views
0

컬을 사용하여 쿠키를 전달하는 데 다소 흥미로운 문제가 있습니다. 내 회사의 대기열에 로그인하는 스크립트를 작성한 다음 성공적인 로그인에서 쿠키를 가져옵니다. 나중에 스크립트는 시스템에 쿼리하고 출력을 구문 분석하기 위해 쿠키를 회수합니다. 이 스크립트는 localhost에서 완벽하게 작동하지만 회사의 서버로 마이그레이션하지는 않습니다. 그것은 쿠키 파일을 만들지 만 모든 파일 크기 = 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);