Проблемка с загрузкой файлов

Главные вкладки

Аватар пользователя Jumangee Jumangee 25 августа 2008 в 11:44

После загрузки файлов они не скачиваются, хоть _точно_ закачаны нормально. Пример, страница: http://bbs.jumangee.net/node/85
там в аттаче файл. Файлы закачанные в каталог files _вручную_ нормально скачиваются. Больше того, если файлы заменить (по фтп заменить вручную) - файлы будут нормально скачиваться. Удалось выяснить, что проблема скорее всего в том, что файлам устанавливается правильный владелец, но не правильная группа (какая-то "wheel" а должна быть "nobody"). Раньше, на 5.* версии таких проблем небыло. Похоже проблема появилась после обновления до 6ки. Все обновления установлены. Ковыряние в настройках ни к чему не привели.
Пожалуйста помошите хотябы направлением - куды копать

Хостинг: агава (проблем с друпалом раньше небыло)
PHP 4.3.9
MySQL 4.1

Комментарии

Аватар пользователя olk olk 25 августа 2008 в 23:58

Ну понятно же что проблемы с правами(овнером) на каталог(файлы в) files,
проверте не приватный ли у вас способ загрузки файлов (настраивается в admin/settings/file-system) ...
по идее файлы загруженные upload-ам друпала от имени апача должны быть доступны для скачивания через тот же апач ...

Аватар пользователя Jumangee Jumangee 26 августа 2008 в 11:18

Дык в том-то и дело, что _должно_ быть нормально, но не нормально! Sad
Способ загрузки - публичный. В files лежит .htaccess с непонятным содержимым, он может на это повлиять?

Аватар пользователя Jumangee Jumangee 26 августа 2008 в 14:48

Вот что ответили в саппорте агавы:

Quote:
При загрузке файлов посредством скриптов они в первую очередь попадают в
директорию - временное хранилище файлов (/var/tmp/), где им
присваивается случайное уникальное имя и устанавливается группа wheel.
При обращении к закаченному файлу, например при перемещении файла
в директорию на своем хостинге, файлу присваивается корректная группа.
В Вашем случае по всей вероятности имеется какая-то проблема именно
со скриптом закачки, возможно который размещает файл напрямую на
хостинге без участия временной папки. Например, можете обратиться
к нашему тестовому скрипту: ...
который производит закачку файла в директорию temp и убедиться, что
при работе данного скрипта права и группа на закачанный файл
устанавливаются должным образом.

Так что, похоже, проблема в самом способе забирания файлов из временного каталога Sad

Аватар пользователя Jumangee Jumangee 26 августа 2008 в 15:07

В файле includes/file.inc

Было:

    // Move uploaded files from PHP's upload_tmp_dir to Drupal's temporary directory.
    // This overcomes open_basedir restrictions for future file operations.
    $file->filepath = $file->destination;
    if (!move_uploaded_file($_FILES['files']['tmp_name'][$source], $file->filepath)) {
      form_set_error($source, t('File upload error. Could not move uploaded file.'));
      watchdog('file', 'Upload error. Could not move uploaded file %file to destination %destination.', array('%file' => $file->filename, '%destination' => $file->filepath));
      return 0;
    }

Сделал:

    // Move uploaded files from PHP's upload_tmp_dir to Drupal's temporary directory.
    // This overcomes open_basedir restrictions for future file operations.
    $file->filepath = $file->destination;
    if (!copy($_FILES['files']['tmp_name'][$source], $file->filepath)) {
      form_set_error($source, t('File upload error. Could not move uploaded file.'));
      watchdog('file', 'Upload error. Could not move uploaded file %file to destination %destination.', array('%file' => $file->filename, '%destination' => $file->filepath));
      return 0;
    }
    unlink($_FILES['files']['tmp_name'][$source]);

Вроде бы заработало

Аватар пользователя Jumangee Jumangee 26 августа 2008 в 15:39

Это уже как традиция - отвечать на свои же вопросы, итак,

Из документации по использованию функции move_uploaded_file():

Quote:
"...move_uploaded_file use the GROUP permissions of the parent directory
of the tmp file location, whereas a simple "copy" uses the group of the
apache process. This could create a security nighmare if your tmp file
location is owned by root:wheel."

Т.е. заменять move_uploaded_file надо, но, это ж по-сути до следующего обновления! Sad

Аватар пользователя olk olk 26 августа 2008 в 15:59

Вам надо было просто настроить (и создать) темповую дирректорию внутри "своего" выделенного хостером пространства, и соответственно прописать его в настройках /admin/settings/file-system