curl — выполнение скрипта PHP с использованием задания cron

У меня есть сценарий cronStats.php, который извлекает данные из инструмента автоматического поиска Apple (данные о загрузках приложений, регионе и т. Д.) И заполняет базу данных для последующего доступа.

Когда скрипт выполняется в браузере, все работает правильно. Но при использовании запланированного задания cron для выполнения скрипта возникает ошибка.

Вот соответствующий код:

function pullITCData($username,$password,$VND,$date) {

$fields_string = "USERNAME=" . urlencode($username);
$fields_string .= "&PASSWORD=" . urlencode($password);
$fields_string .= "&VNDNUMBER=" . $VND;
$fields_string .= "&TYPEOFREPORT=Sales";
$fields_string .= "&DATETYPE=Daily";
$fields_string .= "&REPORTTYPE=Summary";
$fields_string .= "&REPORTDATE=$date";

$fn = "dailyStat_" . $date . "_" . $VND;
$filename = $fn . ".gz";

//$abFN = __DIR__ . "/" . $fn;
//$abFilename = __DIR__ . "/" . $filename;

$abFN = $fn;
$abFilename = $filename;

$ch = curl_init();
echo("<br>abFN url is $abFN");
echo("<br>abFilename url is $abFilename");
$fp = fopen($abFilename, "w+");

//set the url, number of POST vars, POST data
curl_setopt($ch, CURLOPT_URL, 'https://reportingitc.apple.com/autoingestion.tft');
curl_setopt($ch, CURLOPT_POST, 7);
curl_setopt($ch, CURLOPT_POSTFIELDS,$fields_string);
curl_setopt($ch, CURLOPT_FILE, $fp);

//execute post
$contents = curl_exec ($ch);
$fileCreated = false;

if ($contents === false) {
echo("<br> no contents");
} else {
echo("<br>contents found");
}fclose($fp);
curl_close($ch);

//delete the opened file
if ($fileCreated == true){
unlink("$abFN");
}

}

Я удалил код для краткости. По сути, я передаю строку переменных в инструмент загрузки Apple, который затем возвращается с файлом .txt.gz (который затем открывается и анализируется, а не показывается здесь).

Когда браузер выполняется, я получаю оператор «Contents Found», но через Cron Job оператор «No Contents» означает, что CURL_EXEC по какой-то причине дает сбой.

Я думаю, что файл .GZ не может быть создан, потому что задание Cron выполняется из другого каталога (?). Я попытался установить абсолютный URL для записи .txt.gz, но это также не удалось:

[function.fopen]: failed to open stream: HTTP wrapper does not support writeable connections in

Я в растерянности относительно того, как продолжить. Есть идеи?

РЕДАКТИРОВАТЬ:
спасибо за ваш отзыв, это ценится.
Основано на команде cron BojanT:

/web/cgi-bin/php5 cd "$HOME/html/path/to/php/cron/ && php cronStats.php > cron.log 2>&1

Я получаю следующую ошибку:

/bin/sh: -c: line 0: unexpected EOF while looking for matching `"'
/bin/sh: -c: line 1: syntax error: unexpected end of file

РЕДАКТИРОВАТЬ 2 — Работа вокруг:
метод обхода, который работает для любого в подобной ситуации. Это не элегантно / эффективно, и на самом деле не решает проблему, но для чего стоит: настройте работу cron в другом файле: например, runCron.php:

 <?php

executeScript();

function executeScript() {
file_get_contents("http://website.com/path/to/php/cron/cronStats.php");
informOfExecution();
}

который тогда выполняет фактический файл в абсолютном URL. Метод informOfExecution () отправляет мне электронное письмо с уведомлением об обновлении. было бы хорошо, если бы cron работал с файлом напрямую, но сделать это лучше, чем идеально. Спасибо всем.

0

Решение

Перейдите в каталог вашего файла с помощью «cd», а затем запустите ваш файл.
Пример:

* * * * * cd /f1/f2/f3/f4/ && php thing.php >> /home/output/outputs.txt
2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector