2011-01-08 25 views
7

Tengo un problema extraño con la función PHP file_exists() en un servidor Linux.PHP file_exists() devuelve falso en algunos archivos

Al usar file_exists para verificar que la imagen esté en el servidor antes de editarla, a veces fallará sin motivo aparente. Las rutas de archivos son absolutas y las he comprobado a través de ssh que son 100% en la ruta especificada.

Las imágenes que fallen file_exists() seguirán mostrándose en el navegador. El código no hace una diferencia, un var_dump(file_exists('/home/user/path/image.jpg')); básico devolverá falso.

Los permisos/propiedades de archivos son exactamente los mismos en todas las imágenes y directorios principales. El modo seguro está desactivado. No hay errores de PHP Estoy perplejo ahora y no estoy seguro de qué buscar.

Así es como las imágenes están en el servidor:

/home/user/public_html/images/location/1.jpg -- will work 
/home/user/public_html/images/location2/1.jpg -- won't work 
/home/user/public_html/images/location2/2.jpg -- will work 

tengo acceso root en el servidor de modo que si alguien tiene alguna idea con mucho gusto probarlos.

Gracias de antemano por su consejo, avíseme si necesita información adicional.

EDITAR: Para responder las preguntas en los comentarios a continuación.

  • Sí, las imágenes están allí, definitivamente no es el almacenamiento en caché.
  • El modo seguro está desactivado (ya lo mencioné en mi publicación).
  • Las rutas no son enlaces simbólicos, sino enlaces directos a la ubicación de los archivos en el servidor.
  • Phoenix, es consistente. Los archivos de trabajo siempre funcionarán y viceversa. Los nombres son 1.jpg, 1.thumb.jpg, etc. por lo que no es un problema con caracteres o espacios extraños.
[[email protected] ~]# ls -l /home/user/public_html/images/Hawkhurst/ 
total 92 
-rwxr-xr-x 1 user user 24501 Aug 11 2009 1.jpg 
-rwxr-xr-x 1 user user 1672 Aug 11 2009 1.thumb.jpg 
-rwxr-xr-x 1 user user 14983 Aug 11 2009 2.jpg 
-rwxr-xr-x 1 user user 1370 Aug 11 2009 2.thumb.jpg 
-rwxr-xr-x 1 user user 17238 Aug 11 2009 3.jpg 
-rwxr-xr-x 1 user user 1453 Aug 11 2009 3.thumb.jpg 
-rwxr-xr-x 1 user user 14168 Aug 11 2009 4.jpg 
-rwxr-xr-x 1 user user 1464 Aug 11 2009 4.thumb.jpg 
[[email protected] ~]# 

He tratado con permisos 777 y 755 que hacen ninguna diferencia. Por ejemplo en esta carpeta, 1 y 2 pueden funcionar mientras 3 & 4 no ...

Realicé una prueba rápida para ver cómo funciona apache/php y se ejecutan como nadie, pero esto no explica por qué algunas imágenes funcionan y otras no con los mismos permisos exactos.

EDIT 2: Problema resuelto. No puedo creer lo estúpido que era, algunos de los nombres de archivo que se llamaron desde una base de datos tenían espacios al final ... Quienquiera que haya hecho el script original no ejecutó ningún tipo de limpieza antes de guardarlos.

+0

Es el archivo realmente allí? Quizás veas imágenes debido al almacenamiento en caché. –

+0

¿Tiene safe_mode habilitado? – Mchl

+1

'Esta función devolverá FALSE para enlaces simbólicos que apuntan a archivos no existentes. – ajreal

Respuesta

4

Intente ejecutar ls -l /home/user/public_html/images/location/ y agregue el resultado a su pregunta.

Esto es muy probablemente un problema de permiso. PHP probablemente no tenga acceso de lectura al archivo.

+1

Si está ejecutando PHP en el servidor web Apache HTTPd, tenga en cuenta que generalmente Apache se ejecuta como usuario 'daemon'. Verifique si ese usuario en particular ha requerido permisos. –

1

Después de muchas búsquedas en la web, encontré la solución yo mismo. Espero que sea útil para otras personas: Asegúrese de que el Usuario y el Grupo que están configurados en su apache httpd.conf son los mismos que el grupo de apache y el usuario.

1

Quizás, en un nombre del archivo hay un símbolo de espacio en blanco. Es importante.

0

También tuve problemas para obtener el resultado correcto. Resulta que para mí fue un problema de permiso ubicado en la carpeta. Debe asegurarse de que las carpetas tengan el permiso de ejecución para el usuario de Apache. solucionarlo acabo de hacer esto en mi linux-cuadro: chmod g + x csv_files

Saludos cordiales Ivan

Cuestiones relacionadas