Я продолжаю получать эту ошибку при попытке настроить каталог загрузки с 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_file (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 относительно файла загрузки.
Что я здесь делаю неправильно?
Это связано с тем, что images
и tmp_file_upload
доступны только для пользователей root
. Для загрузки на работу нам необходимо сделать владельца этих папок таким же, как владелец процесса httpd, или сделать их доступными для всего мира (плохая практика).
$ps aux | grep httpd
$ps aux | grep httpd
. Первый столбец будет владельцем, как правило, nobody
будет Измените владельца images
и tmp_file_upload
чтобы стать nobody
или nobody
либо владельцем, которого вы нашли на шаге 1.
$sudo chown nobody /var/www/html/mysite/images/
$sudo chown nobody /var/www/html/mysite/tmp_file_upload/
images
tmp_file_upload
и 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, обратите внимание, что он также говорит об директиве open_basedir
.
Вы также можете запустить этот script, чтобы узнать владельца процесса Apache:
<?php echo exec('whoami'); ?>
И затем измените владельца каталога назначения на то, что у вас есть. Используйте команду:
chown user destination_dir
И затем используйте команду
chmod 755 destination_dir
для изменения разрешения каталога назначения.
<?php echo exec('whoami'); ?>
Кто-нибудь знает почему?
Если у вас Mac OS X, перейдите в корень файла или папку вашего веб-сайта.
Затем щелкните правой кнопкой мыши по нему, идите, чтобы получить информацию, идите в самую нижнюю часть (Совместное использование и Разрешения), откройте это, измените все доступные для чтения чтения и записи. Обязательно откройте замок, перейдите к значку настройки и выберите "Применить" к закрытым элементам...
Изменить разрешения для этой папки
# chmod -R 0755 /var/www/html/mysite/images/
Это сработало для меня.
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(/.*)?'
Я столкнулся с этой связанной проблемой даже после того, как уже успешно работал с композитором. Я обновил композитор, и при запуске composer install
или php composer.phar install
я получил:
... не удалось открыть поток: Permission denied...
После многих исследований выясняется, что предыдущие ответы об изменении разрешений для папки работали. Сейчас они немного разные.
В моей установке, на OS X, файл кэша находится в /Users/[USER]/.composer/cache
, и у меня возникли проблемы, потому что кэш файл принадлежал root. Меняя репликацию прав собственности на ".composer", мой пользователь решил проблему.
Это то, что я сделал:
sudo chown -R [USER] cache
Затем я снова запустил композитор и установил wool!
Я хотел добавить это к предыдущим предложениям. Если вы используете версию Linux с SELinux, то вы также должны выполнить ее в оболочке:
chcon -R --type httpd_sys_rw_content_t /path/to/your/directory
Наряду с предоставлением прав пользователя веб-сервера либо через группу, либо с изменением владельца каталога.
restorecon -R -v /path/to/your/directory
вероятно, также необходимо включить в это впоследствии. access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/...
Попробуйте следующее:
открыть/etc/apache2/envvars
sudo gedit /etc/apache2/envvars
замените www-data
на your_username
"export APACHE_RUN_USER=www-data"
заменить
export APACHE_RUN_USER='your_username'
Эта проблема возникает, когда пользователь 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-datap >
chown -R user:www-data yourprojectfoldername
chmod 775 yourprojectfoldername
Просто измените разрешение tmp_file_upload на 755 Ниже приведена команда chmod -R 755 tmp_file_upload
Попробуйте это
find /var/www/html/mysite/images/ -type f -print0 | xargs -0 chmod -v 664
Решение так просто. Щелкните правой кнопкой мыши папку IMAGE (целевая), перейдите к свойствам, щелкните вкладку разрешений и измените доступ других к созданию и удалению файлов.