Я продолжаю получать эту ошибку при попытке настроить каталог загрузки с 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
.
Вы также можете запустить этот скрипт, чтобы узнать владельца процесса Apache:
<?php echo exec('whoami'); ?>
А затем измените владельца целевого каталога на то, что у вас есть. Используйте команду:
chown user destination_dir
Затем используйте команду
chmod 755 destination_dir
для изменения разрешения каталога назначения.
Изменить разрешения для этой папки
# chmod -R 0755 /var/www/html/mysite/images/
Я столкнулся с этой проблемой, даже после того, как уже успешно работал композитор. Я обновил композитор, а при запуске composer install
или composer install
php composer.phar install
я получил:
… не удалось открыть поток: Permission denied …
После многих исследований выясняется, что предыдущие ответы относительно изменения разрешений для папки работали. Сейчас они немного разные.
В моей установке, в OS X, файл кеша находится в /Users/[USER]/.composer/cache
, и у меня возникли проблемы, потому что кэш-файл принадлежал root. Меняя репликацию прав собственности на «.composer», мой пользователь решил проблему.
Это то, что я сделал:
sudo chown -R [USER] cache
Потом я снова запустил композитор и вуаля!
Попробуй это:
открыть / etc / apache2 / envvars
sudo gedit /etc/apache2/envvars
замените www-data
своим your_username
"export APACHE_RUN_USER=www-data"
заменить
export APACHE_RUN_USER='your_username'
Если у вас Mac OS X, перейдите в корень файла или папку вашего веб-сайта.
Затем щелкните правой кнопкой мыши по нему, идите, чтобы получить информацию, идите в самую нижнюю часть (« Совместное использование и разрешения» ), откройте это, измените все только на чтение, чтобы читать и писать. Обязательно закройте замок, перейдите к значку настройки и выберите « Применить» к закрытым элементам …
Это сработало для меня.
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(/.*)?'
Эта проблема возникает, когда пользователь apache (www-data) не имеет права на запись в папку. Чтобы решить эту проблему, вам нужно поместить пользователя в группу www-data.
Я только что сделал это:
Выполните этот php-код <?php echo exec('whoami'); ?>
<?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
Я хотел добавить это к предыдущим предложениям. Если вы используете версию Linux с включенным SELinux, вы также должны выполнить ее в оболочке:
chcon -R --type httpd_sys_rw_content_t /path/to/your/directory
Наряду с предоставлением разрешения пользователя веб-сервера либо через группу, либо с изменением владельца каталога.
Попробуй это
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 (место назначения), перейдите к свойствам, щелкните вкладку разрешения и измените доступ других к созданию и удалению файлов .