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
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.
Citation :Mais il faut lui fournir en paramètre le chemin d'accès du fichier.
C'est justement sa le problème
Je t'explique avec un exemple:
Code 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
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...
Ouais pas con, on peut mettre des URL. J'y avais pas pensé.
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
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
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 :
define("AMFPHP_BASE", realpath(dirname(dirname(dirname(__FILE__)))) . "/");
/**
* required classes for the application
*/
require_once(AMFPHP_BASE . "shared/app/Constants.php");
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.