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 29/04/2008, 10h27   #1
Membre du Club
 
Inscription : juin 2004
Messages : 257
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 257
Points : 64
Points : 64
Par défaut Tester la présence d'images sur un serveur distant

Bonjour,

je voudrais tester la présence sur le serveur des images avant de les afficher.
Les images sont placé sur 2 serveurs. Sur le serveur 1 j'ai mon site avec des images et sur le serveur 2 juste des images.

Afin de tester le présence d'image, j'utilise fopen comme ci-dessous

Code :
1
2
3
4
5
6
7
8
9
10
11
 
$filename1 = "http://www.serveur1.com/image/image1.jpg"; 
$filename2: "http://www.serveur2.com/images/image2.jpg";
$handle1 = fopen($filename1,'r');
$rep1 = ($handle1) ? 'present' : 'abscent';
$handle2 = fopen($filename2,'r');
$rep2 = ($handle2) ? 'present' : 'abscent';
fclose($handle1);
fclose($handle2);
echo $rep1."<br>";
echo $rep2."<br>";
Lorsque je testes depuis mon poste de développement, tous ce passe correctement, les 2 images sont retrouvées.

Par contre lorsque je fais le test sur mon site qui se trouve sur le serveur 1, l'image 2 est retrouvé et pour le test de l'image1 j'ai le message d'erreur suivant

Citation:
Warning: fopen() [function.fopen]: php_network_getaddresses: getaddrinfo failed: Name or service not known in /home/bmedias/www/monsite/mapager.php on line 201
quelqu'un pourrait il m'aider a résoudre ce problème?
merci par avance
epeichette est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2008, 10h52   #2
Nouveau Membre du Club
 
Inscription : avril 2008
Messages : 94
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 94
Points : 39
Points : 39
Envoyer un message via MSN à DrDam
avec des quotes ? tu as essayé µ?
DrDam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2008, 10h56   #3
Membre Expert
 
Homme
Inscription : janvier 2004
Messages : 1 238
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2004
Messages : 1 238
Points : 1 421
Points : 1 421
Tres souvent le chargement d'URL dans les fonctions fopen et cie sont désactivés sur les hebergeurs de site.

Utilise plutot file() qui a *moins de chance* de poser probleme, mais dans ce cas il faut que tu change tes tests parce que si le fichier n'existe pas, ca te renverra un fichier contenant une erreur 404 et non pas "FALSE" ;o)

Tu peux aussi faire un fichier php sur le serveur 2 qui va s'appeller "existe.php" et qui prend en parametre le nom du fichier a verifier, puis qui verifie si *localement* l'image existe (et renvoie une page contenant 1 ou 0, facile a parser avec file())
__________________
PHP :
Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production)
Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error());
Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable.
Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/
Fladnag est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2008, 11h21   #4
Membre du Club
 
Inscription : juin 2004
Messages : 257
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 257
Points : 64
Points : 64
ok pour les quotes, c'est une erreur de rédaction que je viens de changer

l'idée de faire des tests en local en appelant un fichier local est intéressante...

Une chose que je ne comprends pas, si la lecture des url est désactivé comment faire pour les activer? je suis sur un serveur dédié, je peux donc modifier son paramétrage.

Sinon j'ai trouvé ce code,
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
 
function HttpCheckUrl($url, $timeout = 10)
{
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    curl_setopt($ch, CURLOPT_NOBODY, TRUE);
    if (strpos($url, 'https://') === 0) {
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // On ne vérifie que l'existence de la page
    }
    if (!curl_exec($ch)) {
        return FALSE;
    }
    $ret = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
 
    return in_array($ret, array(200, 301, 302));
}
 
// Exemple d'utilisation :
define('OK', '<span style="color: green">OK</span>');
define('KO', '<span style="color: red">KO</span>');
$urls = array(
    'http://www.non-existant.fr',
    'http://www.developpez.com/',
    'http://php.developpez.com/faq/'
);
foreach ($urls as $u) {
    echo $u . ' : ' . (check_url($u) ? OK : KO) . '<br/>';
}
est ce que ça pourrait résoudre le problème ? Comme la librairie cURL n'est pas installer sur le serveur, je n'ai pas pu testé et avant de l'a faire installer j'aimerai être sur que cela réponde au besoin...

Merci d'avance
epeichette est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2008, 11h27   #5
Membre Expert
 
Homme
Inscription : janvier 2004
Messages : 1 238
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2004
Messages : 1 238
Points : 1 421
Points : 1 421
si tu est sur un dédié, tu devrais pouvoir faire ce que tu veux,

verifie quand meme que le probleme est bien la. Pour ca, il suffit de faire une page :

Code :
1
2
3
<?php
echo implode("", file("http://www.google.fr"));
?>
si tu voit la page de google, c'est que tu peux t'en sortir avec file ou fopen en principe ;o)

Sinon, tu peux activer le flag de configuration suivant :
allow-url-fopen

Tu ne devrais pas avoir besoin de CURL qui est tres bien mais un peu lourd juste pour verifier la présence d'un fichier
__________________
PHP :
Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production)
Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error());
Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable.
Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/
Fladnag est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2008, 11h59   #6
Membre du Club
 
Inscription : juin 2004
Messages : 257
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 257
Points : 64
Points : 64
alors...

allow_url_fopen est sur on sur le serveur et j'arrive a afficher la page de google avec ton test.

Par contre, si je fait le même test en appelant le site lui même ça ne marche pas

je suis sur la page http://www.monsite.com/test.php

avec
Code :
1
2
3
4
 
<?php
echo implode("", file("http://www.google.fr"));
?>
la page de google s'affiche

et si je met
Code :
1
2
3
4
 
<?php
echo implode("", file("http://www.monsite.com/"));
?>
j'ai le même type d'erreur qu'avec fopen :

Citation:
Warning: file() [function.file]: php_network_getaddresses: getaddrinfo failed: Name or service not known in /home/monsite/test.php on line 2


merci pour ton conseil pour CURL
epeichette est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2008, 12h38   #7
Membre Expert
 
Homme
Inscription : janvier 2004
Messages : 1 238
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2004
Messages : 1 238
Points : 1 421
Points : 1 421
les erreurs ayant l'air de parler de résolution d'adresse, as tu essayé avec l'adresse IP de ton site directement ?

C'est a dire :

Code :
file("http://XXX.XXX.XXX.XXX/");
ou meme :

Code :
file('http://'.$_SERVER['SERVER_ADDR'].'/');
Sinon regarder ici :
http://bugs.php.net/bug.php?id=11058

Ils proposent plusieurs trucs a essayer, notemment de ne pas mettre le "http://" devant le nom du serveur oO
__________________
PHP :
Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production)
Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error());
Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable.
Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/
Fladnag est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h10.


 
 
 
 
Partenaires

Hébergement Web