Запрос cURL в PHP-скрипте работает через браузер, но не CRONPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Запрос cURL в PHP-скрипте работает через браузер, но не CRON

Сообщение Anonymous »

Я знаю, что по этому поводу есть вопросы, но пока ни один из них не помог мне решить мою проблему.

У меня есть сценарий PHP, задача которого — отправлять запланированные электронные письма. Он делает это путем вызова веб-службы, которой я управляю, через cURL.

Запустите в браузере, все работает нормально. Запускаем через CRON, ответ cURL пустой. Он никогда не достигает веб-службы; Я знаю это, потому что у меня был WS, записывающий текстовый файл при обращении к нему. Это происходит, если вы получаете доступ через браузер, а не через CRON.

Я знаю, что CRON работает в другой среде, и я не полагаюсь на какие-либо переменные среды, например. $_СЕРВЕР. Путь к require() также не является проблемой, поскольку он успешно извлекает данные из этого файла для подключения к БД.

Этот вопрос предложил добавить следующие параметры cURL, что я и сделал, но безрезультатно:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);


Вот мой PHP-скрипт:

//prep
define('WS_URL', 'http://mywebservicedomain.com/index.php/web_service');
require '../application/config/database.php';
$db = new mysqli($db['default']['hostname'], $db['default']['username'], $db['default']['password'], $db['default']['database']) or die('failed to connect to DB');

//get scheduled e-mails
$res = $db->query('SELECT * FROM _cron_emails WHERE send_when < NOW()');

//process each...
while ($email_arr = $res->fetch_assoc()) {

//...get API connection info
$api_accnt = $db->query($sql = 'SELECT id, secret FROM _api_accounts WHERE project = "'.$email_arr['project'].'"');
$api_accnt = $api_accnt->fetch_assoc();

//...recreate $_POST env
$tmp = json_decode($email_arr['post_vars'], 1);
$_POST = array();
foreach($tmp as $key => $val) $_POST[$key] = !is_array($val) ? $val : implode(',', $val);

//...call API to send e-mail
$ch = curl_init($url = WS_URL.'/send_scheduled_email/'.$email_arr['email_id'].'/'.$email_arr['store_id'].'/'.$email_arr['item_id']);
curl_setopt_array($ch, array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_SAFE_UPLOAD => true,
CURLOPT_SSL_VERIFYHOST => 1, // 1, // array_merge($_POST, array(
'api_key' => $api_accnt['id'],
'api_secret' => $api_accnt['secret'],
))
));
$resp = curl_exec($ch); //query('DELETE FROM _cron_emails WHERE id = '.$email_arr['id'].' LIMIT 1');

}


Кто-нибудь знает, почему ему не удается подключиться к моему веб-сервису через cURL только при запуске в CRON?

Вот задание CRON:

/usr/bin/php /home/desyn/public_html/cron/send_scheduled_emails.php


Подробнее здесь: https://stackoverflow.com/questions/475 ... t-not-cron
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»