[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Ошибка move_uploaded_file(): open_basedir restrict
Гость_Николай
Здравствуйте господа кодеры.
К вам насущный вопрос.
После переноса админки с http в https - директорию(сервак тот же) перестала работать загрузка файлов на сервер. Сам файл таки загружается во временную директорию /tmp, т.к. его видно через is_uploaded_file()
Но при попытке покласть его в нужную папку получаем
PHP Warning: move_uploaded_file(): open_basedir restriction in effect. File
(/var/www/vhosts/***.ru/httpdocs/img/products/icons/product_245_icon.jpg) is not within the allowed path(s): (/var/www/vhosts/***.ru/httpsdocs:/tmp) in /var/www/vhosts/***.ru/httpsdocs/staff/classes/fileUpload.php on line 37, referer: https://***.ru/catalog/products/add-products.php?id=245&action=mod

Попытки прописать в php.ini

open_basedir = "/var/www/vhosts/***.ru/", так же как и
open_basedir = "/var/www/vhosts/***.ru/ :/tmp"

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




Спустя 14 минут, 57 секунд (10.04.2009 - 05:39) Guest написал(а):
Собственно кусок кода отвечающий за сие действие

PHP
function saveFile($file$saveAs$key)
{
    if(empty(
$this->upload_dir))
        die (
"Не установлена директория загрузки");
    if(!
$file['error'])
    {
        if(
$file["size"] > $this->max_size)
            die (
"Размер файла превышает максимально допустимый");
        
$register substr($file['name'], -3);
        if(!
in_array($register,$this->permited_types))
            die(
"Запрет на загрузку файлов данного типа.");

        
$fileLocation $this->server_dir.$this->upload_dir.$saveAs.'.'.$register;
        
move_uploaded_file($file['tmp_name'], $fileLocation);
        return 
$this->upload_dir.$saveAs.'.'.$register;
    }
    else
        
$this->getFileError($file['error'], $key);
}

/* заданные пути
$this->server_dir = '/var/www/vhosts/***.ru/httpdocs/';
$this->upload_dir = 'img/products/icons/';
*/

Спустя 5 минут, 49 секунд (10.04.2009 - 05:45) Гость_Николай написал(а):
Ну и разумеется на все папки для загрузки стоят права доступа 777

Спустя 1 час, 47 минут, 19 секунд (10.04.2009 - 07:33) Viking написал(а):
Цитата
(/var/www/vhosts/***.ru/httpdocs/img/products/icons/product_245_icon.jpg) is not within the allowed path(s): (/var/www/vhosts/***.ru/httpsdocs:/tmp)


я так понимаю что нужно полностью все пути прописывать
open_basedir = "/var/www/vhosts/***.ru/httpdocs/img/products/icons/"

Спустя 6 минут, 24 секунды (10.04.2009 - 07:39) Гость_Николай написал(а):
Спасибо за ответ.

Проблема в том, что все, что идет после httpdocs/ - динамически выставляемый путь.
Т.е. придется прописать в open_basedir как минимуму 4-5 вариантов путей.
Не по феншую smile.gif, но попробую сделать как вы посоветовали, спасибо.

Спустя 17 минут, 7 секунд (10.04.2009 - 07:56) Viking написал(а):
проверил, похоже дело в чем-то другом...

Спустя 2 минуты, 16 секунд (10.04.2009 - 07:58) Viking написал(а):
если судить по этому сообщению - в open_basedir путь неправильно прописан
(/var/www/vhosts/***.ru/httpdocs/img/products/icons/product_245_icon.jpg) is not within the allowed path(s): (/var/www/vhosts/***.ru/httpsdocs:/tmp)
точнее похоже что $fileLocation = $this->server_dir.$this->upload_dir.$saveAs.'.'.$register старый путь возвращает, т.е. с httpdocs вместо httpsdocs

Спустя 39 минут, 42 секунды (10.04.2009 - 08:38) Гость_Николай написал(а):
Не совсем smile.gif
Вобщем админка находится в https, а сайт в http.
Все файлы закачиваемые через админку кладутся в директории сайта, ну или должны туда складироваться по плану smile.gif
Пока сайт и админка были на http все работало на ура, как только админку решено было перекинуть на https появились проблемы с загрузкой файлов.

Спустя 24 минуты, 53 секунды (10.04.2009 - 09:03) RealMan написал(а):
вы качестве диогностирования пару вопросов:
1. проверить черзе phpinfo(); меняется нет оупенбайздир
2. папка темп с загруженым файлом открывается вообще? т.е. не копируй функцией move_uploaded_file(): а сделай открыть любой файл или прочитать содержимое папки.

Спустя 5 часов, 9 минут, 29 секунд (10.04.2009 - 14:12) Viking написал(а):
не сталкивался с таким, но раз он выводит the allowed path(s): (/var/www/vhosts/***.ru/httpsdocs:/tmp) такое впечатление, что эти пути задаются где-то более глобально и php.ini их не может изменить

Спустя 2 минуты, 39 секунд (10.04.2009 - 14:15) Viking написал(а):
ну или вы забыли апач перезапустить после изменения php.ini smile.gif

Спустя 2 дня, 15 часов, 57 минут, 43 секунды (13.04.2009 - 06:13) Гость_Николай написал(а):
Спасибо, комрады. Ушел тестить smile.gif
О результатах отпишусь.

Спустя 1 день, 5 часов, 51 минута, 28 секунд (14.04.2009 - 12:04) Гость_Николай написал(а):
Странно.
Почему-то скрипты, в папке /var/www/vhosts/***.ru/httpsdocs/ не видят даже самой дириктории /var/www/vhosts/***.ru/httpdocs/ , не говоря уже об вложенном в нее, зато отлично сохраняют загруженные файлы в любой директории из /var/www/vhosts/***.ru/httpsdocs/

Спустя 31 минута (14.04.2009 - 12:35) Гость_Николай написал(а):
Цитата (RealMan @ 10.04.2009 - 06:03)
1. проверить черзе phpinfo(); меняется нет оупенбайздир
2. папка темп с загруженым файлом открывается вообще?

1. Меняется, все гуд.
2. Темп открыть не могет, т.к. почему-то не видит директорий выше httpsdocs, что при этом не мешает скрипту копировать из /tmp/ в любую директорию с правами 777 из httpsdocs

Спустя 19 часов, 46 минут, 45 секунд (15.04.2009 - 08:22) RealMan написал(а):
даже незнаю ...
в ум приходит только поставить костыль в виде:
сделать симлинк на папку аплоад.

Спустя 2 дня, 4 часа, 49 минут, 41 секунда (17.04.2009 - 13:12) Гость_Николай написал(а):
Из-за настроек сервака скрипт заперт в директории своего сайта, в данном случае httpdocs или httpsdocs директориях, поэтому скрипт тупо не видит папки выше корневой директории сайта.

Спасибо за уделенное мне время и советы smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.