Я знаю, что по этому поводу есть вопросы, но пока ни один из них не помог мне решить мою проблему.
У меня есть сценарий 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
Запрос cURL в PHP-скрипте работает через браузер, но не CRON ⇐ Php
Кемеровские программисты php общаются здесь
-
Anonymous
1732440933
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
Подробнее здесь: [url]https://stackoverflow.com/questions/47511378/curl-request-in-php-script-works-via-browser-but-not-cron[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия