Я продолжаю получать эту ошибку при попытке настроить каталог загрузки с 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 в отношении файла загрузки.
Что я здесь делаю не так?
php
upload
file-permissions
user63898
источник
источник
Ответы:
Это потому, что
images
иtmp_file_upload
доступны для записи толькоroot
пользователю. Чтобы загрузка работала, нам нужно сделать владельца этих папок таким же, как и владельца процесса httpd, ИЛИ сделать их глобально доступными для записи (плохая практика).$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 , обратите внимание, что в нем также говорится о
open_basedir
директиве.источник
jacob
(мне, поскольку это моя локальная машина), а во всех папках есть755
или775
.sudo service httpd restart
после изменения разрешений. Затем она работала :) Вместо изменения владельцаchown
я добавил мой процесс апачский к группе «WWW» и добавили эти каталоги в одной и той же группы «WWW» черезchgrp
Вы также можете запустить этот сценарий, чтобы узнать владельца процесса Apache:
<?php echo exec('whoami'); ?>
А затем измените владельца целевого каталога на того, что у вас есть. Используйте команду:
А затем используйте команду
chmod 755 destination_dir
чтобы изменить разрешение каталога назначения.
источник
<?php echo exec('whoami'); ?>
. Кто-нибудь знает почему?exec('whoami')
. Сэкономил мне еще 30 минут. был chowning Ubuntu пользователяwww-data
? обычноЕсли у вас Mac OS X, перейдите в корень файла или в папку вашего веб-сайта.
Затем щелкните его правой кнопкой мыши, перейдите для получения информации, перейдите в самый низ ( Совместное использование и разрешения ), откройте его, измените все только для чтения на чтение и запись. Обязательно откройте замок, перейдите к значку настройки и выберите Применить к вложенным элементам ...
источник
/private/var/tmp
на моем Mac.Это сработало для меня.
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(/.*)?'
источник
Я хотел добавить это к предыдущим предложениям. Если вы используете версию 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/…Изменить разрешения для этой папки
# chmod -R 0755 /var/www/html/mysite/images/
источник
Попробуй это:
открыть / etc / apache2 / envvars
замените
www-data
своимyour_username
"export APACHE_RUN_USER=www-data"
заменить
export APACHE_RUN_USER='your_username'
источник
Я столкнулся с этой связанной проблемой даже после того, как уже успешно запустил composer. Я обновил композитор, и при запуске
composer install
илиphp composer.phar install
получил:После долгих исследований выяснилось, что предыдущие ответы об изменении разрешений для папки сработали. Сейчас это просто немного другие каталоги.
В моей установке на OS X файл кеша находится внутри
/Users/[USER]/.composer/cache
, и у меня были проблемы, потому что файл кеша принадлежал пользователю root. Рекурсивная смена владельца '.composer' моему пользователю решила проблему.Вот что я сделал:
Затем я снова запустил установку композитора и вуаля!
источник
Эта проблема возникает, когда пользователь 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
источник
Решение очень простое. Щелкните правой кнопкой мыши папку ИЗОБРАЖЕНИЕ (место назначения), перейдите к свойствам, щелкните вкладку разрешений и измените доступ других пользователей для создания и удаления файлов .
источник
Просто измените разрешение tmp_file_upload на 755. Ниже приводится команда chmod -R 755 tmp_file_upload.
источник
Попробуй это
find /var/www/html/mysite/images/ -type f -print0 | xargs -0 chmod -v 664
источник
Бывает, если
SELinux
включено. Отключите это/etc/selinux/config
, установивSELINUX=disabled
и перезапустив сервер.источник