#php #magento
#php #magento
Вопрос:
У меня есть постоянный URL-адрес, который представляет собой URL-адрес, к которому вы добавляете номера артикулов в конце, как это 34342323232|23232|2323232|232232
.
Итак, я написал скрипт, который извлекает все номера / артикулы элементов из базы данных Magento и запускает 25 артикулов в конце URL-адреса, который затем используется file_get_contents
для получения данных.
Я разделил массив на куски, поскольку URL-адрес может обрабатывать только около 25 одновременно.
Он запускается в цикле foreach, бит базы данных работает нормально, скрипт, похоже, возвращает ошибку 500 при запуске foreach
несколько раз.
Я пробовал несколько вещей, включение max_input_vars и т. Д., Похоже, Не помогает.
Это будет выполняться каждые полчаса или около того и запускать 1000 продуктов, есть ли лучший способ получить данные из URL? более быстрый способ, который не приведет к сбою сервера?
ниже приведен код цикла foreach.
$updatedStock = array();
// Split Array in to chunks of 25
foreach(array_chunk($productSkus_single, 25) as $sku_chunk) {
// Add sku string to live url and get contents
$LiveFeedStock = file_get_contents($stockFeedUrl . implode("|", $sku_chunk));
// Turn file contents in to an array and Remove <br/> add to array
$updatedStock[] = array_values(array_filter(explode("<br/>",$LiveFeedStock), 'strlen' ));
}
если вам нужна остальная часть кода, я могу предоставить его, но, похоже, именно здесь он терпит неудачу.
я знаю о cURL, я попробовал несколько решений, но, похоже, не могу заставить его работать хорошо, но опять же, я действительно этого не понимаю.
я уже просматривал темы здесь и перепробовал множество решений, но безуспешно.
Заранее благодарю.
Обновить
Отображаются журналы ошибок
mod_fcgid: read data timeout in 40 seconds
End of script output before headers: index.php
mod_fcgid: process 18805 graceful kill fail, sending SIGKILL
Комментарии:
1. Возможно, что
set_time_limit()
сбой. Попробуйтеset_time_limit(0);
в своей функции и посмотрите, поможет ли это.2. Спасибо, куда мне это поместить? поскольку у меня нет set_time_limit в моем коде.
3. Вы можете попробовать в начале своей функции. Также убедитесь, что
file_get_content()
это включено. Некоторые серверы отключили его по некоторым соображениям безопасности, и если это так, вам следует использоватьcURL
4. Не имело никакого значения, я поместил его в начало foreach и попробовал в начале кода. я получаю внутреннюю ошибку сервера, file_get_contents() работает так, как работает только с одним запросом.
5. Можете ли вы проверить
allow_url_fopen
, включен ли он в php.ini.
Ответ №1:
я исправил эту ошибку, внеся следующие изменения
ProcessLifeTime 7200
IPCConnectTimeout 30
IPCCommTimeout 60
FcgidMaxRequestsPerProcess 10000
FcgidConnectTimeout 600
FcgidIOTimeout 10000
Кажется, теперь работает и работает нормально.
Комментарии:
1. где вы это изменили?