Я продолжаю получать эту ошибку при попытке настроить каталог загрузки с 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 в отношении файла загрузки.
Что я здесь делаю не так?
Ответ 1
Это происходит потому, что 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 теперь может быть доступен владельцам для записи.
$ 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.
Ответ 2
Вы также можете запустить этот скрипт, чтобы узнать владельца процесса Apache:
<?php echo exec('whoami'); ?>
А затем измените владельца целевого каталога на того, что у вас есть. Используйте команду:
chown user destination_dir
А затем используйте команду:
chmod 755 destination_dir
для изменения разрешения каталога назначения.
Ответ 3
Я столкнулся с похожей проблемой даже после того, как уже успешно запустил composer. Я обновил composer, а при запуске composer install или php composer.phar install получил:
... не удалось открыть поток: в доступе отказано ...
После долгих исследований выяснилось, что предыдущие ответы об изменении разрешений для папки не сработали. Сейчас это просто немного другие каталоги.
В моей установке на OS X файл кеша находится внутри /Users/[USER]/.composer/cach, и у меня были проблемы, потому что файл кеша принадлежал пользователю root. Рекурсивная смена владельца '.composer' для моего пользователя решила проблему. Вот, что я сделал:
sudo chown -R [USER] cache
Затем я снова запустил установку composer и все заработало!
Ответ 4
Эта проблема возникает, когда пользователь 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
Ответ 5
Попробуйте это:
откройте /etc/apache2/envvars
sudo gedit /etc/apache2/envvars.
замените www-data своим your_username
"export APACHE_RUN_USER=www-data"
замените
export APACHE_RUN_USER='your_username'.
Web