2

我每分钟都设置了一个 curl cron 调用,当在我的 php db 请求中没有涉及 cookie 变量时,它可以完美运行:

$stmt4= $dbh->query("SELECT * FROM schedule_confs WHERE uyi=0  
AND callable=1 AND id_admin=2 "); 

如果查询涉及这样的 cookie:

 $id_user_conecte = Zend_Registry::get("iduser");   

$stmt4= $dbh->query("SELECT * FROM schedule_confs WHERE uyi=0  
AND callable=1 AND id_admin=".$id_user_conecte." "); 

这将不起作用,因为$id_user_conecte未检测到变量,因此没有数据库请求,顺便说一下,我正在使用 zend。如果我只是 echo$id_user_conecte它可以工作,那么我的 zend 控制器就没有问题。这是正常的,带有 curl 的 cron 没有检测到文档中的 cookie 还是我遗漏了什么?

4

1 回答 1

0

我想你应该在你的 CURL 请求中设置 cookie

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://blog.yousoft.ru/');
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIE,$cookie);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_USERAGENT, 'PHP Bot (http://blog.yousoft.ru)');
$data = curl_exec($ch);
$header=substr($data,0,curl_getinfo($ch,CURLINFO_HEADER_SIZE));
$body=substr($data,curl_getinfo($ch,CURLINFO_HEADER_SIZE));
preg_match_all("/Set-Cookie: (.*?)=(.*?);/i",$header,$res);
$cookie='';
foreach ($res[1] as $key => $value) {
 $cookie.= $value.'='.$res[2][$key].'; ';
};
curl_close($ch);

或者

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://blog.yousoft.ru/');
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt");
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_USERAGENT, 'PHP Bot (http://blog.yousoft.ru)');
$data = curl_exec($ch);
curl_close($ch);

参考(俄语):http ://blog.yousoft.ru/2010/03/31/ispolzuem-curl-php-chast-4-rabotaem-s-cookies-2-sposoba/

于 2012-10-26T11:06:54.847 回答