[HELP] preg_match_all

Eléphanteau du PHP | 16 Messages

04 janv. 2012, 00:05

Bonsoir

je sollicite votre aide car je bloque sur un problème PHP.

J'ai une page internet où, une fois loggué, votre pseudo apparait tout le temps (sur toutes les pages du site)

je souhaite créer une image (en PHP) qui affiche un texte genre :

" bonjour [pseudo], votre IP est [IP]"

voici mon code actuel, mais qui ne récupère pas le pseudo:

Code : Tout sélectionner

<?php $Page = file_get_contents ("http://www.site.com/"); preg_match_all('/font-size: 24px;">(.*?)</span> </a></h2>/', $Page, $Data); $name = $Data[0][0]; $ip = getenv ('REMOTE_ADDR'); header("Content-type: image/gif"); ............



dans la source de la page, l'info du pseudo est ici:

Code : Tout sélectionner

<span style="font-family:'CrackhousefranceRegular'; font-size: 24px;">PSEUDO ICI</span> </a></h2>


comment récupérer la chaine PSEUDO ICI ?
merci à tous pour votre aide

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

04 janv. 2012, 09:07

Salut,

Je pige pas trop la si c'est ton tu récupère le pseudo via ton système de session.

À tu regardé ce que retourne le preg_match_all ?

À tu vérifier le masque ? (voir ajouter des options comme i ou s histoire d'éviter les problèmes ?)

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 16 Messages

04 janv. 2012, 12:34

je précise que ce n'est pas mon site....

je n'ai pas jeté un oeil sur ce que me retourne la fonction....

Eléphant du PHP | 209 Messages

04 janv. 2012, 13:17

$html = '<span style="font-family:\'CrackhousefranceRegular\'; font-size: 24px;">PSEUDO ICI</span> </a></h2>';
$pattern = '#font-size: 24px;">(.*?)</span>#';
preg_match_all($pattern, $html, $matches);
echo $matches[1][0];

Eléphanteau du PHP | 16 Messages

04 janv. 2012, 17:15

merci, je vais vérifier déjà ce que me retourne 'file_get_contents ("http://www.site.com/");' pour être sur que le pattern recherché existe....

je vous tiens informé ;)

Eléphanteau du PHP | 16 Messages

04 janv. 2012, 20:49

Visiblement y'a des soucis au niveau de la fonction 'file_get_contents'

Code : Tout sélectionner

<?php $Page = file_get_contents('http://www.site.fr/'); $pattern = '#font-size: 24px;">(.*)</span>#'; preg_match_all($pattern, $Page, $Data); $name = $Data[1][0]; $ip = getenv ('REMOTE_ADDR');
j'ai envoyé $Page dans une base sql....et il est vide (je rappelle que www.site.fr n'est pas mon site! )

du coup le preg_match_all ne me retourne rien non plus :(

en javascript, je sais qu'on peut utiliser quelque chose du genre :

Code : Tout sélectionner

xmlhttpRequest( { method: 'GET', url: 'http://www.site.fr', ....
mais je cherche a facon de faire tout en PHP...

quelqu'un voit l'erreur?

ViPHP
ViPHP | 2287 Messages

04 janv. 2012, 22:55

Comme tu disais que le site que tu veux "aspirer" n'est pas le tien, il est possible que le site aie connu une panne temporaire, ou encore qu'il aie mis en place un filtrage qui exclut les consultations de cette manière.

Si tu n'as aucun contrôle sur le site cible, il serait donc prudent de tester tous les cas de figure (partir du principe que le cas $Page vide peut arriver ponctuellement ou éternellement) :)
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Eléphanteau du PHP | 16 Messages

04 janv. 2012, 23:14

ce n'est pas une panne temporaire car en gros c'est une signature que j'affiche

donc je vois bien cette signature, mais pour vérifier, j'envoie toutes les données vers une base SQL...l'image fonctionne, s'affiche, et ma base SQL se remplie bien avec l'ip, mais $Page renvoie rien, et $name non plus du coup

peut on vérifier si effectivement il s'agit d'un filtrage du site?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

05 janv. 2012, 10:08

j'aouterais aussi que par défaut (il me semble) l'utilisation des fichier distant n'est pas permise.

vérifie :
- ton niveau de report d'erreur (E_ALL | E_STRICT pour développer)
- la valeur du paramètre allow_url_fopen s'il n'est pas a on ça ne peu fonctionner (avec un phpinfo), s'il est a off, je pense que le 1ère point n'est pas bon (devrais surement y avoir un message d'erreur ;) )

Après reste les chaussettes, plus complexe mais pas impossible pour une utilisation aussi simple. De plus certain te dirais au pour parser du html, c'est pas grand coup preg_match* mais avec DOM voir simplexml ;)

sinon, juste pour l'étique, vois avec le proprio de www.site.fr, s'il te peux te mettre a disposition l'information que tu souhaite sous forme de service web. C'est mieux sur le plan déontologie / humain (/ légale ?) et en plus résoudrais ton problème simplement XD

@+
Il en faut peu pour être heureux ......