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 :

[PHP-JS] Récupérer la source d'une page et la réafficher correctement [Fait]


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 15
    Points : 7
    Points
    7
    Par défaut [PHP-JS] Récupérer la source d'une page et la réafficher correctement
    Bonjour !

    J'essaie de réaliser une page dans le genre du Debilitron
    qui récupère le code source d'une page pour le transformer et le réafficher.

    (je passe l'url de la page en paramètre GET )

    Voici mon code source en l'état actuel des choses :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
     
    <?php 
     
    //Variable de test 
     
    $ok = 0; 
     
     
    //Je récupère l'url cible 
     
    $fichier = $_GET['url']; 
    $fichier = "http://".$fichier ; 
     
     
    // J'ouvre ma page en lecture 
    $fp=@fopen($fichier,"r"); 
    $texte = ""; 
     
     
    // si elle existe 
    if($fp) 
    { 
     
    je la place dans la variable $texte 
     
       while(!feof($fp)) 
       { 
       $texte .= fgets($fp,1024); 
       } 
     
    // Et j'indique que la copie à réussi. 
     $ok = 1;  
     
    } 
     
    else 
    { 
    echo("Impossible d'ouvrir la page sélectionnée"); 
    }
    Mais c'est pour afficher cette page correctement dans mon navigateur que cela pose problème.

    En effet, la plupart des images et de liens ne fonctionnent plus.

    J'ai bien essayé de bricoler qque chose à grands coups de str_replace mais je n'arrive pas à prendre en compte tous les cas de figure ( liens href avec doubles quotes, simples quotes, pas de quotes, balises src, ), nottament quand les liens se font via du Javascript.

    En Clair :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
     
    if ($ok = 1) { 
     
     
    // C'est à cet emplacement qu'il me manque une routine permettant de réafficher la page correctement ! 
     
     
    echo("$texte"); 
    }

    Si vous avez une solution pratique et efficace pour mon problème, manifestez vous et je vous donne l'assurance de mon éternelle reconnaissance !

    Merci !

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    expose mieux ton problème , pourquoi as-tu besoin de faire cela pour l'afficher la page , si c pour ca tu ouvres une iframe et voila le tour est joué

  3. #3
    Futur Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    Et bien en fait j'ai besoin de récupérer le code source de la page pour pouvoir le modifier puis le réafficher. Par exemple je voudrais pouvoir remplacer des images, modifier les textes....

    Mais dans un premier temps, j'aimerais bien réussir à reconstituer la page correctement, en mettant un "http://l'adresse du site/" devant toutes les images ou liens qui en ont besoin.

    J'espère que c'est plus clair.

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Pour pouvoir modifier le texte d'origine vous aurez besoin d'utiliser les expressions régulières (fonction preg_replace et consoeurs). Il doit y avoir beaucoup d'exemple d'utilisation sur ce forum et je vous renvoie aussi au tutoriel intitulé Initiation aux expressions régulières en PHP.


    Julp.

  5. #5
    Futur Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    Merci !

    Maintenant je sais dans quelle direction m'orienter. JE vous tiens au courant de l'avancée des travaux !

  6. #6
    Futur Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    Bon, apres un dur labeur j'arrive a afficher convenablement images et liens dans la plupart des situations.

    Mais je reste bloqué dans certains cas nottament quand les menus d'un site sont générés via un javascript externe ainsi que d autre cas.

    Voila le bout de code pour mettre à jour les liens et images (c'est certainement du grand n importe quoi (pas de preg_replace...) mais ca fonctionne pas mal)

    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
    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
     
     
     
    //Si mon url est valide :
     
    if ($ok = 1) {
     
     
     
    //j'edite d'abord les liens de type src : 
     
    //On compte le nombre de boucles a faire :
     
    $nbimages = substr_count($texte,"src=");
    $i = 0;
     
    //On place le code dans une variable temporairesur laquelle on va travailler
     
    $textetemp = $texte ;
     
     
    //Tant qu'il existe des balises de type src non traitées :
     
    while ($i < $nbimages) {
     
    $image = "";
     
    //On repere la position du premier src  non traité
     
       $pos = strpos($textetemp,"src=") + 4;
       $char = "debut";
     
    //Et tant que l'on ne rencontre pas un caractère indiquant la fin du champ 
     
        while ($char != " " && $char != ">" && $char != "," ) {
     
    //On continue d'aligner les caractères récupérés
     
    $char = substr($textetemp,$pos, 1); 
     
    if ($char != " " && $char != ">" && $char != ",") { $image .= $char; }
    $pos ++ ;
     
        }
     
     
    // $image contient donc le chemin de la premire immage non traitée :
     
     
    //On supprime le dernier caractère 
    //on remplace les caratcères génant en début et en fin de chaine (quotes ...)
     
    $image= substr($image,0,strlen($image) - 1);
     
    $image = str_replace("'","",$image);
    $image = str_replace("\"","",$image);
    $image = str_replace(">","",$image);
    $image = str_replace(",","",$image);
     
     
    //Si le lien ne commence pas par http://
     
    if (substr($image,0,7) != "http://") { 
     
    // On rajoute l'adresse du site devant le lien
     
    if (substr(trim($image),0,1) == "/") $imagenew = $fichier.trim($image); else $imagenew = $fichier."/".trim($image);
     
    }
     
    //Et sinon ben .. on ne remplace pas 
    else $imagenew = $image ;
     
    //Et on continue la boucle
    $i++;
     
     
    //Si le lien a besoin d'etr mis a jour 
    if (substr($image,0,7) != "http://")
    {
    // On le modifie dans le texte temporaire et le texte final
    $texte = str_replace("$image","$imagenew",$texte);
    $textetemp = str_replace("$image","$imagenew",$textetemp); }
     
     
    //Et on coupe tout la partie déja traitée du code du texte temporaire
    $textetemp = substr($textetemp,$pos,strlen($textetemp));
     
    }
     
    //De meme avec les href
    // Traitement des href : 
     
     
    //On compte le nombre de boucles a faire :
     
    $nbliens = substr_count($texte,"href=");
    $i = 0;
    $textetemp = $texte ;
     
     
    while ($i < $nbliens) {
     
       $lien = "";
     
    //On repere la position du premier src  
     
     
       $pos = strpos($textetemp,"href=") + 6;
     
       $char = "debut";
     
        while ($char != " " && $char != ">" && $char != "," ) {
    	$char = substr($textetemp,$pos, 1); 
     
        if ($char != " " && $char != ">" && $char != ",") { $lien .= $char; }
        $pos ++ ;
     
        }
     
     
    $lien= substr($lien,0,strlen($lien) - 1);
    $lien = str_replace("'","",$lien);
    $lien = str_replace("\"","",$lien);
    $lien = str_replace(">","",$lien);
    $lien = str_replace(",","",$lien);
     
    if (substr($lien,0,7) != "http://") { 
     
    if (substr(trim($lien),0,1) == "/") $liennew = $fichier.trim($lien); else $liennew = $fichier."/".trim($lien);
     
    }
    else $liennew = $lien ;
     
     
     
    $i++;
     
    if (substr($lien,0,7) != "http://")
    $texte = str_replace("$lien","$liennew",$texte);
    $textetemp = str_replace("$lien","$liennew",$textetemp);
     
    $textetemp = substr($textetemp,$pos,strlen($textetemp));
     
     
    }
     
    //Et on affiche la page :
     
    echo $texte;
    }

  7. #7
    Futur Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    La solution postée précedemment étant à l'usage beaucoup trop lourde et lente, j'ai finalement décidé de me pencher sur les expressions régulières et j'avour que c'est plus pratique :

    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
    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
    //
    // Préparation de la page
    //
     
    //Travail de type src 
     
     
    $regimg = "#src=[^>]+#";
    $max = preg_match_all($regimg,$texte,$img);
     
    $i = 0;
    //print_r($img);
    while ($i < $max)
    {
    $tmp = $img[0][$i];
    $init = $tmp;
     
    $data = preg_split("#[[:space:]]#",$tmp);
    $tmp = $data[0];
    $data = preg_split("#<#",$tmp);
    $tmp = $data[0];
     
    $tmp = str_replace("src=","",$tmp);
    $tmp = str_replace("'","",$tmp);
    $tmp = str_replace("\"","",$tmp);
    $tmp = str_replace(">","",$tmp);
     
    $image = $tmp;
    //echo $image."<br>";
     
     
     
    if (substr($image,0,7) != "http://") { 
     
    if (substr(trim($image),0,1) == "/") $imagenew = $mere.trim($image); else $imagenew = $mere."/".trim($image);
     
    }
    else $imagenew = $image ;
     
    $exit = str_replace($image,$imagenew,$init);
    $texte = str_replace($init,$exit,$texte);
     
    $i++;
    }
     
     
    // Traitement des href : 
     
    $reglien = "#href=[^>]+#";
    $max = preg_match_all($reglien,$texte,$li);
     
    $i=0;
     
    while ($i < $max)
    {
     
    $tmp = $li[0][$i];
    $init = $tmp;
    $data = preg_split("#[[:space:]]#",$tmp);
    $tmp = $data[0];
    $data = preg_split("#<#",$tmp);
    $tmp = $data[0];
     
    $tmp = str_replace("href=","",$tmp);
    $tmp = str_replace("'","",$tmp);
    $tmp = str_replace("\"","",$tmp);
    $tmp = str_replace(">","",$tmp);
     
    $lien = $tmp;
     
    if (substr($lien,0,7) != "http://") { 
     
    if (substr(trim($lien),0,1) == "/") {
    $liennew = $mere.trim($lien);
     }else $liennew = $mere."/".trim($lien);
     
    }
    else $liennew = $lien ;
     
    $exit = str_replace($lien,$liennew,$init);
    $texte = str_replace($init,$exit,$texte);
     
    $i++;
    }
     
     
     
     
    // Traitement des url( : 
     
    $regurl = "#url\([^)]+#";
     
     
    $max = preg_match_all($regurl,$texte,$ur);
     
    $i=0;
     
    while ($i < $max)
    {
     
    $tmp = $ur[0][$i];
    $init = $tmp;
    $tmp = str_replace("url(","",$tmp);
    $tmp = str_replace("'","",$tmp);
    $tmp = str_replace("\"","",$tmp);
     
     
    $url = $tmp;
     
    if (substr($url,0,7) != "http://") { 
     
    if (substr(trim($url),0,1) == "/") $urlnew = $mere.trim($url); else $urlnew = $mere."/".trim($url);
     
    }
    else $urlnew = $url ;
     
    $exit = str_replace($url,$urlnew,$init);
    $texte = str_replace($init,$exit,$texte);
     
    $i++;
    }

    Voila !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 30/08/2007, 00h52
  2. [cURL] Récupérer code source d'une page
    Par sourivore dans le forum Bibliothèques et frameworks
    Réponses: 11
    Dernier message: 17/06/2007, 13h53
  3. [PHP-JS] Récupérer le source d'une page
    Par sourivore dans le forum Langage
    Réponses: 4
    Dernier message: 13/10/2006, 19h05
  4. Réponses: 6
    Dernier message: 13/04/2006, 11h44

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