2010-11-12 9 views
4
if(file_exists("./squadra/photos/photog.jpg")) { 
    echo "### YES ###"; 
} else { 
    echo "### NO ###"; 
} 

Si j'exécute cette fonction sur /zones/team.php cela fonctionne (il imprime OUI). Si j'exécute cette fonction sur /auth/ajax.php, j'imprime NO. Pourquoi?file_exists() ne trouve pas le fichier

EDIT

Je fais donc une expérience.

1 - Si je tente:

// file on /zones/team.php 
if(file_exists($_SERVER['DOCUMENT_ROOT']."/squadra/photos/provag.jpg")) { 
    echo "YES"; 
} else { 
    echo "NO";    
} 

// file on /auth/ajax.php 
if(file_exists($_SERVER['DOCUMENT_ROOT']."/squadra/photos/provag.jpg")) { 
    echo "YES"; 
} else { 
    echo "NO";    
}  

il dit NON à la fois;

2 - Si je tente:

// file on /zones/team.php 
if(file_exists("./squadra/photos/provag.jpg")) { 
    echo "YES"; 
} else { 
    echo "NO";    
} 


// file on /auth/ajax.php 
if(file_exists("../squadra/photos/provag.jpg")) { 
    echo "YES"; 
} else { 
    echo "NO";    
} 

il est dit OUI à la fois; Mais sur team.php im utilisant ./ et sur ajax.php ../ ... pourquoi ça marche ???

+0

Etes-vous sûr à 10000 que c'est le chemin * absolu * correct? Vous avez un * dossier racine * nommé 'squadra'? –

+0

im sûr, en fait si j'écris je vois l'image – markzzz

+0

Regardez la réponse @ Mikhail ci-dessous. Il a absolument raison. Assurez-vous également que vous n'essayez pas d'utiliser un chemin Web. Le chemin sur le web et le chemin sur le serveur ne sont pas la même chose. – Cfreak

Répondre

3

Votre dernière fonctionne très probablement parce que:

  1. Vous appelez zones/team.php d'un index.php qui se trouve dans la racine. Dans ce cas, la pièce ./ identifie correctement votre répertoire actuel.
  2. Et pour ajax, vous devez l'appeler directement comme auth/ajax.php, au lieu de quelque chose comme index.php?type=jx&do=auth/ajax qui serait le même que le n ° 1. Par conséquent, ce n'est pas le cas, vous devez d'abord sortir de auth avec ../, puis continuer avec squadra/....

Utilisez des chemins absolus aussi souvent que possible. Les chemins relatifs sont pénibles pour PHP pour les calculer (en termes de performance).

+0

ouais je pensais que c'était un problème en utilisant un appel ajax. Donc, j'utilise ces fonctions :) en tout cas, ce qui est étrange est que si j'utilise $ _SERVER ['DOCUMENT_ROOT'] à la fois il ne fonctionne pas :) Merci pour l'explication! – markzzz

2

Assurez-vous que vous considérez le dossier que vous avez tapé. Vous démarrez l'adresse du fichier avec/côté serveur racine. Si vous voulez un répertoire local, supprimez le précédent ou tapez le chemin entier.

Ensuite, assurez-vous que vous n'avez pas de fautes de frappe.

Bonne chance!

2

Comme vous avez une barre oblique, file_exist ira à la racine du disque dur.

$ _SERVER [ « DOCUMENT_ROOT de »] devant elle ou supprimer la barre oblique et utiliser ../, etc, etc.

0

Si vous utilisez un chemin relatif avec file_exists il retourne faux à moins que le chemin est relatif dans le répertoire php.

0

Vérifiez à nouveau le chemin - Je pense que la barre oblique est une erreur - car elle peut pointer vers la racine (serveur ou espace utilisateur plus probable) - tandis que votre script d'exécution peut se trouver dans un sous-chemin. ..

tl; dr; Essayez de supprimer le premier «/»

1

Si squadra est un répertoire dans le répertoire où le script PHP est en cours d'exécution, essayez

if(file_exists('./squadra/photos/photog.jpg')) { 
    echo "### YES ###"; 
} else { 
    echo "### NO ###"; 
} 
+0

oui, ce travail si je lance cette fonction sur (par exemple) /zones/team.php. Si je cours cette fonction sur /auth/ajax.php cela ne marche pas. Comment est-ce possible???? – markzzz

+0

Si vous l'exécutez à partir de /zones/team.php et que cela fonctionne, cela signifie que l'image est réellement sous/zones, par ex. /zones/squadra/photos/photog.jpg. Donc, pour l'exécuter n'importe où dans votre structure de répertoire, vous devez préfixer $ _SERVER ['DOCUMENT_ROOT'] à la racine de celui-ci, par exemple. $ _SERVER ['DOCUMENT_ROOT']. "/zones/squadra/photos/photog.jpg" – tcrosley

+0

uhm non. l'image est sur/squadra/photos, c'est étrange :) – markzzz

1

Vérifiez l'état php safe_mode, et vérifier la sensibilité à la casse du chemin du fichier .

php file_exists

Attention: Cette fonction retourne FALSE pour les fichiers inaccessibles en raison des restrictions du mode sans échec. Cependant, ces fichiers peuvent toujours être inclus s'ils se trouvent dans safe_mode_include_dir.

Questions connexes