Ошибка сервера 500 в file_get_contents() в foreach

#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. где вы это изменили?