Php 在cronjob中运行curl时,在何处存储cookie?
我有一个PHP脚本,可以使用curl登录到一个网站。当我在浏览器中运行脚本时,脚本会正常登录。当我通过cronjob运行它时,它不会登录,因为cookie没有存储在我期望的位置 我如何储存饼干Php 在cronjob中运行curl时,在何处存储cookie?,php,cookies,crontab,Php,Cookies,Crontab,我有一个PHP脚本,可以使用curl登录到一个网站。当我在浏览器中运行脚本时,脚本会正常登录。当我通过cronjob运行它时,它不会登录,因为cookie没有存储在我期望的位置 我如何储存饼干 这是脚本的相关部分。在此之前,定义URL($URL)和登录数据($post_字符串) 问题经过编辑,以反映以下Wrikken和Colin Morelli的评论。谢谢你们两位 从命令行运行脚本时,$\u SERVER['DOCUMENT\u ROOT']变量将为空(毕竟,没有服务器,也没有文档根) 这意
这是脚本的相关部分。在此之前,定义URL($URL)和登录数据($post_字符串)
问题经过编辑,以反映以下Wrikken和Colin Morelli的评论。谢谢你们两位 从命令行运行脚本时,
$\u SERVER['DOCUMENT\u ROOT']
变量将为空(毕竟,没有服务器,也没有文档根)
这意味着$\u服务器['DOCUMENT\u ROOT']./verwaltung/cookie.txt'
最终将解析为'/verwaltung/cookie.txt'
(以及PHP通知)。此目录可能不存在(它直接位于根文件系统中;除了默认的Unix系统目录之外,不应该有任何其他目录),并且您的脚本将无法创建cookie文件(随后,不会保存cURL设置的任何cookie)
例如,您可以使用
(当前目录)、/tmp
(所有用户都应该可以编写,也应该可读!)、\uu目录(PHP脚本所在的目录),而不是$\u服务器['DOCUMENT\u ROOT']
或任何其他不依赖于服务器变量的目录。什么是$getit
的实例类?它是否有\uuu toString()
方法。如果是,那么\uu toString()
返回什么?等等,等等。我们缺少一些关键组件。由于可用信息有限:您可能会获得另一个页面(检查$getit
)。问题是为什么…@ColinMorelli我添加了更多的代码。有帮助吗?@Wrikken我检查了$getit(通过将输出邮寄给我自己),它包含我需要解析的页面,没有问题。脚本在preg\u match\u all之前都很好。@您确定得到了想要的页面吗?因为我可以保证$\u SERVER['DOCUMENT\u ROOT']
不是您在命令行中运行时在curl类中所期望的那样;)谢谢你,赫尔姆伯特。我详细说明了现有文件的绝对路径,现在它可以工作了。
class curl {
function __construct($use = 1) {
$this->ch = curl_init();
if($use = 1) {
curl_setopt ($this->ch, CURLOPT_POST, 1);
curl_setopt ($this->ch, CURLOPT_COOKIEJAR, $_SERVER['DOCUMENT_ROOT'].'/verwaltung/cookie.txt');
curl_setopt ($this->ch, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT'].'/verwaltung/cookie.txt');
curl_setopt ($this->ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($this->ch, CURLOPT_RETURNTRANSFER, 1);
} else {
return 'There is the possibility, that this script wont work';
}
}
function first_connect($loginform,$logindata) {
curl_setopt($this->ch, CURLOPT_URL, $loginform);
curl_setopt ($this->ch, CURLOPT_POSTFIELDS, $logindata);
}
function store() {
$store = curl_exec ($this->ch);
}
function execute($page) {
curl_setopt($this->ch, CURLOPT_URL, $page);
$this->content = curl_exec ($this->ch);
}
function close() {
curl_close ($this->ch);
}
function __toString() {
return $this->content;
}
}
$getit = new curl();
$getit->first_connect($url, $post_string);
$getit->store();
$getit->execute($url);
$getit->close();