IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Différencier les url des documents et celles des pages web


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 55
    Points : 49
    Points
    49
    Par défaut Différencier les url des documents et celles des pages web
    Salut à tous,

    Je suis en train de faire un petit cms. J'ai pas vraiment de problème, mais je me demande comment faire un truc, si vous pouviez me donner quelques conseils

    Voilà, je récupère dans une string le contenu au format HTML.
    Avec une regex je récupère et parcours tous les liens (balise a).

    Ce que je voudrais faire, c'est que si le lien mène vers un document (pdf, image, txt, etc), ce document est téléchargé sur le serveur, et le lien est modifié pour pointer vers le fichier du serveur.
    Et si le lien est celui d'une page web, php le laisse tel quel.

    Le truc que je me demande comment faire, c'est pour différencier ces 2 types de liens.
    J'ai pensé faire une liste de tous les documents les plus courants, mais il y en a beaucoup, je risque d'en oublier et en plus c'est pas top optimisation.

    Sinon pour voir si c'est une page web, là encore c'est compliqué : si le lien est juste un nom de domaine, ou s'il comporte une ancre, ou des variables get... c'est pas évident de prendre en compte toutes les situations.

    Voilà j'ai fait quelques recherches là dessus mais j'ai rien trouvé de concluant.
    Avez vous des idées ?

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Août 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 55
    Points : 49
    Points
    49
    Par défaut
    Bon finalement je me suis fait ma fonction.
    Pour ceux que ça pourrait intéresser la voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    function is_webpage($link){
        // On vire du lien les variables get et les ancres potentielles
        $tmp=explode('#',$link);
        $tmp=explode('?',$tmp[0]);
        $link=$tmp[0];
        // Liste des extensions considérées comme pages web
        $ext_list=array('asp','aspx','asc','ascx','cfc','cfm','html','htm','jsp','php3','php');
        // Si le dernier caractère est un slash on considère que c'est une page web
        if(substr($link,strlen($link)-1)=='/')$return=true;
        else{
           // On recherche le protocole, pour par confondre les slashs du protocole et ceux du file path
            $tmp=explode('://',$link);
            $protocole=count($tmp)>0?$tmp[0].'://':'';
            $tmp=explode('/',str_replace($protocole,'',$link));
            // Si le lien est le nom de domaine, c'est une page web
            $return=$protocole.$tmp[0]==$link?true:chk_ext_file($link,$ext_list);
        }
        return $return;
    }
    Elle utilise une autre fonction que j'avais faite avant, chk_ext_file, qui renvoie true si le fichier (string)$file_name a l'une des extensions de (mixed array, string) $ext, et false sinon.

    Elle est là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function chk_ext_file($file_name,$ext,$multi_ext=false){
        $multi_ext=(is_array($ext))?true:$multi_ext;
        $ext_file=pathinfo($file_name,PATHINFO_EXTENSION);
        if(!$multi_ext)return (strtoupper($ext_file)==strtoupper($ext))?true:false;
        else{
            $ok=false;
            foreach($ext as $e)if(strtoupper($e)==strtoupper($ext_file)){$ok=true;break;}
            return $ok;
        }
    }
    Si vous voyez des améliorations à apporter, n'hésitez pas !

    Edit : J'ai apporté de légères modifs pour optimiser les fonctions.
    Edit 2 : Je viens de me rendre compte d'une erreur pour vérifier le dernier caractère. C'est corrigé.

Discussions similaires

  1. Réponses: 0
    Dernier message: 02/07/2012, 16h12
  2. Réponses: 2
    Dernier message: 09/04/2010, 00h29
  3. Réponses: 2
    Dernier message: 19/12/2008, 10h02
  4. Réponses: 5
    Dernier message: 30/05/2008, 10h04
  5. Réponses: 3
    Dernier message: 29/12/2005, 14h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo