Php fopen() au comportement mystérieux

Fermé
stéphane - 12 févr. 2008 à 01:21
 stéphane - 12 févr. 2008 à 20:13
Bonjour,

La fonction fopen() de php vient de me réserver un comportement assez capricieux : je développe un site - une commande d'un artiste - avec, entre autres fonctionalités, un robot qui doit aller visiter une liste de sites pour vérifier si le nom de l'artiste y apparaît bien.
Cet artiste a sa fiche sur wikipedia (https://fr.wikipedia.org/wiki/Sa%C3%A2dane_Afif mais, bizarrement, fopen() ne parvient pas à ouvrir la page.
J'ai pensé que le codage du nom dans l'url en Sa%C3%A2dane_Afif pouvait en être la cause, et pour m'en assurer, j'ai essayé un autre fopen() sur la page wikipedia du musicien Antonin Dvorak, dont l'url est encore plus impressionant avec le codage des caractères tchèques : https://fr.wikipedia.org/wiki/Anton%C3%ADn_Dvo%C5%99%C3%A1k
Et là, à ma grande surprise, ça fonctionne !

Voici une version très simplifiée du bout de script incriminé :

// $lien = "https://fr.wikipedia.org/wiki/Anton%C3%ADn_Dvo%C5%99%C3%A1k"; // fonctionne très bien
// mais celui-ci - allez savoir pourquoi - ne fonctionne pas :
$lien = "https://fr.wikipedia.org/wiki/Sa%C3%A2dane_Afif";

$fp = @fopen($lien, "r");
if($fp == true)
{
echo "ouverture OK de " . $lien;
fclose($fp);
}
else
echo "pas moyen d'ouvrir ce fichu " . $lien;

Inutile de préciser que les 2 liens ci-dessous, directement collés dans le navigateur, affichent bien la page attendue.
Je suis un vieux routier de php et je sais que la fatigue peut parfois générer des énormités, mais là, après avoir retourné le problème dans bon nombre de sens, je m'avoue scotché...

Mille mercis à toute âme charitable qui aurait une idée de la source du problème. Et autant de bises si c'est une fille.
Stéphane

6 réponses

Je viens de voir un petit bug dans le message que je viens d'envoyer : la parenthèse fermante du premier lien que j'ai donné dans mon explication a été associée à l'url, ce qui fait que le lien ne marche pas... Cliquez plutôt sur ce même lien dans l'expression
$lien = "https://fr.wikipedia.org/wiki/Sa%C3%A2dane_Afif";
si vous voulez vous assurer qu'il fonctionne bien.
(je ne savais pas qu'il fallait laisser un espace avant de fermer la parenthèse pour qu'elle ne soit pas incorporée au lien...)
0
Bonjour Stéphane

Je ne sais pas si c'est une bonne ou une mauvaise nouvelle pour toi, mais les deux liens s'ouvrent très bien chez moi avec ton script :
ouverture OK de https://fr.wikipedia.org/wiki/Sa%C3%A2dane_Afif

As-tu essayé la version simplifiée que tu nous proposes ?
0
Bonjour mon père,

Ben voilà, c'est ce qu'il y a de rassurant avec l'informatique, qui n'est pas toujours le truc hyper logique et calculé que l'on croit : elle nous réserve sa part d'inexplicable qui permet au programmeur de ne pas se sentir un peu humain...

Dans ma première version, le lien wikipedia en question s'ouvrait bien. J'ai invité le client à aller faire ses tests en ligne, il m'a dit que tout était OK sauf le fameux lien sur wikipedia. J'ai retesté en me disant "je ne suis pas fou tout de même, il a encore abusé hier soir, l'artiste", mais effectivement, j'ai bien dû constater que fopen() ne marchait plus, et ceci juste sur ce lien. J'ai passé hier 3 heures à essayer de comprendre sans y découvrir de logique (surtout que Dvorak passait bien - j'en étais même à me dire que j'aurais mieux fait de travailler pour Antonin Dvorak que pour Saâdane Afif ;-)... et voilà que ce matin tout remarche, même la version non simplifiée du script.
Intervention divine ?
En tout cas, désolé pour le dérangement. J'aurais dû m'en tenir à cette idée que je m'étais pourtant promis de respecter en informatique : quand apparaît quelque chose de pas logique, quand on sent bien que le script n'est pas en cause, il ne faut pas s'obstiner mais plutôt aller se coucher. Le lendemain, soit ça remarche, soit la grosse erreur qu'on avait faite et que l'on ne voyait pas nous saute enfin aux yeux
Ici pourtant, je ne vois vraiment pas oú pouvait se loger le problème. Mais gardons un peu de mystérieux dans ce monde de machines.

Merci notre père, délivre-nous du mal...
C'est vraiment très sympa de m'avoir répondu, j'y aurais peut-être encore perdu du temps.

Stéphane
0
Erratum au message précédent : il fallait lire "de se sentir un peu humain" bein entendu, et non le contraire. Je fatigue, moi...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Merci notre père, délivre-nous du mal
Je voudrais bien, mais il me manque une majuscule. C'est ballot !
0
Le pseudo étant "le père", je ne me suis pas permis d'y apporter une majuscule apparemment étrangère à Sa Volonté.
Merci encore
stéphane
0