2009-12-08 4 views
2

Voici le problème exact. J'ai une fonction de chargement automatique mis en place avec un morceau de code qui ressemble à ceci:Pourquoi PHP n'inclut pas mon fichier lorsqu'il existe clairement?

if(file_exists($class_file)) 
{ 
    include($class_file); 
    return true; 
} 

Toutefois, lorsque $class_file est réglé à une certaine valeur, je reçois un include erreur:

Error String: include(includes/php/utilities/calendar_event_html.utility.php) 
[function.include]: failed to open stream: No such file or directory 

Il fonctionne bien pour d'autres fichiers et quand je passe à travers ce code avec un débogueur, il est clair que PHP croit que le fichier existe, mais il semble que include ne le fait pas. Est-ce que quelqu'un a une idée de ce qui se passe?

+3

Peut-être que PHP n'a pas les permissions pour accéder à ce fichier? – RaYell

+0

@ ApoY2k Eh bien, comme vous pouvez le voir dans l'erreur, le contenu est 'includes/php/utilities/calendar_event_html.utility.php', mais cela fonctionne très bien avec quelque chose comme' includes/php/utilities/calendar_header_html.utility.php '- les deux doivent exister car je fais' file_exists' avant. –

+0

Le code ci-dessus est-il exactement le même que celui que vous utilisez dans votre application? Si non, l'inclusion se produit-elle dans un autre fichier que file_exists? – halfdan

Répondre

9

A partir du manuel:

Note: The check is done using the real UID/GID instead of the effective one. 

Cela signifie que le fichier existe, mais il est possible qu'il ne soit pas accessible par l'UID/GID votre instance de PHP fonctionne avec. Je vous suggère de vérifier les autorisations de ce fichier.

Meilleurs voeux,
Fabian

+0

Je suis sous Windows donc je ne pensais pas que les permissions seraient un problème (elles ne l'ont jamais été auparavant), mais j'ai copié ce fichier particulier en utilisant Cygwin - je me demande si cela a changé les permissions du fichier. –

+0

Pouvez-vous reproduire ce comportement sur une autre machine? – halfdan

+0

Je n'ai pas essayé, mais j'ai eu quelques problèmes similaires avec certains fichiers javascript que j'ai copiés en utilisant Cygwin. –

0

Essayez d'ajouter ce bit de code de débogage:

echo "<pre>"; 
echo get_include_path(); 
echo "</pre>"; 

function.get-include-path

Cela renverra votre courant include_path, et vous pouvez le comparer avec votre $ class_file chaîne.

Questions connexes