За последние 24 часа нас посетили 5332 программиста и 449 роботов. Сейчас ищут 232 программиста ...

Проблема доступа к создаваемым файлам при move_uploaded_file в Linux

Тема в разделе "PHP для новичков", создана пользователем Alexandrinho, 7 фев 2020.

  1. Alexandrinho

    Alexandrinho Новичок

    С нами с:
    5 дек 2019
    Сообщения:
    19
    Симпатии:
    0
    Всем привет!

    Проблема такая: стоит XAMPP, при использовании функции move_uploaded_file в lampp/temp/ создается временный файл для последующего перемещения в директорию сайта, и на этом этапе появляются ошибки доступа и перемещение не происходит:
    Warning: move_uploaded_file(../img/494631.jpg): failed to open stream: Отказано в доступе in .......
    Warning: move_uploaded_file(): Unable to move '/opt/lampp/temp/phpVPVQHi' to '../img/494631.jpg' in ......

    Как это победить? Как правильно выставить права на вновь создаваемые временные файлы
     
  2. g1e8

    g1e8 Новичок

    С нами с:
    17 окт 2019
    Сообщения:
    29
    Симпатии:
    2
    сделай права на папку "/opt/lampp...." - чтение-запись всем, а потом лишнее того
    вроде с правами проблема.... у меня Linux, но вроде они похожи
     
    Amikta нравится это.
  3. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    2.326
    Симпатии:
    461
    Адрес:
    Татарстан
    Тут наверное проблеме не откуда - а куда. Попробуте адекватный путь назначения, без всяких .. в начале
     
  4. Alexandrinho

    Alexandrinho Новичок

    С нами с:
    5 дек 2019
    Сообщения:
    19
    Симпатии:
    0
    Всем спасибо, проблема действительно была в правах на конечную папку.
     
  5. Amikta

    Amikta Новичок

    С нами с:
    9 фев 2020
    Сообщения:
    1
    Симпатии:
    0
    Адрес:
    Ленинградская область
    Спасибо! та же проблема была - помогло
     
  6. Alexandrinho

    Alexandrinho Новичок

    С нами с:
    5 дек 2019
    Сообщения:
    19
    Симпатии:
    0
    Код (Text):
    1. define('WWW_ROOT', SITE_ROOT . 'public/');
    Что вы имеете ввиду под "адекватный путь"?
    Честно говоря, мне этот относительный вариант тоже не нравится, но вот тогда какой вопрос:

    есть структура сайта: config, public, engine, templates, data
    В config/config.php определены пути до всех директорий, сначала определен site_root -
    Код (Text):
    1. define('SITE_ROOT', __DIR__ . '/../');
    , затем все остальные, к примеру
    Код (Text):
    1. define('WWW_ROOT', SITE_ROOT . 'public/');
    .

    Вопрос: как правильно прописать в конфиге путь к public/img, чтобы затем всё оттуда корректно подгружалось на разные страницы из разных директорий?

    Пробовал
    Код (Text):
    1. define('IMG_ROOT', WWW_ROOT . 'img/');
    или
    Код (Text):
    1. define('IMG_ROOT', SITE_ROOT . 'public/img/');
    - не работает, и приходится в каждой функции прописывать относительный путь, что крайне смущает.
     
  7. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    7.681
    Симпатии:
    1.487
    Не люблю я все эти точки в коде, никогда не знаешь, какая функция будет их раскрывать, какая нет. есть https://www.php.net/dirname
     
    miketomlin нравится это.
  8. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    2.680
    Симпатии:
    425
    А как конфиг подключается? Тоже через __DIR__? :)
    --- Добавлено ---
    В смысле подгружалось? Случаем не попутал с формированием адресов?
    --- Добавлено ---
    Тоже используй абс. адреса. Тоже формируй их с использованием предопределенной базы.
     
  9. Alexandrinho

    Alexandrinho Новичок

    С нами с:
    5 дек 2019
    Сообщения:
    19
    Симпатии:
    0
    Прописал через dirname:
    Код (Text):
    1. define('SITE_ROOT', dirname(__DIR__) . '/');
    2. define('WWW_ROOT', SITE_ROOT . 'public/');
    3. define('IMG_DIR', WWW_ROOT . 'img/');
    Изображение все равно не грузится, хотя путь верный прописан:
    Код (Text):
    1. <img src="/home/garrison_mc/www/alexsite1.my/public/img/1.jpg">
    Но почему не работает?
     
  10. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    2.680
    Симпатии:
    425
    Потому что вы проигнорили мой пост.
    --- Добавлено ---
    Путаете пути в ФС с адресами.
     
  11. Alexandrinho

    Alexandrinho Новичок

    С нами с:
    5 дек 2019
    Сообщения:
    19
    Симпатии:
    0
    На public/index.php, например, подключается так:
    Код (Text):
    1. require_once(dirname(__DIR__) . '/config/config.php');
    Неправильно?
     
  12. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    2.680
    Симпатии:
    425
    Я сейчас не про это, хотя это тоже не самый лучший вариант.
     
  13. Alexandrinho

    Alexandrinho Новичок

    С нами с:
    5 дек 2019
    Сообщения:
    19
    Симпатии:
    0
    т.е конкретики не ждать, я так понимаю?
     
  14. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    2.680
    Симпатии:
    425
    Mля, открой глаза.
    --- Добавлено ---
    В ссылках/теге img у тебя должны быть адреса!
     
  15. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    2.680
    Симпатии:
    425
    Что касается подключения файлов/определения путей в ФС, определи базу прямо во фронте и везде используй ее, уже начиная с подключения конфига. Исключения могут быть, но только для относительно независимых частей сайта, например внутри шаблона оформления можешь снова использовать __DIR__ для подключения отдельных блоков и т.п., вместо того чтобы использовать константу, определенную вне шаблона.
     
  16. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    7.681
    Симпатии:
    1.487
  17. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    10.292
    Симпатии:
    1.023
    Адрес:
    там-сям
    во фронт-контроллере, т.е. в точке входа. "фронт" слишком многозначное слово :)
     
  18. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    2.680
    Симпатии:
    425
    @artoodetoo, контекст – великая сила, так что кому надо, меня поймет. Но тут спорить, конечно, бессмысленно. Постараюсь хотя бы в этом разделе выражаться более точно :)
    --- Добавлено ---
    P.S. Меня смутило, что автор выше показывал более-менее вменяемые определения констант. Но а когда он поплыл на элементарщине, я не успел быстро сменить стиль речи. Наверное, от шока :D
    --- Добавлено ---
    @Alexandrinho, приветствую. «Вкурил» текст по ссылке выше? Если да, скажи честно, как тебя можно было назвать до того :)
     
  19. Alexandrinho

    Alexandrinho Новичок

    С нами с:
    5 дек 2019
    Сообщения:
    19
    Симпатии:
    0
    да, «вкурил», спасибо mkramer за статью. А до этого меня можно было назвать «новичком», и вопрос был задан в разделе «для новичков», где наверное естественно, что можно встретить элементарные вопросы
     
  20. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    2.680
    Симпатии:
    425
    @Alexandrinho, на будущее: когда вам задают конкретны вопросы вроде
    на них нужно отвечать. А если вопрос не понятен, не стесняться и просить уточнить.