Extraire les URL dans un texte sous PHP 5

Résolu/Fermé
abcd0 Messages postés 56 Date d'inscription mercredi 3 avril 2013 Statut Membre Dernière intervention 10 juillet 2013 - 3 avril 2013 à 11:42
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 18 avril 2013 à 19:10
Bonjour;

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
A voir également:

5 réponses

Utilisateur anonyme
3 avril 2013 à 12:14
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
0
abcd0 Messages postés 56 Date d'inscription mercredi 3 avril 2013 Statut Membre Dernière intervention 10 juillet 2013
3 avril 2013 à 12:33
Merci pour ta réponse mais ça je l'ai dejai fait ce que je voulais dire c'est que mon fichier contient des phrases et des URL et moi je veux que mon tableau ne contient que les URL et ignore les phrases
0
Utilisateur anonyme
3 avril 2013 à 13:46
Utilise preg_match ça fonctionne très bien
https://www.php.net/manual/fr/function.preg-match.php
0
abcd0 Messages postés 56 Date d'inscription mercredi 3 avril 2013 Statut Membre Dernière intervention 10 juillet 2013
3 avril 2013 à 16:07
est ce que je peux tester sur le début des phrases (je voudrais ignorer les phrases qui commencent par "!") et mettre le reste dans un tableau
0
Utilisateur anonyme
3 avril 2013 à 16:14
oui tu peux , par exemple :
Je ne suis pas sûr de la syntaxe, mais ça se trouve facilement :

if(!preg_match('^!' , $ligne)){
//Vrai si la ligne ne commence pas par "!"
}
0
abcd0 Messages postés 56 Date d'inscription mercredi 3 avril 2013 Statut Membre Dernière intervention 10 juillet 2013
3 avril 2013 à 16:28
il m'affiche le message suivant:
preg_match no ending dilimeter '!' found in /home/test.php on line 10
!!!
j'ai compris qu'il teste à la fin et moi je veux au début des phrases
0
abcd0 Messages postés 56 Date d'inscription mercredi 3 avril 2013 Statut Membre Dernière intervention 10 juillet 2013
3 avril 2013 à 16:46
j'ai inversé, j'ai fait if(!preg_match('/!^/' , $ligne)){ }
mais il n'a pas pris ça en considération, rien ne s'affiche!!
0
abcd0 Messages postés 56 Date d'inscription mercredi 3 avril 2013 Statut Membre Dernière intervention 10 juillet 2013
4 avril 2013 à 09:50
Bonjour ;
j'ai essayé avec cette méthode mais ça marche pas; j'ai fait:
for($i=0; $i<$nb;$i++){
$mot='/!^/'
if(!preg_match($mot, $tab[$i])){
array_push($te, $tav[$i]);
} }

print_r($t)
est ce que quelqu'un a une idée comment corriger ça!!!
merci d'avance.
0
Utilisateur anonyme
4 avril 2013 à 10:13
Essai comme ça :
if(!preg_match('/^!/','!hahaha')){
echo "ne commence pas par '!'";
}else{
echo "commence par '!'";
}

0
abcd0 Messages postés 56 Date d'inscription mercredi 3 avril 2013 Statut Membre Dernière intervention 10 juillet 2013
4 avril 2013 à 10:34
merci pour ta réponse; mais quand je copie ton exemple il dit bien que "" commence par"" mais quand je modifie :
if(!preg_match('/!^/','!tab[$i]')){
print_r($tab);}

//car il y a bien des éléments dans mes sous tableaux qui ne commencent pas par"!"
je ne sais pourquoi!!!
0
Utilisateur anonyme
4 avril 2013 à 10:37
Tu peux faire un var_dump() de ton tableau et poster le resultat pour voir à quoi il ressemble?
0
abcd0 Messages postés 56 Date d'inscription mercredi 3 avril 2013 Statut Membre Dernière intervention 10 juillet 2013
4 avril 2013 à 10:55
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
0
abcd0 Messages postés 56 Date d'inscription mercredi 3 avril 2013 Statut Membre Dernière intervention 10 juillet 2013
4 avril 2013 à 11:23
je ne sais pas est ce que je peux faire ça avec des classes!!!
0
Utilisateur anonyme
4 avril 2013 à 11:26
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>";
}
}
0
abcd0 Messages postés 56 Date d'inscription mercredi 3 avril 2013 Statut Membre Dernière intervention 10 juillet 2013
4 avril 2013 à 11:51
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.
0
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...
0
abcd0 Messages postés 56 Date d'inscription mercredi 3 avril 2013 Statut Membre Dernière intervention 10 juillet 2013
4 avril 2013 à 12:03
c'est une phrase qui commence par des mots ensuite URL
! mon titre http:/jfdnjfjvnfvnnj
c'est comme ça mes éléments
0

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

Posez votre question
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié par [Dal] le 4/04/2013 à 12:26
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
0
abcd0 Messages postés 56 Date d'inscription mercredi 3 avril 2013 Statut Membre Dernière intervention 10 juillet 2013
4 avril 2013 à 12:49
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
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
4 avril 2013 à 13:33
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
0
abcd0 Messages postés 56 Date d'inscription mercredi 3 avril 2013 Statut Membre Dernière intervention 10 juillet 2013
4 avril 2013 à 13:41
Merci pour vous tous!! c'est vraiment gentil
0
abcd0 Messages postés 56 Date d'inscription mercredi 3 avril 2013 Statut Membre Dernière intervention 10 juillet 2013
4 avril 2013 à 18:03
je ne sais pas pourquoi [25] => Array
(
[0] => http://www.hgdghg.html
)

[26] => Array
(
)

[27] => Array
(
)

[28] => Array
(
[0] => http://www.dfggnhdd.asp
) pourquoi 26 et 27 ne contiennent rien
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
4 avril 2013 à 18:50
Sans disposer de ton code et d'un jeu de données où ce problème se produit, on ne peut pas faire grand chose.


Dal
0