cakephp cakephp-2.0 cakephp-2.1

cakephp - SplFileInfo:: openFile(/ app/tmp/cache/persistent/cake_core_cake_console_): no se pudo abrir la transmisión: permiso denegado en/lib/…/FileEngine.php line 293



cakephp-2.0 cakephp-2.1 (8)

Creo que la razón del problema ya está explicada, ya que el usuario web no puede acceder al cron en el usuario root y los archivos creados en tmp. Las otras soluciones no funcionaron para mí y no quise establecer los permisos de tmp en 777 , terminé configurando un trabajo cron para el usuario web, específicamente en Debian sería

crontab -u www-data -e

Tomado de esta respuesta ¿Cómo especificar en crontab por qué usuario ejecutar el script?

Estoy trabajando en un proyecto CakePHP 2. Originalmente comenzó en 2.0.x y luego migró recientemente a 2.1.0. A lo largo de todo el proceso de desarrollo, he estado recibiendo el siguiente mensaje de error.

Aparece de forma impredecible en la parte superior de la página. Puede ser cuando solo estoy viendo diferentes páginas, o incluso después de agregar un registro a la base de datos (sin embargo, el registro se guarda correctamente).

Warning: SplFileInfo::openFile(/var/www/cake_prj/app/tmp/cache/persistent/cake_core_cake_console_): failed to open stream: Permission denied in /var/www/cake_prj/lib/Cake/Cache/Engine/FileEngine.php on line 293

Establecí de forma recursiva el propietario y el grupo de la carpeta tmp a apache, y aún recibí el mensaje. Además, a continuación, establezco recursivamente los permisos para leer, escribir y ejecutar para todos (chmod 777). El mensaje de error todavía aparece.

Incluso después de cambiar el propietario, el grupo y los permisos, el archivo en cuestión:

cake_prj/app/tmp/cache/persistent/cake_core_cake_console_

tendrá su propietario y grupo configurados de nuevo a raíz, y sus permisos establecidos de manera predeterminada.

¿Qué podría estar causando este problema? ¿Hay una manera de asegurar que cada vez que se genere este archivo, siempre tendrá que ser apache: apache con permisos de lectura / escritura / ejecución?


En lugar de configurar dar acceso de lectura / escritura a todos en el directorio tmp / cache, hice esto:

chgrp -R www-data app/tmp chmod -R g+rw app/tmp find app/tmp -type d -exec chmod g+s {} /;

Establecer el grupo de directorios para el usuario de Apache y luego configurar el bit setgid le permitirá asegurarse de que los archivos creados en ese directorio obtengan los permisos de grupo adecuados, independientemente de qué usuario ejecute el script de shell. Esto también le permite excluir permisos de lectura / escritura a "otros" usuarios.


Es necesario que el servidor web pueda escribir el directorio app / tmp. Averigüe a qué usuario se ejecuta su servidor web (en mi caso _www) y cambie la propiedad del directorio app / tmp a ese usuario: $ chown -R _www app/tmp


Hubo un informe de error allí http://cakephp.lighthouseapp.com/projects/42648/tickets/2172 pero se consideró que no era un error.

Lo que noté personalmente es que algunos propietarios de archivos pueden ser modificados cuando usa el script cake en la consola (por ejemplo, para hacer un bake ). Los archivos modificados pertenecen al usuario que usa en la consola.

¿Significaría esto que llamas cake mientras estás siendo root? ¿O tienes algún trabajo cron que llame al script shell de Cake?

Personalmente, ahora tengo el hábito de devolver todo el contenido de la carpeta tmp al usuario apache después de haber utilizado el script de cake y parece que evita que aparezca la advertencia.


Otra solución. Se produjo un conflicto de permisos porque varios usuarios comparten los mismos archivos. Por lo tanto, si dividimos el directorio de caché en múltiples subdirectorios, no se producirá ningún conflicto y no se requerirá un cambio de permiso predeterminado de directorios y archivos.

De la siguiente manera, cada directorio de sub caché se define por el tipo de manejador php api:

define(''CACHE'', TMP . ''cache'' . DS . php_sapi_name() . DS);

  • Cuando se navega por el sitio web, el usuario activo es apache. Y el subdirectorio es cache / apache2handler .
  • Cuando se ejecuta un lote, el usuario activo es un usuario root o de inicio de sesión. Y el subdirectorio es cache / cli .

Por otro lado, la cuenta de usuario actual se puede usar para nombrar un subdirectorio. Compruebe en ¿Cómo comprobar qué usuario php se está ejecutando?


Puedes resolver esto agregando una máscara a tu configuración en core.php

Cache::config(''default'', array( ''engine'' => ''File'', ''mask'' => 0666, ));


Si se encuentra con el error SplFileInfo en CakePHP2 y está absolutamente seguro de que sus permisos de archivo / directorio están configurados correctamente, entonces otra cosa que debe verificar es su versión de PHP. Cake2 requiere PHP 5.2.8 o superior y, aunque usualmente recibirás una alerta en la página predeterminada si estuvieras usando la versión incorrecta, no recibirías una alerta si hubieras desarrollado tu aplicación en un servidor y luego la hubieras movido a otro. .

Experimenté este error después de desarrollar una aplicación Cake2 en un servidor PHP5.3 y luego moverla a un servidor PHP 5.1. La actualización a 5.2.17 (que está por encima de 5.2.8) resolvió el problema.


Utilizar esta ..

cd cakephp/app/tmp/cache/persistent sudo chmod 666 myapp* cd .. cd models sudo chmod 666 myapp*