Проблемы с прикреплением файлов

Проблемы с прикреплением файлов являются следствием некорректных настроек форума или вашего сервера. В данной статье вы найдёте всю необходимую информацию по настройке системы прикрепления файлов, как на уровне форума, так и на уровне сервера. <style box background>Прежде чем продолжить, проверьте, чтобы права доступа CHMOD к папке /uploads/ стояли 777. Как выставить права доступа, подробнее.</style>

Настройка форума и доступа

Рассмотрим три основных этапа настройки форума для корректной работы системы прикрепления файлов.

URL и путь до папки /uploads/.

Первым делом нужно проверить и выставить в Админцентре верный URL и путь до папки /uploads/:

IPB 2.0.x: Системные настройки → Глобальные настройки → «URL к директории для загрузок» и «Путь к директории /uploads/».

IPB 2.1.x: НАСТРОЙКИ → Глобальные Настройки форума → «URL к папке для загрузок» и «Путь к папке /uploads/».

Под URL понимается обычная ссылка, например:

http://mysite.ru/forum/uploads

Путь к папке определяется внутри сервера, от корневой директории, например:

/home/mysite.ru/www/forum/uploads

Как определить путь до папки /uploads/? Пользователи IPB 2.1 могут воспользоваться средствами PHP INFO сервера, ссылка, на которую доступна на главной странице Админцентра в информационном меню «Информация о системе». В списке настроек и директив PHP сервера ищите «DOCUMENT_ROOT» или настройку, содержащую это слово. В поле значения вы найдете путь до публичной директории вашего аккаунта или сервера. Выглядеть он будет примерно следующим образом:

/home/mysite.ru/www/

Вам останется скопировать этот путь и дописать в него папку с форумом и папкой /uploads/, как было показано на примере выше.

Настройка прав для группы.

Форум IPB позволяет гибко настраивать, контролировать и отслеживать всё относительно прикреплённых файлов пользователей. Поэтому важные настройки хранятся в настройках каждой группы, от главных администраторов форума и до группы рядовых пользователей.

IPB 2.0.x: Пользователи и группы → Управление группами → Изменить → Прикрепление файлов.

IPB 2.1.x: УПРАВЛЕНИЕ → Управление группами → Редактировать → Прикрепление файлов.

Там будет предложено 5 необходимых настроек по прикреплению файлов к темам и личным сообщениям, аватаров и фотографий пользователей этой группы.

Настройка масок доступа форумов.

Необходимо убедиться, что для нужных форумов/подфорумов нужные группы пользователей имеют права прикреплять файлы к сообщениям. Для этого стоит посмотреть настройки прав доступа каждого конкретного форума, либо настройки масок доступа каждой группы. Для второго случая:

IPB 2.0.x: Управление форумами → Маски доступа → Изменить.

IPB 2.1.x: УПРАВЛЕНИЕ → Маски доступа → Изменить.

Там будет показан список всех форумов и 5 прав пользователей: просмотр форума, просмотр тем, создание тем, ответ в теме, прикрепление файлов (загрузка). Если вместо галочки вы найдете надпись «Глобально», значит, вам нужно проверить и выставить права доступа для каждого форума отдельно:

IPB 2.0.x: Управление форумами → Управление форумами → Права доступа.

IPB 2.1.x: УПРАВЛЕНИЕ → Управление форумами → Права доступа.

Там увидите похожую таблицу, как из предыдущего примера, только для конкретного форума. Вам нужно расставить галочки, где необходимо.

Типы прикрепляемых файлов

Важным атрибутом по контролю загружаемых файлов пользователями является определение типа файла и списка файлов, разрешенных для загрузки. Это необходимо, чтобы обезопасить форум и сервер от загрузки нежелательных файлов. IPB предоставляет возможность по контролю за типами прикрепляемых файлов, фотографий и аватар.

Инструмент управления типами прикрепленных файлов вы можете найти:

IPB 2.0.x: Прикрепляемые файлы → Типы прикрепляемых файлов.

IPB 2.1.x: УПРАВЛЕНИЕ → Прикрепляемые файлы → Типы прикрепляемых файлов.

:faq:type_of_attach.gif

В таблице представлены все разрешенные для загрузки типа файлов. Для каждого типа файла есть два свойства: «Использование в сообщениях» и «Использование в аватарах/фото». Это поможет точно определить несколько типов графических файлов в качестве аватара/фотографии. Например, по умолчанию используется: .jpg, .jpeg, .gif, .png.

Если вам нужно разрешить для загрузки специальные типы файлов, то вам нужно просто добавить необходимые типы в эту таблицу. Например, можно добавить популярный тип архива .rar и сделать его доступным для загрузки:

:faq:type_add_new.gif

Важно, при добавлении нового типа указать правильный MIME-тип файла для успешной загрузки и его мини-изображение, чтобы в сообщении с приложением отображалась иконка файла. Мини-изображение типа файла берется автоматически из папки /style_images/*/folder_mime_types/. Это позволяет для каждого типа файла создавать уникальные иконки. MIME-type нужного типа можете поискать здесь: http://www.utoronto.ca/webdocs/HTMLdocs/Book/Book-3ed/appb/mimetype.html

Настройка PHP на сервере

Не всегда проблемы с прикреплением файла возникают из-за некорректных настроек форума или типов файлов. Зачастую роль играют особые настройки сервера, а именно настройка директив интерпретатора PHP.

Всю необходимую информацию об установленном PHP на сервере можно получить при помощи стандартной функции phpinfo(). Для пользователей IPB 2.1 ссылка на неё доступна на главной странице Админцентра форума в меню «Информация о Системе».

Можно вызвать PHP INFO другим способом. Создать файл с разширением .php со следующим содержимым:

<?PHP phpinfo(); ?>

Сохраните под любым именем, загрузите на сервер в корневую директорию с форумом или сайтом и запустите. Появится страница с таблицами текущих настроек PHP.

Как влияют эти настройки на работу форума? Например, загружаются файлы небольшого размера, а файлы больше 2 мб не прикрепляются. Значит, проблема в директивах post_max_size и upload_max_filesize. Или, например, картинка 800х640 прикрепляется хорошо, а фотография 2800х1280 не загружается. Значит, вероятно, проблема в нехватки памяти для преобразования изображения. Увеличить следует параметр в memory_limit, помимо предыдущих двух настроек. Рассмотрим их конкретно.

1. Разрешение на загрузку файлов.

file_uploads

Параметр (Local Value) обязательно должен быть On, что означает «включено».

2. Максимальный размер данных для приёма в PHP.

post_max_size

Данные параметр определяется в мегабайтах. На виртуальных хостингах его часто выставляют в . Однако, вы можете по-необходимости это значение увеличить. Например, до 32М или 64М, если ваш хостер это позволяет.

3. Максимальный размер загружаемого файла.

upload_max_filesize

Параметр этой настройка подобен предыдущей. Увеличивая его значение, вы увеличиваете размер максимально возможного загружаемого файла средствами PHP.

4. Каталог временных файлов.

upload_tmp_dir

На некоторых серверах включена эта директива, позволяющая все загружаемые файлы помещать во временную папку. Если она включена, то в параметре настройки будет указан путь до папки, например: »/home/tmp». Вам нужно убедиться, что права доступа CHMOD на эту папку 777. Если настройка отключена, то ее параметр будет: «no value».

5. Максимальное время обработки загружаемых данных.

max_input_time

Параметр в секундах. По-умолчанию часто бывает равен 60. По-необходимости это значение можно увеличить. Чем больше это значение, тем дольше скрипт может посылать данные в PHP. Если в параметре указано -1, значит ограничений нет.

6. Максимальное время выполнения сценария (скрипта).

max_execution_time

Как и предыдущий параметр, определяется в секундах, по умолчанию 30. Если вы будите загружать большие файлы, то этот параметр так же следует увеличить.

7. Максимальный объём памяти для работы сценария.

memory_limit

Параметр определяется в мегабайтах. Для полноценной работы форума желательно выставлять значение не меньше 24М.


Корректировка настроек PHP при помощи .htaccess.

Есть серверы (хостинги), где нет доступа к системным файлам, например как php.ini (файл настройки PHP), но есть возможность использовать .htaccess файлы для корректировки и дополнительной настройки сервера. Поэтому стоит знать, как при помощи задания директив в файл .htaccess можно регулировать настройки PHP, их локальный параметр (Local Value).

Например, для изменения значения настроек upload_max_filesize, post_max_size и memory_limit создадим .htaccess файл в корневом каталоге форума со следующим содержимым:

php_value "upload_max_filesize" "15M"
php_value "post_max_size" "15M"
php_value "memory_limit" "32M"

После этого обновите файл с PHP INFO и убедитесь, что локальные значения приняли нужные величины. По аналогии можно менять остальные. Если при изменении файла .htaccess сервер возвратил ошибку 500, значит, вы допустили ошибку при задании параметров, либо ваш сервер не поддерживает подобных настроек.

"Битые" файлы и "Русский Apache"

На некоторых серверах бывает, что при прикреплении файлов форум возвращает ошибку, ссылаясь на неверные права доступа на папке /uploads/ (или не ссылаясь вообще), при этом файл появляется в этой папке. Скачав этот файл из папки /uploads/, открыть его не удаётся. Такие файлы называют «битыми» или «инвалидными».

Подобные проблемы возникают на серверах где установлен так называемый «Русский Apache», который по умолчанию перекодирует все принимаемые данные из множества в одну стандартную, в которой они хранятся на сервере. В подобных случаях это windows-1251. Бинарные данные (файлы изображений, архивов и прочее) не должны подвергаться перекодированию, поэтому эту функцию следует отключить. Для этого в корневой директории форума (сайта) следует создать .htaccess файл со следующим содержимым:

<IfModule mod_charset.c>
CharsetRecodeMultipartForms off
</IfModule>

Эта директива, заключённая в блок <IfModule></IfModule>, отключает перекодировку данных, отправляемых из html-формы в формате multipart/form-data.

Проблема в 1.x и 2.0.x

В форумах версии IPB 1.x и 2.0.x встречается проблема с некорректным отображением прикрепленных изображений. При открытии прикреплённой картинки, она открывается браузером как текстовый файл. В чём причина?

Во время, когда разрабатывались версии 1.x и 2.0.x директива header в языке PHP позволяла передавать сразу несколько запросов клиенту. Однако в связи с повышением безопасности на новых версиях PHP эту возможность урезали (один header – один заголовок). Решить эту проблему можно следующим способом.

Найти в файле /sources/misc/attach.php строку:

@header( "Content-Type: ".$post['attach_type']."\nContent-Disposition: inline; filename=\"".$post['attach_file']."\"\nContent-Length: ".(string)(filesize( $file ) ) );

заменить на строки:

@header( "Content-Type: ".$ibforums->cache['attachtypes'][ $attach['attach_ext'] ]['atype_mimetype']);
@header( "Content-Disposition: inline; filename=\"".$attach['attach_file']."\"" );
@header( "Content-Length: ".(string)(filesize( $file ) ) );

Успехов!

 

faq/attachments.txt · Последние изменения: 2007/08/14 12:01 (внешнее изменение)

Работает на DokuWiki
© 2002—2006 ibresource
e-mail: wikiteam@iblink.ru