Vous êtes ici Codes PHP et MySQL > URL > Vérifier la validité d'une adresse URL.

 

Vérifier la validité d'une adresse URL.

1er code: Vérifier la validité d'un adresse URL.
Permet d'afficher un message si le lien d'une URL est valide ou non

2eme code:
Vérifie la validité d'une url avec la fonction fsockopen, lecture de l'entête du document et lecture des différents messages d'erreurs de l'entêtes. Si le document retourne 200 alors tout va bien. La fonction retourne OK.
 
PHP Sources
Code vu 19980 fois
Enregistré le 08 Nov 2004
  • Digg ce code sur digg.com
  • Bookmark ce code sur del.icio.us
  • Bookmark ce code sur Google
  • Bookmark ce code sur Yahoo
  • Ajoute Vérifier la validité d'une adresse URL.
  • Partage ce code sur Facebook
 
 
 
 

Code Source


01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
 
<?php
/******************************************************************************/
/*                                                                            */
/*                       __        ____                                       */
/*                 ___  / /  ___  / __/__  __ _____________ ___               */
/*                / _ \/ _ \/ _ \_\ \/ _ \/ // / __/ __/ -_|_-<               */
/*               / .__/_//_/ .__/___/\___/\_,_/_/  \__/\__/___/               */
/*              /_/       /_/                                                 */
/*                                                                            */
/*                                                                            */
/******************************************************************************/
/*                                                                            */
/* Titre          : Vérifier la validité d'une adresse URL.                   */
/*                                                                            */
/* URL            : http://www.phpsources.org/scripts92-PHP.htm               */
/* Auteur         : PHP Sources                                               */
/* Date édition   : 08 Nov 2004                                               */
/*                                                                            */
/******************************************************************************/
?>
Code 1

<?php 

//Vérifier la validité d'un adresse URL.
//Permet d'afficher un message si le lien d'une URL est valide ou non.


// L'URL du site web
$site "http://www.phpsources.net";

$file = @fopen($site'r'); 
if ($file) 
{
echo 'URL valide !';
} 
else 
{
echo 'URL non valide !';
} 

?>


Code 2

<?php

function check_connect($host,$path)
//verifie la validite de l'adresse, c'est a dire on regarde si le site existe
// bien...
//on rend dans un tableau :
// "statut" : 0 si KO, 1 si redirect ou bien pour faire passer en local, 2 si OK
// "code" : code HTTP
// "message" : message
{
    if(!TEST_URL)
    //si on travaille en local, on ne se connecte pas
    {
        $tab_return["statut"] = 1;
        $tab_return["code"] = 0;
        $tab_return["message"] = "Pas de test de connexion\n";
        return $tab_return;
    }
    $connect 0;
    $no_code 0;
    //connexion par socket
    if ($fp = @fsockopen($host,80))
    {
        //traitement du path
        if(substr($path,strlen($path)-1) != '/')
        {
            if(!ereg("\.",$path))
                $path .= "/";
        }
        //envoi de la requete HTTP
        fputs($fp,"GET ".$path." HTTP/1.1\r\n"); 
        fputs($fp,"Host: ".$host."\r\n");
        fputs($fp,"Connection: close\r\n\r\n");
        //on lit le fichier
        $line fread($fp,255);
        $en_tete $line;
        //on lit tant qu'on n'est pas la fin du fichier ou
        // qu'on trouve le debut du code html...
        while (!feof($fp) && !ereg("<",$line) )
        {
            $en_tete .= $line;
            $line fread($fp,255);
        }
        fclose($fp);
        //on switch sur le code HTTP renvoye
        $no_code substr($en_tete,9,3);
        switch ($no_code)
        {
            // 2** la page a été trouvée
            case 200 :    $message "OK";
                        $color "#33cc00";
                        $connect 2;
                        break;
            case 204 :    $message "Cette page ne contient rien! (204)";
                        $color "#ff9966";
                        break;
            case 206 :    $message "Contenu partiel de la page! (206)";
                        $color "#ff9966";
                        break;
            // 3** il y a une redirection
            case 301 $message "La page a été déplacéé définitivement!(301)";
                        $message .= seek_redirect_location($en_tete);    
                        $color "#ff9966";
                        $connect 1;
                        break;
            case 302 :  $message "La page a été déplacéé momentanément!(302)";
                        $message .= seek_redirect_location($en_tete);
                        $color "#ff9966";
                        $connect 1;
                        break;
            // 4** erreur du coté du client
            case 400 :    $message "Erreur dans la requête HTTP! (400)";
                        $color "#ff0000";
                        break;
            case 401 :    $message "Authentification requise! (401)";
                        $color "#ff0000";
                        break;
            case 402 :    $message "L'accès à la page est payant! (402)";
                        $color "#ff0000";
                        break;
            case 403 :    $message "Accès à la page refusé! (403)";
                        $color "#ff0000";
                        break;
            case 404 :    $message "Page inexistante! (404)";
                        $color "#ff0000";
                        break;
            // 5** erreur du coté du serveur
            case 500 :    $message "Erreur interne au serveur! (500)";
                        $color "#ff0000";
                        $connect 1;
                        break;
            case 502 :  $message "Erreur cause passerelle du serveur! (502)";
                        $color "#ff0000";
                        break;
            // cas restant
            default : $message "Erreur non traitée -> numéro est : $no_code!";
                        $color "#000000";
                        break;
        }
    }
    else
    {
        $message "Impossible de se connecter par socket";
        $color "#ff0000";
    }
  //creation du tableau avec les valeurs a rendre
  $data_return["statut"] = $connect//la page est OK ou KO (200 => OK sinon KO)
  $data_return["code"] = $no_code//code HTTP renvoye
  $data_return["message"] = "<font color=\"".$color."\">".$message."</font>\n";
  return $data_return;
}

// utilisation

            $url "http://www.site.com";
            $url_parsee parse_url($url);  
            $host $url_parsee["host"];
            $path = isset($url_parsee["path"]) ? trim($url_parsee['path']) : '';
            $tab_return check_connect($host,$path);
            echo $tab_return["message"];

?> 
 

Fonctions du code

: Ouvre un fichier ou une URL - (PHP 4, PHP 5)
: Affiche une chaîne de caractères - (PHP 4, PHP 5)
: Ouvre une socket de connexion Internet ou Unix - (PHP 4, PHP 5)
: Calcule la taille d'une chaîne - (PHP 4, PHP 5)
: Retourne un segment de chaîne - (PHP 4, PHP 5)
: Expression rationnelle standard - (PHP 4, PHP 5)
: Alias de fwrite() - (PHP 4, PHP 5)
: Lecture du fichier en mode binaire - (PHP 4, PHP 5)
: Teste la fin du fichier - (PHP 4, PHP 5)
: Ferme un fichier - (PHP 4, PHP 5)
: Analyse une URL et retourne ses composants - (PHP 4, PHP 5)
: Détermine si une variable est affectée - (PHP 4, PHP 5)
: - (PHP 4, PHP 5)
Commentaires
Merci pour cette source, car on peut l'utiliser pour faire un voyant serveur perso actif ou down par l'intermédiaire d'un page internet hébergé par un autre serveur !!

Bien Bien encore merci.
 
Je me suis inscrit juste pour vous prévenir,
n'utilisé pas se code !

L'idée semble bonne, le code est juste mais ca inflige une enorme faille de sécurité.
En effect un pirate peut ainsi vous faire ouvrir directement un fichier de sont choix !
Et donc avoir une execution du script qu'il désire par le serveur.

Se code est risquer , as ne pas utiliser.
( Pour vérifier se que je dit, aller sur google : "faille de securité fonction open" )

Je conseil plutot d'utiliser un regex.
 
Lu,

merci pour l'info mais si tu avais lu correctement dans Google tu aurais vu que la fonction fopen n'entraine aucun risque si elle est correctement utilisée !!!

So, est-elle correctement utilisé dans ce code ??? -->> oui et oui

@fopen($site, 'r');

r= lecture seul

Ca etant j'ai ajouté un code (code 2) qui permet de lire les entetes des documents avec c'est vrai plus de sécurité, ca devrait être utilise et cela devrait rassurer DidUngar j'espère. ^^
 
Lecture seul ne signifie pas aucune interpretation de la part du serveur. Et c'est bien la le probléme.
Mais effectivement sur de l'écriture c'est pire.

Dans ton 2éme code par contre rien a dire , je pense même l'utiliser.
Car tu va en faite te connecter par socket, et donc géré toi même le resultat ==> aucune interpretation possible.

Désoler pour l'ancien commantaire un peut péjoratif.
Et Joli nouveaux code.
 
merci koogar ce code est cool mais comment remplaces tu le ereg par preg_match ?
j'ai des erreurs PHP :
Warning: preg_match() [function.preg-match]: Delimiter must not be alphanumeric or backslash in...
Warning: preg_match() [function.preg-match]: No ending matching delimiter '>' found in...
Merci
 
Ajouter un commentaire
Code de sécurité

Attention: Les champs marqués d'une étoile * sont obligatoires
 
Librairie PHP

Connexion

 
 

URL

 
 

PHP

 
 
 
 
    Offres d'emploi

Plus de 500 offres d'emploi PHP/MySQL

Offres d'emploi
 
    Editeur PHP
 
        Publicité