Page 1 sur 2

Regex et array

Posté : 09 mai 2013, 17:19
par Gulliup
Bonjour à tous !

Voilà, je débute en PHP, et pour un projet personnel j'ai besoin d'ajouter tout les résultats d'une regex dans un array. Ils viennent du code source d'une page web de mon site.

J'en suis là :
$codesource = file_get_contents('Ma page.html');
$tableau = array (preg_grep ('#/article/[a-zA-Z0-9%_]#', $codesource));
echo $tableau[1];
Or je reçois un magnifique :

Code : Tout sélectionner

Warning: file_get_contents(Ma page.html [function.file-get-contents]: failed to open stream: Network is unreachable in /mnt/153/sdb/8/9/*************** on line 39 Warning: preg_grep() [function.preg-grep]: Second argument to preg_grep() should be an array in /mnt/153/sdb/8/9/************* on line 40

Quelqu'un pourrait m'aider ? Est-ce que la fonction file-get-contents n'est pas adapté à un code source ? Et quel est la syntaxe de preg_grep() ? J'ai cherché sur la documentation mais j'ai pas compris où était mon erreur.

Merci d'avance !

Re: Regex et array

Posté : 09 mai 2013, 17:45
par moogli
salut,

tu n'a pas besoin du array autour de preg_regrep cette fonction retourne un tableau

ensuite a priori file_get_contents ne peux pas être utilisé sur un fichier distant (Network is unreachable)

essai un fichier local. si c'est un fichier local l'erreur est étrange.


@+

Re: Regex et array

Posté : 09 mai 2013, 22:55
par Gulliup
Merci de ta réponse !

Pour le file_get_content pourtant si je met "echo $codesource", la page dont provient le code source s'affichera. Une idée d'une autre fonction ?

Ensuite pour le preg_grep, j'obtiens un message d'erreur après avoir mis ça :
	
$tableau = preg_grep ('#/wiki/[a-zA-Z0-9%_]#', $codesource));

Re: Regex et array

Posté : 09 mai 2013, 23:04
par moogli
je n'ai fait que traduire les messages d'erreurs. si tu as ce message d'erreur je ne vois pas comment tu peux avoir un contenu vu qu'il n'arrive pas a ouvrir le flux (failed to open stream).

pour le preg_grep() qu'elle erreur ?

@+

Re: Regex et array

Posté : 09 mai 2013, 23:29
par Gulliup
Celle-ci :
Warning: preg_grep() [function.preg-grep]: Second argument to preg_grep() should be an array in .......


Merci de ton aide !

Re: Regex et array

Posté : 10 mai 2013, 00:56
par moogli
le deuxième argument de preg_grep doit être un tableau.

utilise la fonction file plutôt que file_get_content pour utiliser preg_grep.

sinon utilise preg_match_all

@+

Re: Regex et array

Posté : 10 mai 2013, 08:43
par ghost5922
Bonjour,

pour un resultat
@preg_match('#/wiki/[a-zA-Z0-9%_]#', $codesource,$tableau);
pour plusieurs
@preg_match_all('#/wiki/[a-zA-Z0-9%_]#', $codesource,$tableau);

Re: Regex et array

Posté : 10 mai 2013, 10:32
par moogli
Sans les @ c'est une mauvaise façon de faire les erreurs doivent être traitée.
Au pire il est possible de n'a pas les afficher en production (display error off).

@+

Re: Regex et array

Posté : 10 mai 2013, 10:54
par ghost5922
En effet je regarde toujours mes logs apaches :p

Sinon autant mettre aussi une condition avant de traiter
if(preg_match('#/wiki/[a-zA-Z0-9%_]#', $codesource,$tableau)){
  print_r($tableau);
}
else{
    echo'Aucun resultat';
}
Ou
if(preg_match_all('#/wiki/[a-zA-Z0-9%_]#', $codesource,$tableau)){
    print_r($tableau);
}
else{
    echo'Aucun resultat';
}

Re: Regex et array

Posté : 10 mai 2013, 17:01
par Gulliup
Merci pour votre aide tout les deux ! Il semblerait que le problème du regex soit résolue, maintenant ça viendrait plus de là :
$codesource = file('http://mapage.html');
J'obtiens comme la dernière fois,
Warning: file(http://mapage.html) [function.file]: failed to open stream: Network is unreachable in /mnt/153/sdb/8/9/********** on line 39

Re: Regex et array

Posté : 10 mai 2013, 17:24
par moogli
Le fichier est sur ton site ?
Si oui vire le http et utilise un chemin local.

Le message est clair il ne peux ouvrir le flux réseau.

@+

Re: Regex et array

Posté : 10 mai 2013, 17:33
par Gulliup
Non malheureusement...

C'est impossible de récupérer par une fonction le code source d'une page lambda ?

Re: Regex et array

Posté : 10 mai 2013, 17:38
par moogli
Si, si l'hébergeur l'autorise (paramètre allow url wrap open, de mémoire, ou équivalent ;) )

Tu peux essayer avec curl.

@+

Re: Regex et array

Posté : 10 mai 2013, 20:31
par blof
Bonjour,

http://mapage.html :shock:

c'est quoi cette URL ???

pas de nom de domaine ??

=> il faut déjà que tu puisses ouvrir ta page dans un navigateur, c'est la première vérif à faire.

Re: Regex et array

Posté : 11 mai 2013, 19:52
par Gulliup
Bonjour,

http://mapage.html :shock:

c'est quoi cette URL ???

pas de nom de domaine ??

=> il faut déjà que tu puisses ouvrir ta page dans un navigateur, c'est la première vérif à faire.

C'était à titre d'exemple pour plus d'anonymat ;). Je me doute bien qu'il faut que je puisse l'ouvrir.
Je vais tester avec Curl, mais ce que je trouve étrange c'est que j'avais fait un test avec "$codesource= file_get_contents" ...... puis après un echo $codesource, et j'avais eu un copie exacte de la page (mise en forme etc...).