Вопрос или проблема
У меня есть 2 одинаковых .mp3 файла – технически разные файлы, но оба экспортированы из Audacity с использованием тех же настроек и исходного аудио. Точно такой же размер, одно и то же содержимое (хотя обработаны отдельно) – один файл не загружается, а другой успешно загружен.
Оба файла воспроизводятся нормально, но возможно ли, что какой-то символ в файле мешает загрузке через PHP?
Я вижу эту ошибку – ap_pass_brigade failed – в логе за прошлую неделю – GoDaddy долго сохраняет логи, и ошибки за сегодняшний день нигде не найдены. Может быть, это как-то связано?
[Tue Apr 26 20:34:35 2016] [9000082] [fcgid:warn] (32)Broken pipe:
[client 173.160.120.186:51688]
mod_fcgid: ap_pass_brigade failed in handle_request_ipc function,
referer http://www.####.com/wp-admin/upload.php
[Thu Apr 28 12:56:54 2016] [9000082] [fcgid:warn] (110)Connection timed out:
[client 104.237.142.57:46250]
mod_fcgid: ap_pass_brigade failed in handle_request_ipc function
[Sun May 01 12:29:20 2016] [9000082] [fcgid:warn]
[client 104.236.68.137:58028]
mod_fcgid: can't apply process slot for /web/cgi-bin/php-fcgi,
referer http://####.com
У меня настройки памяти php и загрузка файлов установлены на 128mb, а таймаут – на 120 секунд.
Этот файл не загружается:
https://drive.google.com/open?id=0Byiy0gx4A9G-dFR3MjdlTjFZUDg
Этот файл загружается успешно:
https://drive.google.com/open?id=0Byiy0gx4A9G-REhWVnRIMU5jek0
Использую PHP 5.4 на GoDaddy
Я пробовал исправления для проблемы imagick в PHP 4.5, но безуспешно.
мой htaccess:
AddType x-mapp-php5 .php
SetEnv MAGICK_THREAD_LIMIT 1
<IfModule mod_security.c>
SecFilterEngine Off
SecFilterScanPOST Off
</IfModule>
# Исключение загрузки файла и сценариев WP CRON из аутентификации
<FilesMatch "(async-upload\.php|wp-cron\.php|xmlrpc\.php)$">
Satisfy Any
Order allow,deny
Allow from all
Deny from none
</FilesMatch>
RewriteEngine On
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Старший технический специалист GoDaddy не смог понять, в чем проблема – возможно, это поврежденный WordPress? Тем не менее, я провел повторную установку, но это не решило проблему.
Точно та же проблема: некоторые MP3 файлы загружаются нормально, а другие не загружаются, и страница зависает. Если я пересохраняю файл, в 9 из 10 случаев он загружается успешно. Не понимаю, почему некоторые файлы отмечаются как плохие. Очень простой PHP скрипт загружает через move_uploaded_files или с помощью FTP – результат один и тот же. Я фактически отказался от этой проблемы, если у меня плохой файл, я либо пересохраняю, либо вручную загружаю с помощью FTP программы. Если у кого-то есть ответы на эту проблему, пожалуйста, помогите, это сэкономит мне много часов на выяснение, почему это происходит.
Ответ или решение
Вы столкнулись с трудной технической проблемой: загрузка двух .mp3 файлов, которые визуально идентичны, но один из них завершается с ошибкой HTTP, в то время как другой загружается успешно. Это может быть связано с несколькими факторами, особенно при работе с хостингом на GoDaddy и использованием PHP 5.4.
1. Проверка целостности файлов
Первым шагом стоит проверить целостность файлов. Хотя оба файла созданы с одинаковыми настройками, изначально они могут содержать небольшие различия в метаданных или в структуре файла, которые по какой-то причине вызывают ошибку обработки на сервере. Попробуйте открыть каждый файл с помощью текстового редактора для проверки на предмет странностей. Пересохранение файла, например, в другом программном обеспечении может решить проблему, как это и было у вас.
2. Логирование ошибок
Ошибки, такие как “ap_pass_brigade failed” и “broken pipe”, могут свидетельствовать о проблемах с инициацией или поддержанием соединения между вашим сервером и клиентом во время загрузки файлов. Это может свидетельствовать о наличии проблемы не только с самим файлом, но и с серверными настройками.
3. Настройки PHP и сервера
Обратите внимание на настройки PHP для загрузки файлов и уровень памяти на сервере. Несмотря на то что вы уже установили лимиты памяти на 128 МБ и таймаут на 120 секунд, возможно, другие настройки мешают нормальной загрузке. Проверьте настройки `post_max_size` и `upload_max_filesize` и убедитесь, что они выше чем размер загружаемых файлов. Также проверьте настройки вашего хостинга относительно лимитов на соединения и процессорного времени.
4. Конфигурация .htaccess
В вашем .htaccess присутствуют команды, которые потенциально могут влиять на обработку файлов: `SecFilterEngine Off` и `SecFilterScanPOST Off`. Убедитесь, что они применяются корректно и не конфликтуют с другими правилами. Убедитесь, что директивы Rewrite не препятствуют правильной обработке загрузок.
5. Возможные ошибки в коде PHP
Если ваш PHP-скрипт использует `move_uploaded_file` и испытывает трудности в обработке определенных файлов, убедитесь, что логическая часть вашей программы корректно обрабатывает исключения и ошибки. Добавьте дополнительные логи для понимания этапа, на котором происходит сбой.
Резюмируя, проблема многогранна и требует комплексного подхода: от анализа и сравнения файлов, проверки серверных логов и конфигураций PHP и сервера до возможного изменения рабочей среды для минимизации вероятности конфликтов. Учитывая ограничения PHP 5.4 и с учетом устаревших библиотек, обновление PHP могло бы улучшить общее состояние системы и ее устойчивость к подобным ошибкам.