перемещение загруженного файла выдает ошибку "не удалось открыть поток: отказано в разрешении" после всех настроек, которые я сделал


Я продолжаю получать эту ошибку при попытке настроить каталог загрузки с помощью Apache 2.2 и PHP 5.3 на CentOS.

В php.ini:

upload_tmp_dir = /var/www/html/mysite/tmp_file_upload/

В httpd.conf:

Directory /var/www/html/mysite/tmp_file_upload/>
    Options  -Indexes
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>
<Directory /var/www/html/mysite/images/>
                Options -Indexes
</Directory>

Права доступа к каталогу CentOS:

drwxrwxr-x 2 root root 4096 Nov 11 10:01 images
drwxr-xr-x 2 root root 4096 Nov 12 04:54 tmp_file_upload

Что бы я ни делал, я продолжаю получать эту ошибку от PHP при загрузке файла:

Предупреждение: move_uploaded_файл(images/robot.jpg ): не удалось открыть поток: В разрешении отказано/var/www/html/mysite/process.php в строке 78

Предупреждение: move_uploaded_file(): Не удается переместить '/tmp/phpskd2qm' в 'images/robot.jpg 'в/var/www/html/mysite/process.php в строке 78

Как вы можете видеть, он никогда не брал конфигурацию из файла php.ini в отношении загружаемого файла.

Что я здесь делаю не так?

Author: Peter Mortensen, 2011-11-12

12 answers

Это связано с тем, что images и tmp_file_upload доступны для записи только пользователем root. Для загрузки на работу нам нужно сделать владельца этих папок таким же, как владелец процесса httpd, ИЛИ сделать их глобально доступными для записи (плохая практика).

  1. Проверьте владельца процесса apache: $ps aux | grep httpd. Первый столбец будет владельцем, как правило, это будет nobody
  2. Измените владельца images и tmp_file_upload, чтобы стать nobody или любым другим владельцем, которого вы нашли на шаге 1.

    $sudo chown nobody /var/www/html/mysite/images/
    
    $sudo chown nobody /var/www/html/mysite/tmp_file_upload/
    
  3. Chmod images и tmp_file_upload теперь для записи владельцем, если это необходимо [Кажется, у вас это уже есть]. Упоминается в ответе @Дмитрий Тепляков.

    $ sudo chmod -R 0755 /var/www/html/mysite/images/
    
    $ sudo chmod -R 0755 /var/www/html/mysite/tmp_file_upload/
    
  4. Для получения более подробной информации о причинах такого поведения ознакомьтесь с руководством http://php.net/manual/en/ini.core.php#ini.upload-tmp-dir , обратите внимание, что в нем также говорится о директиве open_basedir.

 160
Author: Laith Shadeed, 2017-08-22 12:25:19

Вы также можете запустить этот скрипт, чтобы узнать владельца процесса Apache:

<?php echo exec('whoami'); ?>

А затем измените владельца целевого каталога на то, что у вас есть. Используйте команду:

chown user destination_dir

, А затем используйте команду

chmod 755 destination_dir

Чтобы изменить разрешение на каталог назначения.

 58
Author: twlkyao, 2017-10-27 01:50:41

Если у вас установлена Mac OS X, перейдите в корневой каталог файла или папку вашего веб-сайта.

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

 14
Author: hawkar ITstudent, 2017-10-27 03:17:26

Измените разрешения для этой папки

# chmod -R 0755 /var/www/html/mysite/images/

 10
Author: Dmitry Teplyakov, 2011-11-12 10:41:45

Я столкнулся с этой связанной проблемой даже после того, как уже успешно запустил composer. Я обновил composer, и при запуске composer install или php composer.phar install я получил:

...не удалось открыть поток: в разрешении отказано...

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

В моей установке на OS X файл кэша находится в /Users/[USER]/.composer/cache, и у меня возникли проблемы, потому что файл кэша принадлежал root. Изменение права собственности на ".composer" рекурсивно для моего пользователя решило проблему.

Вот что я сделал:

sudo chown -R [USER] cache

Затем я снова запустил установку композитора и вуаля!

 7
Author: abaumer, 2017-10-27 03:15:16

Это сработало для меня.

sudo adduser <username> www-data
sudo chown -R www-data:www-data /var/www
sudo chmod -R g+rwX /var/www

Затем выйдите из системы или перезагрузитесь.

Если SELinux жалуется, попробуйте выполнить следующее

sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www(/.*)?'
sudo restorecon -Rv '/var/www(/.*)?'
 7
Author: julekgwa, 2017-12-24 11:18:13

Попробуйте это:

  1. Открыть /etc/apache2/envvars

    sudo gedit /etc/apache2/envvars
    
  2. Замените www-data вашим your_username

    "export APACHE_RUN_USER=www-data" 
    

    Заменить на

    export APACHE_RUN_USER='your_username' 
    
 5
Author: redrider, 2015-07-14 05:43:22

Я хотел добавить это к предыдущим предложениям. Если вы используете версию Linux, в которой включен SELinux, вам также следует выполнить это в оболочке:

chcon -R --type httpd_sys_rw_content_t /path/to/your/directory

Наряду с предоставлением разрешений пользователю вашего веб-сервера либо через группу, либо через смену владельца каталога.

 5
Author: Chris, 2017-10-27 03:19:30

Эта проблема возникает, когда пользователь apache (www-данные) не имеет разрешения на запись в папку. Для решения этой проблемы вам необходимо поместить пользователя в группу www-данные.

Я только что сделал это:

Выполните этот php-код <?php echo exec('whoami'); ?>, чтобы узнать пользователя, используемого apache. После этого выполните команды в терминале:

user@machine:/# cd /var/www/html

user@machine:/var/www/html# ls -l

Он вернет что-то вроде этого:

total of files

drwxr-xr-x 7 user group size date folder

Я сохранил пользователя, но изменил группу на www-данные

chown -R user:www-data yourprojectfoldername

chmod 775 yourprojectfoldername
 4
Author: Jefferson Romano, 2016-02-15 16:58:21

Попробуйте это

find /var/www/html/mysite/images/ -type f -print0 | xargs -0 chmod -v 664

 2
Author: Simone, 2011-11-12 10:34:42

Просто измените разрешение tmp_file_upload на 755 Ниже приведена команда chmod -R 755 tmp_file_upload

 2
Author: Sarang, 2012-11-22 06:57:28

Решение так просто. Только щелкните правой кнопкой мыши папку ИЗОБРАЖЕНИЯ (назначения), перейдите в свойства, перейдите на вкладку разрешения и измените доступ других пользователей к Создание и удаление файлов.

 1
Author: Basim, 2017-10-27 03:20:21