JeuWeb - Crée ton jeu par navigateur
Trouver un fichier - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Trouver un fichier (/showthread.php?tid=2773)



Trouver un fichier - phenix - 16-07-2008

Hello tout le monde,

Je voudrais savoir si quelqu'un connaît une méthode pour ouvrir un fichier à partir de sont nom ou de sont chemin. En gros qu'il soit capable de retrouver un fichier sur le serveur par lui même si on lui passe pas le chemin.

Sa peut être extrêmement pratique quand on ouvre des fichiers dans des fonctions.

Phenix


RE: Trouver un fichier - Thumsoul - 16-07-2008

En PHP, tu as la méthode fopen (http://fr.php.net/fopen), qui permet d'ouvrir un fichier et de le lire/modifier (si tu as les droits dessus). Mais il faut lui fournir en paramètre le chemin d'accès du fichier.


RE: Trouver un fichier - phenix - 16-07-2008

Citation :Mais il faut lui fournir en paramètre le chemin d'accès du fichier.

C'est justement sa le problème Wink

Je t'explique avec un exemple:
Code PHP :
<?php 
function bidouille()
{
[...]
fopen('index_de_truc');
[...]
}

Jusque la c'est pas sorcier. Mais si tu exécute ta fonction dans un autre dossier, tu te prend une erreur car il trouve pas le fichier...

Moi je voudrais qu'il retrouve le fichier quelque soit l'endroit ou j'exécute la fonction.

Phenix


RE: Trouver un fichier - Thumsoul - 16-07-2008

Mets le chemin absolu :
Code PHP :
<?php 
fopen
('http://www.tonsite.com/data/tonfichier.txt');



RE: Trouver un fichier - Ruz - 16-07-2008

Existe-t-il une fonction PHP qui liste les répertoires existants dans le dossier courant?

Si oui: un peu de récursivité pour scanner tout le serveur jusqu'à trouver
Si non: ben, euh, je ne sais pas, sorry...


RE: Trouver un fichier - phenix - 16-07-2008

Ouais pas con, on peut mettre des URL. J'y avais pas pensé.


RE: Trouver un fichier - Nambew - 16-07-2008

Je crois pas que ça soit une bonne idée d'inclure un fichier via le nom de domaine. Tu peux très bien définir une constante avec le chemin de base de tes fichiers. Tu peux aussi dans la configuration de PHP définir des répertoires qui seront vérifier lors d'inclusion de fichiers. Voir include_path dans le php.ini


RE: Trouver un fichier - phenix - 17-07-2008

Citation :Tu peux très bien définir une constante avec le chemin de base de tes fichiers.

C'est un peu chinois, tu veux bien détailler un peu ? En fait le vocabulaire est flou, c'est quoi une constante ?

Citation :Tu peux aussi dans la configuration de PHP définir des répertoires qui seront vérifier lors d'inclusion de fichiers. Voir include_path dans le php.ini

Difficile sur un mutualisé non ?

Phenix


RE: Trouver un fichier - Nambew - 17-07-2008

Pour la constante, il faut regarder du côté de la function define. Le but est de définir une constante qui contient l'emplacement du répertoire de base et de réutiliser cette constante pour chaque inclusion.

Certains hébergeur laisse la possibilité de modifier certains paramètres du php.ini dans des fichiers .htaccess, donc faut évidemment voir avec son hébergeur.

Pour la constante, si je prends l'exemple de AMFPHP, ça donne ça.
Code PHP :
<?php 
define
("AMFPHP_BASE", realpath(dirname(dirname(dirname(__FILE__)))) . "/");

/**
* required classes for the application
*/
require_once(AMFPHP_BASE . "shared/app/Constants.php");



RE: Trouver un fichier - QuentinC - 20-07-2008

Citation :fopen('http://www.tonsite.com/data/tonfichier.txt');
Ne jamais ouvrir ou inclure un fichier via l'URL, stop aux légendes urbaines.
Php perdra un temps fou, car il va se connecter au DNS, demander l'IP de ton NDD, se connecter à ton propre serveur et demander le fichier par HTTP. Ton serveur va lire le fichier, l'envoyer à php, etc, etc... les communication réseau ça coûte très cher en temps, surtout quand c'est inutile.

Sinon vous demandiez ce qu'il y avait pour parcourir des dossiers : il y a deux solutions, soit glob, soit opendir/readdir/closedir (cf php.net). Mais bon de toute façon scanner plein de dossier pour voir si un fichier s'y trouve c'est totalement contre-productif.

Pas besoin de définir de constante pour un dossier racine non plus car il y en a déjà une : $_SERVER['DOCUMENT_ROOT'], elle indique le chemin racine du dossier web (p.ex. /home/var/www ou c:\wamp\www) ne pas hésiter à en abuser car c'est vrai qu'elle est pratique.
Sinon en deuxième solution on peut aussi utiliser la fonction chdir pour changer de dossier en cours.