Как диагностировать ошибки загрузки файлов в SilverStripe, работающем на Apache

php apache file-upload silverstripe

249 просмотра

1 ответ

Я сталкиваюсь с довольно распространенной ситуацией, если судить по вопросам на SO или форумах SilverStripe: загрузка файлов не удалась.

Однако, похоже, моя ситуация проистекает из проблемы, которую я еще не встречал в Интернете; Из прочтения других вопросов и множества статей в блогах или веток форума я исключил:

  • Проблемы с разрешениями
  • upload_max_filesizeи post_max_sizeв конфигурации PHP (оба установлены на 8M)
  • LimitRequestBody в конфигурации Apache (значение по умолчанию 0, что означает «без ограничений»)

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

Скриншот страницы загрузки файла в SilverStripe

Я также создал ветку на форумах SilverStripe по этой проблеме, но у меня мало надежд на то, что мне удастся решить проблему там.

Я настроил контрольные точки в Upload, UploadFieldи Fileклассах, и вышел через код в течение нескольких часов без успеха в определении причины ошибки.

До сих пор я обнаружил, что любой файл выше 128 КБ вызывает внутреннюю ошибку сервера. Любой файл ниже этого порогового размера загружается как положено.

Все журналы (Apache, PHP, SilverStripe) полностью отключаются при возникновении этой ошибки.

Разрешение кажется маловероятным, потому что:

  • PHP работает в режиме Fast-CGI как пользователь ( web1), созданный ISPConfig
  • Apache работает как пользователь apache:apache
  • Я добавил apacheв группу пользователей, так что groups web1дает мне web1 : client1 sshusersи groups apacheдает мнеapache : apache ispapps ispconfig client1
  • папка загрузки ( assets) принадлежит web1:client1и имеет разрешения 775
  • временная папка загрузки ( upload_tmp_dir) принадлежит web1:client1и имеет разрешения 775.

Я считаю, что то, что я ищу, - это способ каким-то образом получить информацию о том, где и почему загрузка не удалась. Можно ли установить уровень логики Apache на «debug» или «trace»?

ПРИМЕЧАНИЕ: запись в «Похожие вопросы» привела меня к этому ответу , который намекает на то, SSLRenegBufferSizeчто по умолчанию он составляет ровно 128 КБ. К сожалению, протокол HTTPS или HTTP не имеет никакого влияния: проблема обнаруживается.

[EDIT] Позже я установил LogLevelдирективу, traceно у меня все еще не было сообщений об этой ошибке в журналах сервера.

Автор: AbVog Источник Размещён: 08.11.2019 11:27

Ответы (1)


0 плюса

Решение

Быстрый поиск в Google привел меня к следующим статьям:

Те предлагают проверить FcgidMaxRequestLenзначение настройки.

Это не ответит, как правильно отладить, но поможет решить исходную проблему.

Автор: Olli Tyynelä Размещён: 22.08.2016 12:35
Вопросы из категории :
32x32