php file_exists retourne false, même si le fichier existe pas sur mon linux
Cette question a été posée de nombreuses fois, mais aucune des réponses que j'ai trouvé m'a aidé.
J'essaie de le faire en php file_exists() fonctionne. Le seul scénario quand il fonctionne, c'est quand le fichier php est dans le même répertoire que le fichier à utiliser file_exist (), et en utilisant uniquement le nom de fichier (c'est à dire hors du chemin). Mais ce n'est pas conséquente comportement, veuillez voir ci-dessous.
Som informations:
- safe_mode=off
- pas de liens symboliques pour le répertoire 28
- pas d'espace dans le nom du fichier
- Tous les répertoires dans /var/www/html/smic/upload/28/a apache:apache 777 que l'autorisation.
- À l'aide de php 5.3
PHP:
echo getcwd()
clearstatcache();
$file = 'file:///var/www/html/smic/upload/28/ul.txt';
//Also tried like this
//$file = '/var/www/html/smic/upload/28/ul.txt';
if(file_exists($file)){
echo $file." exists";
}
getcwd() imprime /var/www/html/smic/modules/core/billet
La permission de le script php et le fichier à vérifier apache:apache 777.
Quelques détails sur la structure de répertoire:
[root@localhost 28]# pwd
/var/www/html/smic/upload/28
[root@localhost 28]# ls -l ul.txt
-rw-r--r--. 1 apache apache 2 Feb 9 10:50 ul.txt
[root@localhost 28]# chmod 777 ul.txt
[root@localhost 28]# ls -l ul.txt
-rwxrwxrwx. 1 apache apache 2 Feb 9 10:50 ul.txt
Le comportement n'a pas changé après avoir changer les droits du fichier. Le répertoire /28 a drwxr-xr-x. pour l'utilisateur apache et apache groupe
Pour le test, j'ai également déplacé le php-script /28, il a donné apache:apache 777 droits. Changé l' $fichier "ul.txt" (c'est à dire $fichier = 'ul.txt';). Cela fonctionne, l'ul.txt fichier est trouvé.
getcwd() imprime ensuite le fichier /var/www/html/smic/upload/28
Comme un autre test, j'ai essayé de trouver un autre fichier à l'exclusion de la voie dans le "billet" de répertoire, le fichier n'a pas été reconnu.
Je suis cogner ma tête...
Tout conseil est le bienvenue.
file://
régime?PHP 5.3, ajouté à mon post. J'ai presque uniquement essayé sans file://
OriginalL'auteur Nicsoft | 2012-02-09
Vous devez vous connecter pour publier un commentaire.
La permission du fichier seul n'est pas suffisant pour php pour évaluer file_exists. le processus qui exécute php aussi besoin de la permission de parcourir tous les répertoires parents de ce fichier pour l'obtenir.
Les vérifier un par un et vérifier que php peut lire et entrer (r-x)
OriginalL'auteur Timothée Groleau
Clutching at straws ici...
Essayez su - apache (ou quel que soit l'utilisateur de votre serveur web s'exécute.. apache2, www-data, etc..), et traversant le répertoire.
Y at-il .htaccess frapper sur, ou de toute autre restriction sur votre configuration d'apache?
Aussi, j'ai pris soin de l'autorisation est apache:apache 777 pour tous les sous-répertoires upp à et y compris /28.
OriginalL'auteur FreudianSlip
Gee, c'était un joli tuf. J'ai toujours assurez-vous que lorsque j'ai tout copier sur le web pour la première collez-le dans un normal texteditor afin de supprimer toutes les étranges/personnages cachés, puis copiez quel que soit le nouveau et le coller dans mon dev outil.
Comme je l'ai mentionné quelque part dans un commentaire, je n'ai pwd et copié le texte de mon serveur virtuel à mon osx. Mais ce que je ne pense pas que/savoir que l'étrange/personnages cachés pourraient suivre si je l'ai fait à partir de mon serveur linux, donc je n'ai pas assurez-vous de copier le tout par texteditor.
Je me suis souvenu que j'ai eu le problème il y a quelques temps lorsque j'ai copié à partir du web et pensé que cela pourrait être un problème de nature similaire. J'ai ouvert mon script dans un éditeur hexadécimal. Et ce que je n'ai pu trouver... '/var' air lite: le "/var'. En supprimant les caractères étranges résolu le problème.
Merci à tous pour vos commentaires ci-dessus. Espérons que ceux-ci peuvent aider quelqu'un d'autre et peut-être qu'il m'a aidé sans le savoir (car j'ai fait beaucoup de choses en se basant sur vos commentaires).
OriginalL'auteur Nicsoft
ce qui est sur les droits d'accès au dossier?
le chemin
$file = 'file:///var/www/html/smic/upload/28/ul.txt';
est incorrect.Essayez le script php copier dans le dossier de téléchargement et
file='28/ul.txt';
.Le dossier doit être lisible.
Je ne suis pas sur un système Linux avec PHP en ce moment. Je vais vérifier au cours de la soirée. Donc je ne suis pas sûr que cela correct. essayez "./smic/upload/28/ul.txt" ou "smic/upload/28/ul.txt" si le script php se trouve dans le dossier html.
Merci, à l'aide d'un éditeur hexadécimal, j'ai trouvé d'étranges personnages qui a corrompu mon fichier.
si le fichier est endommagé? un autre fichier, vous pouvez cocher/ouvrir?
J'ai corrigé le fichier (script php), en supprimant les caractères étranges dans un éditeur hexadécimal. Puis il a travaillé. Voir ma propre réponse quelque part ici.
OriginalL'auteur yen1k
Essayer d'ouvrir le fichier à l'aide de $fichier = '/upload/28/ul.txt';
utiliser DIR constant pour obtenir le répertoire courant, après utilisation, le chemin d'accès relatif à votre ressource
Merci, à l'aide d'un éditeur hexadécimal, j'ai trouvé d'étranges personnages qui a corrompu mon fichier.
OriginalL'auteur Userbn
De l'php.net manuel, "en cas d'échec, une erreur de niveau E_WARNING est émise." assurez-vous que les rapports d'erreur est défini à un niveau qui permettra d'afficher les alertes et les essayer.
Aussi, "Cette fonction renvoie la valeur FALSE pour les fichiers inaccessibles en raison de mode sans restrictions. Toutefois, ces fichiers peuvent encore être pris en compte s'ils sont situés dans safe_mode_include_dir.". Vous n'êtes pas en cours d'exécution en php safe mode êtes-vous? la fonction phpinfo() devrait vous dire.
OriginalL'auteur Garry Welding
Où est ton fichier php est-elle située? Si, dans le répertoire "html", puis d'utiliser un chemin relatif, comme
$file = "smic/upload/28/ul.txt";
Dans ce cas, essayez de
$file = "../../../upload/28/ul.txt";
C'est en fait résolu, voir ma propre réponse. Le fichier était corrompu et j'ai dû le fixer à l'aide d'un éditeur hexadécimal pour supprimer des caractères étranges. Merci quand même!
OriginalL'auteur James
Peut-être, dans un nom de fichier il y a un espace symbole. Il est important de.
OriginalL'auteur frops