перемещение загруженного файла дает ошибку "не удалось открыть поток: разрешение отказано" после всех конфигураций, которые я сделал
Я продолжаю получать эту ошибку при попытке настроить каталог загрузки с 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, или сделать их глобально доступными для записи (плохая практика).
- Проверьте владельца процесса apache:
$ps aux | grep httpd
. Первый столбец будет владельцем, как правило, это будетnobody
-
сменить владельца
images
иtmp_file_upload
статьnobody
или все, что владелец вы нашли в шаге 1.$sudo chown nobody /var/www/html/mysite/images/ $sudo chown nobody /var/www/html/mysite/tmp_file_upload/
-
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/
для получения более подробной информации, почему это происходит, проверьте руководство 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, перейдите в корень файла или папку вашего сайта.
затем щелкните правой кнопкой мыши на нем, перейдите, чтобы получить информацию, перейдите к самому низу (Общий Доступ И Права Доступа), откройте это, измените все только для чтения и записи. Обязательно откройте замок, перейдите к значку настройки и выберите применить с приложенной детали...
я столкнулся с этой связанной проблемой даже после успешного запуска 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(/.*)?'
попробуйте это:
-
открыть /etc/apache2 / envvars
sudo gedit /etc/apache2/envvars
-
заменить
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
решение настолько легко. Щелкните правой кнопкой мыши папку IMAGE (destination), перейдите к свойствам, перейдите на вкладку разрешения и измените другие права доступа на создание и удаление файлов.