php - move_uploaded_file muestra el error "no se pudo abrir la secuencia: permiso denegado" después de todas las configuraciones que hice
linux apache (12)
Cambiar permisos para esta carpeta
# chmod -R 0755 /var/www/html/mysite/images/
Sigo recibiendo este error cuando intento configurar el directorio de carga con Apache 2.2 y PHP 5.3 en CentOS.
En php.ini:
upload_tmp_dir = /var/www/html/mysite/tmp_file_upload/
En 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>
Permisos de directorio 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
No importa lo que haga, sigo obteniendo este error de PHP cuando cargo el archivo:
Advertencia: move_uploaded_file (images / robot.jpg): error al abrir la transmisión: Permiso denegado en /var/www/html/mysite/process.php en la línea 78
Advertencia: move_uploaded_file (): no se puede mover ''/ tmp / phpsKD2Qm'' a ''images / robot.jpg'' en /var/www/html/mysite/process.php en la línea 78
Como puede ver, nunca tomó la configuración del archivo php.ini con respecto al archivo de carga.
¿Qué estoy haciendo mal aquí?
Este problema ocurre cuando el usuario de apache (www-data) no tiene permiso para escribir en la carpeta. Para resolver este problema, debe colocar al usuario dentro del grupo www-data.
Acabo de hacer esto:
Ejecute este código php <?php echo exec(''whoami''); ?>
<?php echo exec(''whoami''); ?>
descubrir el usuario utilizado por apache. Después, ejecuta los comandos en la terminal:
user@machine:/# cd /var/www/html
user@machine:/var/www/html# ls -l
Devolverá algo como esto:
total of files
drwxr-xr-x 7 user group size date folder
Mantuve al usuario pero cambié el grupo a www-data
chown -R user:www-data yourprojectfoldername
chmod 775 yourprojectfoldername
Esto funcionó para mí.
sudo adduser <username> www-data
sudo chown -R www-data:www-data /var/www
sudo chmod -R g+rwX /var/www
Luego cierre la sesión o reinicie.
Si SELinux
queja, intente lo siguiente
sudo semanage fcontext -a -t httpd_sys_rw_content_t ''/var/www(/.*)?''
sudo restorecon -Rv ''/var/www(/.*)?''
Esto se debe a que las images
y tmp_file_upload
solo pueden escribirse por el usuario root
. Para subir al trabajo, debemos hacer que el propietario de esas carpetas sea el mismo que el propietario del proceso httpd O hacer que puedan escribirse globalmente (mala práctica).
- Compruebe el propietario del proceso de apache:
$ps aux | grep httpd
$ps aux | grep httpd
. La primera columna será el propietario, típicamente no seránobody
Cambie el propietario de las
images
ytmp_file_upload
para que se convierta ennobody
o lo que sea que haya encontrado en el paso 1.$sudo chown nobody /var/www/html/mysite/images/ $sudo chown nobody /var/www/html/mysite/tmp_file_upload/
Las
images
Chmod ytmp_file_upload
ahora pueden ser editables por el propietario, si es necesario [Parece que ya tienes esto en su lugar]. Mencionado en @Dmitry Teplyakov respuesta.$ sudo chmod -R 0755 /var/www/html/mysite/images/ $ sudo chmod -R 0755 /var/www/html/mysite/tmp_file_upload/
Para obtener más detalles sobre por qué ocurrió este comportamiento, consulte el manual http://php.net/manual/en/ini.core.php#ini.upload-tmp-dir , tenga en cuenta que también habla sobre la directiva
open_basedir
.
La solución es tan fácil. Solo haga clic con el botón derecho en la carpeta IMAGE (destino), vaya a Propiedades, haga clic en la pestaña Permiso y cambie el acceso de otros a Crear y eliminar archivos .
Me encontré con este problema relacionado incluso después de haber ejecutado con éxito el compositor. Actualicé el compositor y, al ejecutar la composer install
o la composer install
php composer.phar install
, obtuve:
... no se pudo abrir la secuencia: Permiso denegado ...
Después de mucha investigación, resultó que las respuestas anteriores sobre el cambio de permisos para la carpeta funcionaron. Ahora son solo directorios ligeramente diferentes.
En mi instalación, en OS X, el archivo de caché se encuentra en /Users/[USER]/.composer/cache
, y estaba teniendo problemas porque el archivo de caché era propiedad de root. Cambiar la propiedad de ''.composer'' recursivamente a mi usuario resolvió el problema.
Esto es lo que hice:
sudo chown -R [USER] cache
Luego ejecuté la instalación del compositor nuevamente y ¡voilá!
Prueba esto
find /var/www/html/mysite/images/ -type f -print0 | xargs -0 chmod -v 664
Prueba esto:
abrir / etc / apache2 / envvars
sudo gedit /etc/apache2/envvars
reemplace
www-data
con suyour_username
"export APACHE_RUN_USER=www-data"
reemplazar con
export APACHE_RUN_USER=''your_username''
Quería agregar esto a las sugerencias anteriores. Si está utilizando una versión de Linux que tiene SELinux habilitado, entonces también debe ejecutar esto en un shell:
chcon -R --type httpd_sys_rw_content_t /path/to/your/directory
Junto con otorgar permisos de usuario a su servidor web ya sea a través de un grupo o cambiando el propietario del directorio.
Si tiene Mac OS X, vaya al directorio raíz del archivo o a la carpeta de su sitio web.
A continuación, haga clic con el botón derecho sobre él, vaya a obtener información, vaya al final ( Compartiendo y Permisos ), ábralo, cambie todo de solo lectura para leer y escribir. Asegúrese de abrir el candado, vaya al icono de configuración y elija Aplicar a los elementos adjuntos ...
Simplemente cambie el permiso de tmp_file_upload a 755 El siguiente es el comando chmod -R 755 tmp_file_upload
También puede ejecutar esta secuencia de comandos para averiguar el propietario del proceso de Apache:
<?php echo exec(''whoami''); ?>
Y luego cambie el propietario del directorio de destino a lo que tiene. Usa el comando:
chown user destination_dir
Y luego usa el comando
chmod 755 destination_dir
para cambiar el permiso de directorio de destino