|
Автор: Administrator
|
|
12.03.2010 03:44 |
|
Что имеется:
- Joomla 1.5.15
- DocMan 1.5.4
- и включённый open_basedir на сервере
Симптомы: Директория для загрузки файлов (upload_tmp_dir) вынесена за пределы разрешённой директории open_basedir. При загрузке во front-end'е сервер блокирует запрошенную DocMan'ом информацию о размере файла, и в errorlog'е имеем ошибку такого вида:
[Fri Mar 12 02:08:58 2010] [error] [client <мой IP>] FastCGI: server "/www/sites/<имя сайта>/cgi-bin/php.sh" stderr: PHP Warning: filesize() [<a href='function.filesize'>function.filesize</a>]: open_basedir restriction in effect. File(/www/sites/<имя сайта>/tmp/phpd1M5b0) is not within the allowed path(s): (/www/sites/<имя сайта>/www) in /www/sites/<имя сайта>/www/administrator/components/com_docman/classes/DOCMAN_file.class.php on line 567, referer: http://<имя сайта>/index.php?option=com_docman&task=upload&step=2&method=http&Itemid=85
Метод лечения: Находим файл "/administrator/components/com_docman/classes/DOCMAN_file.class.php", и в нём делаем два изменения:
- функция "function uploadHTTP(&$file, $path, $validate = _DM_VALIDATE_ALL )", в ней на несколько строчек ниже (примерно на 10 строчек) меняем вызов процедуры проверки размера файла "$this->validateSize($temp_name)" на "$this->validateSize($temp_name, $file)".
- меняем объявление функции "validateSize", было:
function validateSize($temp_name) стало: function validateSize($temp_name, &$file) + на три строчки ниже меняем $size = filesize($temp_name); на $size = $file['size'];
Всё, тестируем. |