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

Я продолжаю получать эту ошибку при попытке настроить каталог загрузки с 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 permissions:

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_file(изображений/робот.jpg): не удалось открыть поток: разрешение отказано в /var / www / html/mysite / process.php on line 78

предупреждение: move_uploaded_file (): невозможно переместить '/tmp/phpsKD2Qm' в 'изображения/робот.в JPG' в /var/www в/HTML-код/мой_сайт/процесс.php on line 78

как вы можете видеть, он никогда не возьмет настройки из PHP.ini-файл относительно файла загрузки.

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

12 ответов


это так 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 Теперь можно записать владельцем, если это необходимо [кажется, у вас уже есть это на месте]. Упоминается в ответе @ Dmitry Teplyakov.

    $ 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, обратите внимание, что он также говорит о


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

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

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

chown user destination_dir

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

chmod 755 destination_dir

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


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

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


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

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


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

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

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

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

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

sudo chown -R [USER] cache

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


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

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(/.*)?'

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

  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' 
    

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

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

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


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

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

выполнить этот 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-data

chown -R user:www-data yourprojectfoldername

chmod 775 yourprojectfoldername

попробуй такое

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


просто измените разрешение tmp_file_upload на 755 Следующие команды chmod-R 755 tmp_file_upload


решение настолько легко. Щелкните правой кнопкой мыши папку IMAGE (destination), перейдите к свойствам, перейдите на вкладку разрешения и измените другие права доступа на создание и удаление файлов.