Regex et array

Petit nouveau ! | 6 Messages

09 mai 2013, 17:19

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 !

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

09 mai 2013, 17:45

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.


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

Petit nouveau ! | 6 Messages

09 mai 2013, 22:55

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));

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

09 mai 2013, 23:04

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 ?

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

Petit nouveau ! | 6 Messages

09 mai 2013, 23:29

Celle-ci :
Warning: preg_grep() [function.preg-grep]: Second argument to preg_grep() should be an array in .......


Merci de ton aide !

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

10 mai 2013, 00:56

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

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

Mammouth du PHP | 619 Messages

10 mai 2013, 08:43

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);

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

10 mai 2013, 10:32

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).

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

Mammouth du PHP | 619 Messages

10 mai 2013, 10:54

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';
}

Petit nouveau ! | 6 Messages

10 mai 2013, 17:01

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

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

10 mai 2013, 17:24

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.

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

Petit nouveau ! | 6 Messages

10 mai 2013, 17:33

Non malheureusement...

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

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

10 mai 2013, 17:38

Si, si l'hébergeur l'autorise (paramètre allow url wrap open, de mémoire, ou équivalent ;) )

Tu peux essayer avec curl.

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

Eléphant du PHP | 170 Messages

10 mai 2013, 20:31

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.

Petit nouveau ! | 6 Messages

11 mai 2013, 19:52

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...).