Extraire les URL dans un texte sous PHP 5
Résolu[Dal] Messages postés 6122 Date d'inscription Statut Contributeur Dernière intervention -
je voudrais extraire des URL qui son contenus dans des fichier et les mettre dans un tableau mais je ne sais pas est ce que je peux faire ça avec php5;
quelqu'un à la moindre idée comment y procéder!!!!!!
Merci d'avance pour votre aide
5 réponses
La question porte sur l'extraction d'URL contenues dans des fichiers à l'aide de PHP5 et preg_match_all, puis leur regroupement dans un tableau pour traitement des données. La solution proposée confirme que la regex utilisée est fonctionnelle et explique comment preg_match_all retourne des tableaux imbriqués, avec $urls[0] contenant les résultats, à intégrer ensuite dans un tableau principal. Si besoin d'un tableau unidimensionnel, on peut utiliser array_merge, ou stocker chaque ensemble d'URLs par fichier dans une structure adaptée, ce qui évite les confusions entre les résultats multi-dimensionnels. D'autres échanges soulignent qu'il faut comprendre les index de $urls et que l'adaptation dépend du format exact des données contenues dans les fichiers, afin d'éviter les erreurs de structure.
-
Salut salut,
Regarde de ce côté là :<?php //déclaration d'un tableau $tableau = array(); //ouverture de ton fichier texte (tonfichier.txt) en lecture (r) $handle = @fopen("tonfichier.txt", "r" ); //Si le retour n'est pas false -> ouverture réussie if ($handle) { //Tant que ce n'est pas la fin du fichier while (!feof($handle)) { //Récupération d'une ligne $buffer = fgets($handle, 4096); //Insertion dans le tableau de la ligne récupérée $tableau[] = $buffer; } //Fermeture du flux fclose($handle); } if ($tableau) {//affichage du tableau print_r($tableau); } else {//Message d'erreur si échec echo "Le remplissage du tableau a échoué"; } ?>
Et vive PHP manual :
https://www.php.net/manual/fr/function.fopen.php
https://www.php.net/manual/fr/function.feof.php
https://www.php.net/manual/fr/function.fgets.php
-
-
Essai comme ça :
if(!preg_match('/^!/','!hahaha')){ echo "ne commence pas par '!'"; }else{ echo "commence par '!'"; }
-
-
-
excuse moi je ne peux pas te donner les données du tableau(c'est confidentiel); de toute façon avec ce que j'ai fait il affiche tout les élément de mon tableau à deux dimensions (les autres éléments contiennent "!" mais au milieu et moi je veux juste enlever ceux qui commencent avec "!")
Merci d'avance -
-
-
Non mais tu peux faire un exemple , si ton tableau ressemble à ce que tu m'as dis , à savoir:
array("!blablabla", "http://blop.blop", "!blobloblo", "http://arg.arg");
Le code que j'ai mi fonctionne
for($i=0;$i<count($tab);$i++){ if(!preg_match('/^!/',$tab[$i])){ echo $tab[$i]." : ne commence pas par '!'<br>"; }else{ echo $tab[$i]." : commence par '!'<br>"; } }-
je ne sais pas mais quand je fais ça:
for ($i=0; $i<$nb; $i++)
{
if(!preg_match('/^!/','$tab[$i]'))
{
array_push($te, $tab[$i]);
}
print_r($te);
}
je pense que c'est par rapport à mon tableau qui est un tableau à 2 dimension :
array(
[0]=>Array(
[0]=>!gsff hsztz gsfs
[1]=>jdgg ! hdg)
[1]=>Array(
[0]=>lkjd ! ioek ! jeuu mot phrase
[1]=>!pas pld ! pd
.
.
.)
.
.
.) c'est comme ça qu'il est mon tableau et comme ça qu'il s'affiche les élément sont des phrases. -
Ok donc il faut que tu doubles la boucle :
for($i=0;$i<count($tab);$i++){
for($j=0;$j<count($tab[$i]);$j++){
if(!preg_match('/^!/',$tab[$i][$j])){
...
}
}
Par contre je vois dans l'exemple que tu as mi que dans ton tableau certains éléments ne sont pas des url et ne commencent pas par "!" du coup ça ne fonctionnera pas... -
-
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Salut abcd0,
Tu lis ton fichier avec file_get_contents pour mettre la totalité de son contenu dans une variable ((par exemple dans $contenu) :
https://www.php.net/manual/en/function.file-get-contents.php
Puis, tu utilises preg_match_all pour matcher toutes les URL contenues dans la variable $contenu, et les stocker dans un tableau (qu'on va nommer, par exemple, $urls), par rapport à une regex adéquate.
https://www.php.net/manual/fr/function.preg-match-all.php
Tu peux utiliser une regex, telle que :
preg_match_all('/https?:\/\/[-A-Z0-9+&@#\/%=~_|$?!:,.]*[A-Z0-9+&@#\/%=~_|$]/i', $contenu, $urls); print_r($urls);
Cette regex est inspirée de celle-ci : http://www.regexguru.com/2008/11/detecting-urls-in-a-block-of-text/ qui détecte des URL sur d'autres protocoles que http ou https et de cette réponse sur SO : https://stackoverflow.com/questions/2720805/php-regular-expression-to-get-a-url-from-a-string
Dal-
salut Dal merci pour ta réponse
mais quand j'ai fait ça:
for ($i=0; $i<$nb; $i++)
{for($j=0;$j<count($tab[$i]);$j++)
{
preg_match_all('/https?:\/\/[-A-Z0-9+&@#\/%=~_|$?!:,.]*[A-Z0-9+&@#\/%=~_|$]/i', $tab[$i], $urls);
print_r($urls);
}
il m'affiche ça
Array
(
[0] => Array
(
[0] => http://www.jhhfbbvbv
)
)
Array
(
[0] => Array
(
[0] => http://www.francehbhfhgfhghg
)
)
Array
(
[0] => Array
(
[0] => http://www.jhfhvfuhvuvvv
)
)
Array
(
[0] => Array
(
[0] => http://www.cjfjhvfhvjff
)
Array
(
[0] => Array
il n'est pas structuré ce tableau car moi mon tableau à deux dimension vu qu'il va contenir les nom des fichiers et le contenu de chaque fichier -
les résultats sont retournés dans $urls[0] (comme le montre le print_r), car il n'y a qu'une seule expression à capturer. C'est le fonctionnement normal de preg_match_all.
a toi d'en faire ce que tu veux par la suite, les mettre dans un autre tableau, etc.
par exemple, en faisant :
$res['fichier1'] = $urls[0];
preg_match_all ne va pas faire cela pour toi.
Dal -
-
-
-