196 votes

Meilleur moyen de vérifier si une URL est valide

Je veux utiliser PHP pour vérifier si la chaîne de caractères stockée dans le fichier $myoutput contient une syntaxe de lien valide ou c'est juste un texte normal. La fonction ou la solution que je recherche devrait reconnaître tous les formats de liens, y compris ceux avec des paramètres GET.

Une solution, suggérée sur de nombreux sites, consiste en fait à interroger la chaîne de caractères (en utilisant CURL ou file_get_contents() ) n'est pas possible dans mon cas et je voudrais l'éviter.

J'ai pensé aux expressions régulières ou à une autre solution.

0 votes

L'utilisation de CURL ou la récupération de son contenu HTTP peut être lente, si vous voulez quelque chose de plus rapide et de presque aussi fiable, envisagez d'utiliser gethostbyaddr() sur le nom d'hôte. S'il se résout à une IP, alors il a probablement un site web. Bien sûr, cela dépend de vos besoins.

1 votes

Je serais intéressé par le cas d'utilisation de ce système.

1voto

DaveyJake Points 115

Je suis tombé sur cet article de 2012. Il prend en compte les variables suivantes peut ou ne peut pas être de simples URL.

L'auteur de l'article, David Müeller Il fournit cette fonction qui, selon lui, "... pourrait être utile", ainsi que quelques exemples de projets de l'UE. filter_var et ses lacunes.

/**
 * Modified version of `filter_var`.
 *
 * @param  mixed $url Could be a URL or possibly much more.
 * @return bool
 */
function validate_url( $url ) {
    $url = trim( $url );

    return (
        ( strpos( $url, 'http://' ) === 0 || strpos( $url, 'https://' ) === 0 ) &&
        filter_var(
            $url,
            FILTER_VALIDATE_URL,
            FILTER_FLAG_SCHEME_REQUIRED || FILTER_FLAG_HOST_REQUIRED
        ) !== false
    );
}

0voto

katulamu Points 1
public function testing($Url=''){
    $ch = curl_init($Url);
    curl_setopt($ch, CURLOPT_TIMEOUT, 5);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $data = curl_exec($ch);
    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    return ($httpcode >= 200 && $httpcode < 300) ? true : false;
}

-2voto

VishalParkash Points 441

Si quelqu'un est intéressé à utiliser le cURL pour la validation. Vous pouvez utiliser le code suivant.

<?php 
public function validationUrl($Url){
        if ($Url == NULL){
            return $false;
        }
        $ch = curl_init($Url);
        curl_setopt($ch, CURLOPT_TIMEOUT, 5);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $data = curl_exec($ch);
        $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);
        return ($httpcode >= 200 && $httpcode < 300) ? true : false; 
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X