Upload файлов

Upload файлов

от alex alex -
Количество ответов: 31

Если пользователь прикрепляет файл то он ложится в http://myhost/moodledata/1/forum, но в прикрепленных на странице путь к файлу лежит через 

http://myhost/moodle/file.php/2/moddata/forum/1/2

Как это понимать? Как сделать так что бы ссылка прописывалась правильная, либо файл ложился  в папку по ссылке? 

 

moodle 1.9 

В ответ на alex alex

Re: Upload файлов

от Vadim Tabunshchik -
Изображение пользователя Developers

пользователь прикрепляет файл

Куда прикрепляет? Каким образом?

он ложится в http://myhost/moodledata/1/forum

Такой путь будет, если пользователь создал папку forum в файлах главной страницы сайта (1 - это id этой страницы). Сюда, обычно, доступ имеет только Админ.

http://myhost/moodle/file.php/2/moddata/forum/1/2 - А вот это правильная ссылка на файл, прикрепленный к сообщению форума, если пользовались опцией "Вложение (Максимальный размер:...)", а не вставляли ссылку на файл в редакторе. И лежит такой файл там, где ему и положено: /id_курса/moddata/forum/...

Так что, не совсем понятно, что Вам не понятно широко улыбаюсь

В ответ на Vadim Tabunshchik

Re: Upload файлов

от alex alex -

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

wwwroot - http://mysait/moodle/,

dirroot - /var/www/localhost/htdocs/moodle/,

dataroot - /var/www/localhost/datamoodle

 никакого каталога   /var/www/localhost/htdocs/moodle/file.php/ не существует.. зато существует файл  /var/www/localhost/htdocs/moodle/file.php а следовательно не может существовать такой каталог так как в линуксе нельзя делать папки и файлы с одинаковым именами. Эта система что под форточку писана что ли? 

Так вот.. при утсановке ясно написано.. укажите каталог для загрузки файлов и по умолчанию вписан  /var/www/localhost/datamoodle, если его изменить на  /var/www/localhost/htdocs/moodle/file.php/ двиг сообщает что в силу паранойности создателей.. нельзя тут создавать эту папку, защита не та .Так выход то какой? у кого где находится папка которая присвоена переменной dataroot. И остальные переменные сообщить было б неплохо. Прописаны в config.php

В ответ на alex alex

Re: Upload файлов

от alex alex -

поставил эту поделку на винду

Значит.. ссылка прописывается правильно . .файл ложится правильно..По идее принцип рабооты такой.. если перейти по ссылке http://mysite/moodle/file.php/1/file.zip то выполняется скрипт  http://mysite/moodle/file.php которому передается параметр  /1/file.zip и он обрабатывается функцией function get_file_argument($scriptname) из файла /lib/weblib.php. Но в линуксе таким образом параметры не передаются и это выглядит как прямая ссфлка на файл  http://mysite/moodle/file.php/1/file.zip которого не существует.  

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

В ответ на alex alex

Re: Upload файлов

от Виталий Лавров -
Изображение пользователя Эксперт по Moodle

Это значит, что в линксе другие настройки в php.ini и/или апаче.

Посмотрите настройку moodle Сервер->HTTP->Use slash arguments - она как раз для этих случаев.

А на счет символов в пароле - проверьте локаль. IMHO она у вас не соответствует действительности. Версия php какая ?

PS а еще эти виндузятники зачем-то делают все файлы исполняемыми !!! Хотя испоняемыми должны быть только несколько php-шных скриптов!!! улыбаюсь

В ответ на alex alex

Re: Upload файлов

от Vadim Tabunshchik -
Изображение пользователя Developers

Прежде чем "катить бочку" на разработчиков системы, ознакомьтесь с основными параметрами конфигурации, хотя бы используя встроенную в Мудл справку или изучив образец файла config-dist.php, в котором написано:

// 4. DATA FILES LOCATION
//=============================================
// Now you need a place where Moodle can save uploaded files.  This
// directory should be readable AND WRITEABLE by the web server user
// (usually 'nobody' or 'apache'), but it should not be accessible
// directly via the web.

То есть, каталог moodledata НЕ должен быть доступен через WEB, поэтому и получаете "нельзя тут создавать эту папку, защита не та ",  Вы ж её пытаетесь засунуть в htdocs, где сам сайт находится.

То, что вписано по умолчанию - /var/www/localhost/datamoodle, и есть самый верный вариант. Настройте правильно права для него.
dataroot у всех может находиться где-угодно, хоть на другом ЖД, лишь бы Веб-сервер имел туда доступ с правами на чтение и запись. Так что примеры приводить бессмысленно.

Что касается file.php, то это просто скрипт РНР, посредством которого Мудл "отдает" файлы, к каталогам он никакого отношения не имеет.

все заточено под винду  и влинуксе не работает - глупость несусветная, уж простите.

Имхо, у большей части пользователей этого форума сайты работают под *никсом (на хостинге, свой сервер) и никаких проблем.

По идее принцип рабооты такой  Не такой, и разбираться в нем нет необходимости, если всё правильно настроить.

ЗЫ: Если в config.php написано так  - wwwroot - http://mysait/moodle/, то это косяк (Do not include a trailing slash - не ставьте закрывающий слеш). И в dirroot его не должно быть.

В ответ на Vadim Tabunshchik

Re: Upload файлов

от alex alex -

Vadim Tabunshchik я вижу вы не внимательно читаете мои сообщения.. пар мешает. .Остынете прочитайте занова.

"То, что вписано по умолчанию - /var/www/localhost/datamoodle" 

я вкурсе что правильно и поверьте вкурсе какие у нее права а про "Вы её пытаетесь засунуть в htdocs, где сам сайт находится" это было предположение для выяснения  причины проблемы и никто не собирается ее использовать как папку для загрузки.. Проблема в том, что принцип передачи параметров php скрипту сделан через жопу.. найдите хоть одну систему управления сайтами где так сделано..поставте линукс и посмотрите что будет а потом утверждайте что и как работает. Я проверил на обоих системах и со 100% уверенностью говорю что если настройки серверов расчитаны на стандартные системы управлениями сайтов.. то в линуксе этот мудл работать корректно не будет (как передача параметров так и функция проверки пароля) а в винде будет.

Возможно решение кроется в настройке php , что то вроде...разрешить передавать параметры через жопу. как это реальизовано в мудле.. и включено по умолчанию в сервере под винду..вашим денвером

В ответ на alex alex

Re: Upload файлов

от alex alex -

moodle Сервер->HTTP->Use slash arguments - похоже это оно самое)) проверить завтра только смогу в линуксе

версия php 5.3.6

 

Виталий Лавров, спасибо за разъяснения.. 

В ответ на alex alex

Re: Upload файлов

от Vadim Tabunshchik -
Изображение пользователя Developers

поставте линукс и посмотрите что будет а потом утверждайте что и как работает

FreeBSD 7.2-RELEASE 6-ой год 4 сайта

+ к этому постоянное тестирование новых версий Мудл на локальных машинах и под *никс, и под Windows.

Я проверил на обоих системах и со 100% уверенностью говорю что если настройки серверов расчитаны на стандартные системы управлениями сайтов.. то в линуксе этот мудл работать корректно не будет

Самоуверенность, уверенностью тут и не пахнет.

.. пар мешает. .Остынете прочитайте занова.

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

В ответ на alex alex

Re: Upload файлов

от Александр Анисимов -
Изображение пользователя Майнтейнер перевода Изображение пользователя Эксперт по Moodle

alex, извините, не знаю Вашего имени...

На этом сайте общаются ВЗРОСЛЫЕ люди, поэтому давайте относиться с уважением друг к другу.

Вы пишите, что у Вас 700 учеников школы, а вот у меня, например - почти 10000 студентов ВУЗа на сайте.

И работает Мудл! И под Виндовс, и под Линуксом. Так что, дело не в системе, дело в нас самих!

А с юношеским максимализмом советую прощаться...

В ответ на Александр Анисимов

Re: Upload файлов

от alex alex -

Александр, Понятие ВЗРОСЛЫЙ для вас означает я так понял.. уважение.. Так вот для меня НЕ ВЗРОСЛОГО .. уважение это когда тебе помогают решить проблему.. а не пишут бесполезные сообщения типа: перезагрузи компьютер, поставь права на папку, у тебя нет ошибки ты придумал..Для меня именно это неуважение ко мне когда я объясняю проблему и пытаюсь понять как ее решить а такие люди как Вадим, вместо этого в каждом сообщении пишут.. Вы дурак, у вас все работает, а эта красная ошибка..это фича. 

Я не знаю.. что у Вас ВЗРОСЛЫХ с вниманием например.. но про какие 700 учеников вы говорите?) Я такого никогда не писал) Так что давайте не будем придумывать несуществующие факты типа 700 учеников и рабочий мудл, выключим свой ВЗРОСЛЫЙ максимализм и попытаемся решить проблему.

Выключение опции передачи параметров через слеш не помогло, при попытке скачать файл: No valid arguments supplied or incorrect server configuration. Загружаются нормально, лежат в папке /var/www/localhost/moodledata/, ссылки имеют вид http://mysite/moodle2/file.php?file=%2F1%2F1.doc. Может таки проблема в параметрах php сервера?

В ответ на alex alex

Re: Upload файлов

от Maryia Davidouskaia -

Какой веб-сервер используете? nginx?

В ответ на alex alex

Re: Upload файлов

от Виталий Лавров -
Изображение пользователя Эксперт по Moodle

в апаче нет php-сервера. там модуль который настраивается  либо через .htaccess либо через php.ini

Информация из FAQ:

Uploaded files give "File not found"

For example: Not Found: The requested URL /moodle/file.php/2/myfile.jpg was not found on this server.

Your web server needs to be configured to allow the part of the URL after a script name to be passed directly to the script. This is usually enabled in Apache 1, but is usually disabled by default in Apache 2. To turn it on, add this line to your httpd.conf, or to a .htaccess file in your local directory (see Installing Moodle for more details):

AcceptPathInfo on
В ответ на alex alex

Re: Upload файлов

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода

найдите хоть одну систему управления сайтами где так сделано 

alex alex, я вижу, что Вы только начинаете осваивать мудл, поэтому пока ещё не знаете, где именно в странице профиля вписывается Имя и Фамилия. 

Но я расскажу вам про файл moodle/file.php, который сделан как-то не так, как в других CMS. Сделано это для того, чтобы в moodle корректно работали не только отдельные файлы (как во всяких других CMS), но и целые HTML-учебники с кучей ссылок. Предположим, что вы загрузили файл index.html, который ссылается на image.png. Тогда ссылка на файл будет иметь вид http://mysite.org/file.php/1/index.html, а картинка  http://mysite.org/file.php/1/image. png и всё будет работать правильно, а браузер даже не будет догадываться, как же у вас там всё устроено на сервере. Хотя для этого веб-сервер должен уметь правильно разбирать такой путь и останавливаться на файле file.php, передавая ему соответствующие параметры. Apache по умолчанию это умеет (moodle отлично устанавливается на apache в windows и ubuntu без изменения конфигурации апача), а nginx не умеет.

Для решения этой проблемы есть способ - не использовать slashed arguments. Тогда адрес файла будет http://mysite.org/moodle/file.php?file=index.html и не факт, что ссылка на image.png будет обработана браузером как  http://mysite.org/moodle/file.php?file=image. png. А если и будет, то такие файлы не всегда будут кэшироваться промежуточными прокси-серверами, а значит повышается нагрузка на ваш сервер. Лично у меня при попытке перейти на nginx возникли в связи с этим проблемы с математическими формулами.

Поэтому, если у вас стоит apache, то стоит разобраться в проблемах в его конфигурации. Не любите Windows - поставьте Ubuntu 10.04 - там точно работает с нуля, равно как и в десятке других систем.

В ответ на Vadim Dvorovenko

Re: Upload файлов

от alex alex -

AcceptPathInfo on  в httpd.conf не помог, может кто нибудь скинуть стандартный файл httpd.conf с убунты?

С какими модулями в убунте собран apache? 

В ответ на Vadim Dvorovenko

Re: Upload файлов

от Виталий Лавров -
Изображение пользователя Эксперт по Moodle

А какие проблемы с nginx? У меня moodle исключительно на nginx+php-cgi. Проблемы с формулами рельны только на x86_64 из-за кривого mimetex

В ответ на Виталий Лавров

Re: Upload файлов

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода

У меня формулы через TeX+Imagemaick рисуются. При перезде с одного сервера на другой хотел заодно apache на nginx поменять. Возникли сложности. Кручением настроек за один день решить не удалось, вернулся на apache. Больше не разбирался

В ответ на alex alex

Re: Upload файлов

от Виталий Лавров -
Изображение пользователя Эксперт по Moodle

Если пользователь прикрепляет файл то он ложится в http://myhost/moodledata/1/forum, но в прикрепленных на странице путь к файлу лежит через http://myhost/moodle/file.php/2/moddata/forum/1/2

он не ложится в http://myhost/moodledata/1/forum - он складывается в каталог moodledata/1/forum который недоступен веб-серверу, только так можно сделать контролируемый доступ к ресурсам курсов. Именно из-за этого moodledata не должен быть подкаталогом в moodle или в веб-сервере должен быть запрет на доступ к файлам в этом каталоге.

доступ к содержимому modledata проверяет file.php

PS Странно что никто до сих пор не напомнил про логи и отладку в moodle - там наверняка есть подсказка....

В ответ на Виталий Лавров

Re: Upload файлов

от alex alex -

в режиме отладки пр попытке скачать файл выводит ошибку:

Warning: preg_replace() [function.preg-replace]: Compilation failed: unknown option bit(s) set at offset 0 in /var/www/localhost/htdocs/moodle/lib/moodlelib.php on line 465

 465 строка это  $param = preg_replace('~:cntrl:|[&<>"`\|\':]~u', '', $param); в секции 

case PARAM_PATH: // Strip all suspicious characters from file path
$param = str_replace('\\', '/', $param);
$param = preg_replace('~:cntrl:|[&<>"`\|\':]~u', '', $param);
$param = preg_replace('~\.\.+~', '', $param);
$param = preg_replace('~//+~', '/', $param);
return preg_replace('~/(\./)+~', '/', $param); 

В ответ на alex alex

Re: Upload файлов

от alex alex -

ну вот... уже что то)) закомментировал эту строку.. файлы стали доступны для скачивания) Чем чревато комментирование этой строки?

В ответ на alex alex

Re: Upload файлов

от alex alex -

Везде где встречается эта строка, появляется ошибка, это смена темы, а может и еще чего что правит: PARAM_FILE, редактор тегов (PARAM_TAG), и скачиввание файлов(PARAM_PATH), комментирование строки решает эти проблемы.

В ответ на alex alex

Re: Upload файлов

от Виталий Лавров -
Изображение пользователя Эксперт по Moodle

Гм. Неработоспособность регекспов плохой сигнал. Настройки php смотреть нужно.

IMHO есть проблема с локалью.....

В ответ на Виталий Лавров

Re: Upload файлов

от alex alex -

Походу нужно ставить php5-xmlrpc и php собирать с флагом --with-xmlrpc. В портежах по умолчанию он не ставится. 

 

To install the xmlrpc library on Windows

  1. Open the php.ini file found in the moodle/apache/bin folder
  2. Find the line: ;extension=php_xmlrpc.dll
  3. Remove the ; at the beginning of the line
  4. Restart apache if necessary

To install the xmlrpc library on Linux/Unix

If you are using PHP as provided by the OS, you can just install the appropriate package, and restart apache:

  • On Ubuntu and Debian, the command is: apt-get install php5-xmlrpc
  • On RedHat, Fedora, CentOS and SuSE, the command is: yum install php-xmlrpc

If you compiled your PHP from source

  1. You need to recompile PHP from source
  2. add --with-xmlrpc to the command line when you run configure

 

В ответ на alex alex

Re: Upload файлов

от Vadim Tabunshchik -
Изображение пользователя Developers

alex alex, проверьте установленные расширения РНР на странице "Управление Сервер Среда (версии ПО)".

Если не работает preg_replace, то это говорит о неправильной работе расширения PCRE Функции для работы с регулярными выражениями (Perl-совместимые)

В ответ на Vadim Tabunshchik

Re: Upload файлов

от alex alex -

Там ругается только на xmlrpc поэтому и подумал что в нем проблема, но на рабочем сервере, этот модуль так же отсутсвует.

Сейчас почитал про preg_replace пишут что проблема возникает с кодировкой utf-8

В регулярных выражениях я не силен поэтому предполагаю что в строке $param = preg_replace('~:cntrl:|[&<>"`\|\':]~u', '', $param); 

модификатор "u" указывает на то что  текст представлен в кодировке utf-8, если его убрать то фунция либо работает, либо не соответсвует искомой строке, но файлы скачиваются. Имеет ли смысл убирать его или это равносильно закомментированной строке?

Все же проблема с локалью, так пишут и на других форумах где не работает эта функция..как ее можно решить? 

В ответ на alex alex

Re: Upload файлов

от Vadim Tabunshchik -
Изображение пользователя Developers

В ubuntu ведь UTF-8 по дефолту устанавливается или нет?

Бывает ещё такое: Проблема с локалями в Ubuntu Server 10.10 x64

Похоже проблема решена!)

Поздравляю! Да