Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/01/2007, 15h41   #1
Invité de passage
 
Inscription : janvier 2007
Messages : 15
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 15
Points : 1
Points : 1
Par défaut Vérifier si une image distante existe

Bonjour !

je suis en train de faire un petit moteur de recherche pour un site qui propose plusieurs articles. je recupere donc les articles dans une base de données, et j'aimerais afficher dans la page de résultats les images correspondant a ces articles, or elles sont sur un autre serveur que celui sur lequel sera mon fichier php. Chaque article n'ayant pas forcement une image correspondant, j'aimerais pouvoir tester si l'image existe, et si oui l'afficher, sinon en afficher une autre par défaut.

j'arrive pas a effectuer ce test, juste savoir si l'image distante existe ou non, comment puis-je faire?

merci beaucoup de vos réponses !

Amandine
fab4am est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2007, 15h44   #2
Membre du Club
 
Inscription : janvier 2007
Messages : 132
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 132
Points : 60
Points : 60
Tu peux faire ca avec la fonction is_file

http://fr.php.net/manual/fr/function.is-file.php
Marc31boss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2007, 15h51   #3
Invité de passage
 
Inscription : janvier 2007
Messages : 15
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 15
Points : 1
Points : 1
Merci !
je viens d'essayer :

Code :
1
2
3
	if (is_file($lienimage)) {
	echo "<img src='".$lienimage."' border='0' height='60' width='60'>";
	}
mais il me renvoie false a chaque fois, alors que quand je le fais a la main l'image d'affiche :/
fab4am est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2007, 15h53   #4
Rédacteur
 
Avatar de RideKick
 
Homme
Directeur technique
Inscription : septembre 2006
Messages : 5 959
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Directeur technique
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : septembre 2006
Messages : 5 959
Points : 10 889
Points : 10 889
essaie plutot la fonction file_exists()
__________________
Pas de questions techniques en MP please

Mon site perso
RideKick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2007, 15h55   #5
Invité de passage
 
Inscription : janvier 2007
Messages : 15
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 15
Points : 1
Points : 1
Oui c'est ce que j'avais fait en premier car c'est la fonction qui me semblait la plus appropriée, mais elle ne me renvoie rien non plus :/
fab4am est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2007, 15h55   #6
Membre du Club
 
Inscription : janvier 2007
Messages : 132
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 132
Points : 60
Points : 60
Personnellement, file_exists ne marche pas non plus avec un fichier distant, je viens de tester les deux...
Marc31boss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2007, 15h57   #7
Membre Expert
 
Avatar de Djakisback
 
Inscription : février 2005
Messages : 1 797
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 1 797
Points : 1 688
Points : 1 688
Salut,
tu peux vérifier que allow_url_fopen est bien à on sur le serveur distant en faisant phpinfo().
Bye
Djakisback est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2007, 15h59   #8
Membre du Club
 
Inscription : janvier 2007
Messages : 132
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 132
Points : 60
Points : 60
Autre solution :

Code :
1
2
3
4
5
6
<?php
  $file = fopen("$lienimage", "r");
  if (!$file) {
    echo "<p>Impossible d'ouvrir le fichier distant.\n";
    exit;
  }
Wala qui devrait marcher

Edit : ca fonctionne bien, mais j'ai une belle erreur si le fichier n'existe pas...

Re-Edit: vu que l'erreur est "volontaire", un @ devant la ligne $file = fopen("$lienimage", "r"); corrigera ca, meme si c'est pas très beau comme code...
Marc31boss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2007, 15h59   #9
Invité de passage
 
Inscription : janvier 2007
Messages : 15
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 15
Points : 1
Points : 1
sur le serveur distant? ce n'est pas du php sur le serveur distant :/
fab4am est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2007, 16h01   #10
Invité de passage
 
Inscription : janvier 2007
Messages : 15
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 15
Points : 1
Points : 1
merci Marc, malheureusement il arrive pas a l'ouvrir (le probleme vient peut etre de la d'ailleurs :/ )

Code :
1
2
3
Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in ...
 
Impossible d'ouvrir le fichier distant.
fab4am est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2007, 16h02   #11
Membre du Club
 
Inscription : janvier 2007
Messages : 132
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 132
Points : 60
Points : 60
Bizarre, je viens de tester en local et ca marche :X
Marc31boss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2007, 16h03   #12
Invité de passage
 
Inscription : janvier 2007
Messages : 15
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 15
Points : 1
Points : 1
ben je suis en local avec easyphp pour les tests, mais je vais essayer sur le serveur peut etre que ca marchera
fab4am est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2007, 16h05   #13
Membre Expert
 
Avatar de Djakisback
 
Inscription : février 2005
Messages : 1 797
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 1 797
Points : 1 688
Points : 1 688
En fait ca dépend surtout de la version de php, jette un coup d'oeil à la fonction url_exists() ici

Mais de toute façon si t'as une erreur 404 c'est que le fichier n'existe pas ou que t'as mal tapé l'url ^^
Djakisback est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2007, 16h06   #14
Invité de passage
 
Inscription : janvier 2007
Messages : 15
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 15
Points : 1
Points : 1
non, en fait ca marche, même en local : j'ai juste enlevé le "exit;" et mis le @ comme tu m'as dit, car comme c'est une liste d'article, il faut que ca continue ! Et le 2nd article n'a pas d'image justement, donc j'ai regardé trop vite et j'ai cru que ca marchait pas, alors que c'etait juste l'erreur normale

le seul probleme c'est que ca met enormement de temps pour afficher la liste, vu qu'il faut qu'il ouvre et telecharge chaque fichier image :/
fab4am est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2007, 16h09   #15
Membre Expert
 
Avatar de Djakisback
 
Inscription : février 2005
Messages : 1 797
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 1 797
Points : 1 688
Points : 1 688
Si jamais t'as un problème une fois que t'auras mis ton site en ligne, sur le serveur distant, oublies pas de vérifier allow_url_fopen
Djakisback est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2007, 16h11   #16
Invité de passage
 
Inscription : janvier 2007
Messages : 15
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 15
Points : 1
Points : 1
d'accord merci

sinon, c'est la seule solution? car c'est dommage de charger toutes les images quand on veut juste voir si elles existent, non?
fab4am est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2007, 16h14   #17
Invité de passage
 
Inscription : janvier 2007
Messages : 15
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 15
Points : 1
Points : 1
je viens de voir la fonction url_exists dans les comentaires, donc je retire ma question au dessus et je teste ca, merci beaucoup

Amandine
fab4am est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2007, 16h15   #18
Invité de passage
 
Inscription : janvier 2007
Messages : 15
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 15
Points : 1
Points : 1
mmh, ca met quand meme autant de temps que la solution de marc, il me semble.
c'est mieux que rien, c'est vrai, mais ca reste dommage de tout charger
fab4am est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2007, 16h16   #19
Membre du Club
 
Inscription : janvier 2007
Messages : 132
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 132
Points : 60
Points : 60
Essaie ces deux, je ne sais pas si le serveur devra charger totalement le fichier avec ca

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?
function remote_file_exists ($url)
{
 
$head = "";
$url_p = parse_url ($url);
 
if (isset ($url_p["host"]))
{ $host = $url_p["host"]; }
else
{}
 
if (isset ($url_p["path"]))
{ $path = $url_p["path"]; }
else
{ $path = ""; }
 
$fp = fsockopen ($host, 80, $errno, $errstr, 20);
if (!$fp)
{}
else
{
$parse = parse_url($url);
$host = $parse['host'];
 
fputs($fp, "HEAD ".$url." HTTP/1.1\r\n" );
fputs($fp, "HOST: ".$host."\r\n" );
fputs($fp, "Connection: close\r\n\r\n" );
$headers = "";
while (!feof ($fp))
{ $headers .= fgets ($fp, 128); }
}
fclose ($fp);
$arr_headers = explode("\n", $headers);
$return = false;
if (isset ($arr_headers[0]))
{ $return = strpos ($arr_headers[0], "404" ) === false; }
return $return;
}
 
/* utilisation */
$url = "http://www.google.it/intl/it_it/images/logo.gif";
if (remote_file_exists ($url))
{ print ($url . " file exists!" ); }
else
{ print ($url . " file doesn't exist!" ); }
 ?>

Code :
1
2
3
4
5
6
7
8
9
function remote_file_exists ($url)
{
    ini_set('allow_url_fopen', '1');
    if (@fclose(@fopen($url, 'r'))) {
        return true;
    } else {
        return false;
    }
}
Marc31boss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2007, 16h20   #20
Invité de passage
 
Inscription : janvier 2007
Messages : 15
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 15
Points : 1
Points : 1
Merci Marc !

je viens d'essayer et c'est le meme temps pour toutes les solutions, meme les 2 derniers. j'ai meme une belle fatal error a la fin pour avoir excedé 30 secondes de traitement. c'est pas grave car je vais paginer les resultats, mais ca reste très lent tout de meme.
fab4am est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h09.


 
 
 
 
Partenaires

Hébergement Web