Hi All,
При аплоаде бинарных файлов на сервер они засовываются в формат TAR, потом обрабатываются GZip'ом , а при даунлоаде получившийся архив попадает в WinRAR, и в итоге в Денвере все нормально, а в FreeBSD в этой цепочке что-то не срабатывает, и все нулевые байты становятся пробелами (00->20, ну и по мелочи 61->41, 62->42 и т.п.), и в результате текстовым файлам ничего, а бинарные просто портятся.
Кто-нибудь сталкивался с этой проблемой?
1. Nikitich - 31 Января, 2008 - 00:53:22 - перейти к сообщению
2. Nikitich - 01 Февраля, 2008 - 06:46:01 - перейти к сообщению
Nikitich пишет:
в результате текстовым файлам ничего, а бинарные просто портятся.
Долго ковырял код форума, ничего не нашел, но проблема была не в форуме, а в настройках Russian Apache - сам сервер портил кодировку при загрузке.
Дело в том, что, чтобы загрузить файл на сервер через PHP, нужно создать примерно такую форму:
CODE:
<form enctype="multipart/form-data" action="some_forum_script.php" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="30000" />
Отправить этот файл: <input name="userfile" type="file" />
<input type="submit" value="Send File" />
</form>
<input type="hidden" name="MAX_FILE_SIZE" value="30000" />
Отправить этот файл: <input name="userfile" type="file" />
<input type="submit" value="Send File" />
</form>
При этом важно, чтоб тип данных был "multipart/form-data", иначе PHP файл не загрузит. Примерно так EXBB и работает: создает форму, указывает этот тип данных, получает файл, переносит его в uploads, затем кодирует в tar и gzip. Когда я заметил, что файл прилетает уже порченый, я полез разбираться с Апачем и нашел, что перекодировку этого типа данных при загрузке методом POST можно отключить.
Для этого надо в файл httpd.conf добавить следующее:
CODE:
<Location />
CharsetRecodeMultipartForms Off
</Location>
<Location />
CharsetRecodeMultipartForms Off
</Location>
После этого перезапустил Апач и вуаля! Все работает.