au départ c'était dans l'état tel qu'au dessus. c'est après que je me suis
rendu compte que j'avais codé en dur le chemin de mon HD; donc j'ai voulu
passé au format serveur avec localhost et là cela ne fonctionne plus, le
fichier n'existe jamais. j'ai alors fais une recherche dans les fonctions
s'il y en avait une qui gérait les url ... pas trouvé. puis j'ai cherché
dans le forum de easyphp et j'ai trouvé :
<?
// cette fonction fonctionne comme file_exists (fichiers locaux)
// url_exists() permet de tester une URL
function url_exists($url){
$fp=@fopen($url,"r");
// la fonction renvoi 1 si le fichier (l'URL) existe, 0 sinon.
return ($fp)? 1 : 0;
}
?>
mais là aussi cela ne fonctionne pas. je vous avoue que je n'ai pas tout
compris à la fonction fopen.
Puis-je avoir de l'aide s'il vous plait. à quoi correspond ce @ car
apparement il a de l'importance?
de plus dans une réponse à ce message, quelqu'un avait suggérer de rajouté
un fclose, ce que j'ai fait, mais là cela ne fonctionne plus du tout. le
pointeur $fp c'est pas le fameux handle réclamé par fclose?
Plutôt que file_exists, j'utilise is_readable. Cette fonction teste à la fois l'existence du fichier et aussi le fait qu'il puisse être lu par le script PHP.
Puis-je avoir de l'aide s'il vous plait. Oui, ça peut se faire :)
à quoi correspond ce @ car apparement il a de l'importance? Il sert simplement à indiquer à PHP que, quoi qu'il se passe lors de
l'exécution de la fonction juste après l'@, il ne doit jamais afficher de message d'erreur ou arrêter l'exécution du script.
de plus dans une réponse à ce message, quelqu'un avait suggérer de rajouté un fclose, ce que j'ai fait, mais là cela ne fonctionne plus du tout. le pointeur $fp c'est pas le fameux handle réclamé par fclose? Oui
@fopen renvoie un handle sur le fichier ouvert ou FALSE si le fichier n'a pas pu être ouvert.
@+
Frédéric
$path = "D:\EasyPHP\www\Cinema\images\acteurs\";
//$path = 'http://localhost/Cinema/images/acteurs/';
Pourquoi ne fais-tu pas quelque chose du genre :
Plutôt que file_exists, j'utilise is_readable. Cette fonction teste à la
fois l'existence du fichier et aussi le fait qu'il puisse être lu par le
script PHP.
Puis-je avoir de l'aide s'il vous plait.
Oui, ça peut se faire :)
à quoi correspond ce @ car apparement il a de l'importance?
Il sert simplement à indiquer à PHP que, quoi qu'il se passe lors de
l'exécution de la fonction juste après l'@, il ne doit jamais afficher
de message d'erreur ou arrêter l'exécution du script.
de plus dans une réponse à ce message, quelqu'un avait suggérer de rajouté
un fclose, ce que j'ai fait, mais là cela ne fonctionne plus du tout. le
pointeur $fp c'est pas le fameux handle réclamé par fclose?
Oui
@fopen renvoie un handle sur le fichier ouvert ou FALSE si le fichier n'a
pas pu être ouvert.
Plutôt que file_exists, j'utilise is_readable. Cette fonction teste à la fois l'existence du fichier et aussi le fait qu'il puisse être lu par le script PHP.
Puis-je avoir de l'aide s'il vous plait. Oui, ça peut se faire :)
à quoi correspond ce @ car apparement il a de l'importance? Il sert simplement à indiquer à PHP que, quoi qu'il se passe lors de
l'exécution de la fonction juste après l'@, il ne doit jamais afficher de message d'erreur ou arrêter l'exécution du script.
de plus dans une réponse à ce message, quelqu'un avait suggérer de rajouté un fclose, ce que j'ai fait, mais là cela ne fonctionne plus du tout. le pointeur $fp c'est pas le fameux handle réclamé par fclose? Oui
@fopen renvoie un handle sur le fichier ouvert ou FALSE si le fichier n'a pas pu être ouvert.
@+
Frédéric
Pascal (Collectours)
Assyril wrote:
// cette fonction fonctionne comme file_exists (fichiers locaux) // url_exists() permet de tester une URL function url_exists($url){ $fp=@fopen($url,"r"); // la fonction renvoi 1 si le fichier (l'URL) existe, 0 sinon. return ($fp)? 1 : 0; } ?> Bonjour,
il y a souvent confusion à cause des commodités apportées par les fonctions de fichier de php. * Tout d'abord, et pour simplifier lorsque vous appellez une url http://www.serveur.com/unfichier.htm, le serveur web fait la cuisine qui va bien pour traduire tout ça en : a) On me demande de fournir une ressource "unfichier.htm" b) je regarde dans ma configuration comment je dois traduire cette demande en chemin vers une ressource physique. c) Ah, ma configuration me dit que je dois aller chercher le fichier "unfichier.htm" dans un endroit qui est d:/easyphp/www/Cinema d) je délivre le fichier d:/easyphp/www/Cinema/unfichier.htm * L'endroit désigné par la configuration du serveur, dans lequel se trouvent les documents est identifié par la variable superglobale php $_SERVER['DOCUMENT_ROOT']; Donc, pour vous, vos personnalités une fois "traduites" en fichier se trouvent dans $_SERVER['DOCUMENT_ROOT'].'/Cinema/images/acteurs'. * La confusion provient du fait que lorque vous appellez une fonction comme fopen, php pour vous simplifier la vie, regarde si on lui demande d'ouvrir un fichier 1)sur le disque du serveur - fopen('/d:/easyphp/etc...) - fopen('/var/www/html/repertoire/etc...) 2) ou à distance : - fopen('http://www.serveur.com'), - fopen('http://localhost/..')) Dans le cas d'ouverture à distance, en gros, php imite le fonctionnement d'un navigateur web, se connecte au réseau, rapatrie le document distant. Même si cela parait transparent, ce n'est pas du tout la même chose entre 1 ou 2 * Donc dans votre cas,vous voulez vérifier la présence d'un fichier sur le disque de votre serveur, donc (1). * Il vous faut donc faire ce que ferait le serveur web "A quel emplacement physique sur le disque correspond 'http://localhost/Cinema/unfichier.htm' donc "traduire" http://localhost/Cinema/images/acteurs/image.jpg en d:/easyphp/www/Cinema/acteurs/image.jpg, puis vérifier que le fichier existe et est lisible ce qui donne quelquechose comme
$img = 'nom de la ressource demandée au serveur': $images_path = $_SERVER['DOCUMENT_ROOT'].'/Cinema/images/acteurs'; $img_path = $images_path.'/' . $img. '.jpg'; if ( ! is_readable($img_path)) { die('fichier illisible'); } // le fichier est lisibile ..suite Voila Cordialement Pascal
Assyril wrote:
// cette fonction fonctionne comme file_exists (fichiers locaux)
// url_exists() permet de tester une URL
function url_exists($url){
$fp=@fopen($url,"r");
// la fonction renvoi 1 si le fichier (l'URL) existe, 0 sinon.
return ($fp)? 1 : 0;
}
?>
Bonjour,
il y a souvent confusion à cause des commodités apportées par les fonctions
de fichier de php.
* Tout d'abord, et pour simplifier
lorsque vous appellez une url http://www.serveur.com/unfichier.htm,
le serveur web fait la cuisine qui va bien pour traduire tout ça en :
a) On me demande de fournir une ressource "unfichier.htm"
b) je regarde dans ma configuration comment je dois traduire cette demande
en chemin vers une ressource physique.
c) Ah, ma configuration me dit que je dois aller chercher le fichier
"unfichier.htm" dans un endroit qui est d:/easyphp/www/Cinema
d) je délivre le fichier d:/easyphp/www/Cinema/unfichier.htm
* L'endroit désigné par la configuration du serveur, dans lequel se trouvent
les documents est identifié par la variable superglobale php
$_SERVER['DOCUMENT_ROOT'];
Donc, pour vous, vos personnalités une fois "traduites" en fichier se
trouvent dans
$_SERVER['DOCUMENT_ROOT'].'/Cinema/images/acteurs'.
* La confusion provient du fait que lorque vous appellez une fonction comme
fopen, php pour vous simplifier la vie, regarde si on lui demande d'ouvrir
un fichier
1)sur le disque du serveur
- fopen('/d:/easyphp/etc...)
- fopen('/var/www/html/repertoire/etc...)
2) ou à distance :
- fopen('http://www.serveur.com'),
- fopen('http://localhost/..'))
Dans le cas d'ouverture à distance, en gros, php imite le fonctionnement
d'un navigateur web, se connecte au réseau, rapatrie le document distant.
Même si cela parait transparent, ce n'est pas du tout la même chose entre 1
ou 2
* Donc dans votre cas,vous voulez vérifier la présence d'un fichier sur le
disque de votre serveur, donc (1).
* Il vous faut donc faire ce que ferait le serveur web "A quel emplacement
physique sur le disque correspond 'http://localhost/Cinema/unfichier.htm'
donc "traduire" http://localhost/Cinema/images/acteurs/image.jpg en
d:/easyphp/www/Cinema/acteurs/image.jpg, puis vérifier que le fichier existe
et est lisible ce qui donne quelquechose comme
$img = 'nom de la ressource demandée au serveur':
$images_path = $_SERVER['DOCUMENT_ROOT'].'/Cinema/images/acteurs';
$img_path = $images_path.'/' . $img. '.jpg';
if ( ! is_readable($img_path)) {
die('fichier illisible');
}
// le fichier est lisibile ..suite
Voila
Cordialement
Pascal
// cette fonction fonctionne comme file_exists (fichiers locaux) // url_exists() permet de tester une URL function url_exists($url){ $fp=@fopen($url,"r"); // la fonction renvoi 1 si le fichier (l'URL) existe, 0 sinon. return ($fp)? 1 : 0; } ?> Bonjour,
il y a souvent confusion à cause des commodités apportées par les fonctions de fichier de php. * Tout d'abord, et pour simplifier lorsque vous appellez une url http://www.serveur.com/unfichier.htm, le serveur web fait la cuisine qui va bien pour traduire tout ça en : a) On me demande de fournir une ressource "unfichier.htm" b) je regarde dans ma configuration comment je dois traduire cette demande en chemin vers une ressource physique. c) Ah, ma configuration me dit que je dois aller chercher le fichier "unfichier.htm" dans un endroit qui est d:/easyphp/www/Cinema d) je délivre le fichier d:/easyphp/www/Cinema/unfichier.htm * L'endroit désigné par la configuration du serveur, dans lequel se trouvent les documents est identifié par la variable superglobale php $_SERVER['DOCUMENT_ROOT']; Donc, pour vous, vos personnalités une fois "traduites" en fichier se trouvent dans $_SERVER['DOCUMENT_ROOT'].'/Cinema/images/acteurs'. * La confusion provient du fait que lorque vous appellez une fonction comme fopen, php pour vous simplifier la vie, regarde si on lui demande d'ouvrir un fichier 1)sur le disque du serveur - fopen('/d:/easyphp/etc...) - fopen('/var/www/html/repertoire/etc...) 2) ou à distance : - fopen('http://www.serveur.com'), - fopen('http://localhost/..')) Dans le cas d'ouverture à distance, en gros, php imite le fonctionnement d'un navigateur web, se connecte au réseau, rapatrie le document distant. Même si cela parait transparent, ce n'est pas du tout la même chose entre 1 ou 2 * Donc dans votre cas,vous voulez vérifier la présence d'un fichier sur le disque de votre serveur, donc (1). * Il vous faut donc faire ce que ferait le serveur web "A quel emplacement physique sur le disque correspond 'http://localhost/Cinema/unfichier.htm' donc "traduire" http://localhost/Cinema/images/acteurs/image.jpg en d:/easyphp/www/Cinema/acteurs/image.jpg, puis vérifier que le fichier existe et est lisible ce qui donne quelquechose comme
$img = 'nom de la ressource demandée au serveur': $images_path = $_SERVER['DOCUMENT_ROOT'].'/Cinema/images/acteurs'; $img_path = $images_path.'/' . $img. '.jpg'; if ( ! is_readable($img_path)) { die('fichier illisible'); } // le fichier est lisibile ..suite Voila Cordialement Pascal