php linux apache upload

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).

  1. 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
  2. Cambie el propietario de las images y tmp_file_upload para que se convierta en nobody 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/

  3. Las images Chmod y tmp_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/

  4. 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:

  1. abrir / etc / apache2 / envvars

    sudo gedit /etc/apache2/envvars

  2. reemplace www-data con su your_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