2013-03-06 2 views
0

У меня есть скрипт PHP, который регистрируется на веб-сайте с завитом. Когда я запускаю скрипт в браузере, скрипт регистрируется в порядке. Когда я запускаю его через cronjob, он не входит в систему, поскольку файлы cookie не хранятся там, где я ожидал.Где хранить куки при запуске curl through cronjob?

Как хранить куки?


Это подходящая часть сценария. До этого URL-адрес определен ($ url) и данные для входа ($ post_string).

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

Вопрос отредактирован, чтобы отразить комментарии Wrikken-х и Colin Морелли ниже. Спасибо вам обоим!

+2

Что такое класс, который '$ getit' является экземпляром? Имеет ли он метод '__toString()'. Если да, то что возвращает '__toString()'? Etc и т. Д. Здесь отсутствуют некоторые ключевые компоненты. –

+1

Имея ограниченную информацию: вы, вероятно, получите другую страницу (проверьте '$ getit'). Вопрос в том, почему ... – Wrikken

+0

@ColinMorelli Я добавил еще код. Помогает ли? – 2013-03-06 19:55:45

ответ

0

При запуске скрипта из командной строки переменная $_SERVER['DOCUMENT_ROOT'] будет пуста (в конце концов, нет сервера, а также нет корня документа).

Это означает, что $_SERVER['DOCUMENT_ROOT'].'/verwaltung/cookie.txt' в конечном итоге решит '/verwaltung/cookie.txt' (и уведомление PHP). Этот каталог, вероятно, не существует (он находится непосредственно в корневой файловой системе: не должно быть ничего, кроме стандартных системных каталогов Unix), и ваш скрипт не сможет создать файл cookie (а затем не будет сохранять cookie, установленные cURL).

Вместо $_SERVER['DOCUMENT_ROOT'], можно, например, использовать . (текущий каталог), /tmp (должен быть доступен для записи всех пользователей - а также для чтения, будьте осторожны), __DIR__ (каталог РНР скрипт находится в) или любой другой каталог по вашему усмотрению, который не зависит от переменных сервера.

+0

Спасибо, @helmbert. Я прописал абсолютный путь к существующему файлу, и теперь он работает. – 2013-03-06 20:59:55

Смежные вопросы