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

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

Что я здесь делаю неправильно?

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

Это связано с тем, что images и tmp_file_upload доступны только для пользователей root . Для загрузки на работу нам необходимо сделать владельца этих папок таким же, как владелец процесса httpd, или сделать их доступными для всего мира (плохая практика).

  1. Проверьте владельца процесса apache: $ps aux | grep httpd $ps aux | grep httpd . Первый столбец будет владельцем, как правило, nobody будет
  2. Измените владельца 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/ 
  3. 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/ 
  4. Для получения дополнительной информации о том, почему это происходит, проверьте руководство 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 

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

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

  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' 

Если у вас 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 (место назначения), перейдите к свойствам, щелкните вкладку разрешения и измените доступ других к созданию и удалению файлов .