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 :

Expression reguliere, virer entete http de reponse... [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 79
    Points : 60
    Points
    60
    Par défaut Expression reguliere, virer entete http de reponse...
    bonjour a tous,
    je dois requeter un serveur pour obtenir une image.
    ensuite, je modifie les entetes envoyé au client avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header("Content-type image/gif");
    seulement, le serveur que je requete, me renvoie http 200 OK ( c'est normal )
    voici le code :
    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
     
    function getMapBin()
    	{
    	$url=$this->generateMapResult['url'];
    	$toSplit=strpos($url,'/',8);
    	$domain=str_replace('http://','',substr($url,'0',$toSplit));
    	$leReste=substr($url,$toSplit,strlen($url));
    	/*echo $domain;
    	echo '<br />'.$leReste.'<br />';
    	echo $toSplit;*/
    	$sock = fsockopen ($domain, 80, &$errno, &$errstr, 30);
    	if (!$sock) 
    	{
    	die('erreur :<br />'.$errno.$errstr);
    	}else{
    	$content='';
    		fputs ($sock, "GET  $leReste HTTP/1.0\r\n\r\n");
    		while (!feof($sock)) {
    		$content.=fgets ($sock,128);
    		}
    		echo $content;
    	}
    	fclose ($sock);
    	}
    juste avant
    j'ai essayé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $content=preg_replace("!(([a-z]+\r\n)*([a-z]+\r\n\r\n){1})(.*)!i","$2",$content);
    mais ça ne remplace rien...

    pour le masque, le pourquoi du comment:
    je suis parti du principe que chaque reponse http etait de la forme suivante :
    [a-z]+\r\n
    exepté la derniere, avant les données :
    [a-z]+\r\n\r\n
    ce qui donne le masque suivant :

    ([a-z]+\r\n)*([a-z]+\r\n\r\n){1})(.*)
    merci d'avance

    EDIT:
    j'ai rajouté les chiffres dans le masque, mais rien n'y fais

    ( donc nouveau masque : (([a-z0-9]+\r\n)*([a-z0-9]+\r\n\r\n){1})(.*) )

    EDIT 2:
    exemple de reponse que je reçois :
    HTTP/1.1 200 OK
    Date: Tue, 20 Dec 2005 16:49:50 GMT
    Server: mapserver/1.6.12
    Content-Type: image/gif
    Connection: close

  2. #2
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    Salut,

    Je ne suis pas très fort en Exp Reguliere mais bon peut être que je peux t'aiguiller un peu.

    bref, pourquoi ne pas faire une expression qui recherche :

    Tout ce qui commence par HTTP/,
    suivi par 0,n fois le motif suivant
    \r\ncle: valeur\r\n
    Puis par 0,1 fois
    \r\ncle=valeur
    Et qui se termine par un \r\n\r\n

    Je suis pas assez calé pour l'écrire mais avec un peu de temps et de motivation se devrait pouvoir se régler.

    Ceci dit j'ai trouver un bon soft pour s'entrainer aux expression regulieres.
    The RegExp Coach, soft qui utilisent les regexp de perl (ellles different une peu de celles utilisés par preg_match), mais il permet de tester en direct son expression et c'est vraiment géniale pour faire des expressions un peu compliquer.

    C'est gratuit est vraiment utile !

    http://www.weitz.de/regex-coach/

    Sinon voila quelques exemples d'expressions que j'ai ecrit auparavant et qui sont lié à ta question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $pattern    = '#^HTTP/[0-9][.][0-9][ ][0-9]{3}[ ]{1}[\w- ]*[_r_n]$#m'; 
    Recherche HTTP/1.1 200 OK qsdqsd \r\n
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     $pattern    = "#^([A-Z-a-z]{1,}[\s]{0,1}[:]{1}[\s]{0,1})[0-9-\w-,-:- -\\-/-_]{1,}[".$CRLF."]$#m";
    Recherche Date: Tue, 20 Dec 2005 16:49:50 GMT, ou bien encore 
    Content-Type: image/gif
    A l'époque je n'avais pas réussit à marié les deux pour séparer l'entete du corps et depuis je n'ai pas vraiment eu le temps de regarder... J'espère que tout cela pourra t'aider !

    Bye

  3. #3
    Inscrit
    Avatar de Caerbannog
    Inscrit en
    Novembre 2004
    Messages
    206
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 206
    Points : 273
    Points
    273
    Par défaut
    Ton but c'est d'obtenir le fichier ?
    Pourquoi tu fais pas "file_get_contents()" ou "file()" ?

    Sinon je te propose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $content = preg_replace("/^(:?[^\n\r]+\r\n)+\r\n(.+)$/is", '$1', $content);

  4. #4
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 79
    Points : 60
    Points
    60
    Par défaut
    effectivement, je n'y avais pas pensé ( file_get_content )

    pour ton expression reguliere, elle vire tout ( il reste seulement le dernier entete "Connection : close" )

    par contre, celle ci marche
    ^(.*\r\n)*


    j'ai aussi testé de mettre en commentaire tout le code et utiliser uniquement

    return file_get_contents($url);

    naturellement, ça fonctionne.


    j'ai maintenant un autre probléme,
    que j'utilise file_get_content ou "ma methode"

    l'image s'affiche sous Internet explorer, mais ne s'affiche pas sous firefox.
    je suppose que ça viens des entetes que j'envoie au navigateur client avant d'afficher le contenu de l'image.
    c'est a dire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    header('Content-type image/gif');
    echo $michelinWS->getMapBin();
    je pense qu'il faut que je rajoute un entete, mais je ne vois pas quoi.
    une idée ?

    EDIT :
    http://www.weitz.de/regex-coach/
    vraiment bien ce lien, il me permettra de combler mes lacunes dans les REGEXP ( quand j'aurais le temps )

  5. #5
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 79
    Points : 60
    Points
    60
    Par défaut
    voici un lien vers une image type

    ( lien qui ne sera plus valide d'ici quelques heures je suppose ( si vous voulez un exemple au cas ou le lien ne serait plus valide, redemandez moi ))


    EDIT:
    d'ailleur, en allant directement au lien, ça fonctionne sous firefox et IE.
    donc je suppose que je n'envoie pas les bon entetes au navigateur.
    ( et que IE les rajoute implicitement )

    EDIT2:
    bilan des test sur :
    MYIE2 oui
    IE oui
    MAXTON oui
    Mozilla Non
    Firefox Non

  6. #6
    Inscrit
    Avatar de Caerbannog
    Inscrit en
    Novembre 2004
    Messages
    206
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 206
    Points : 273
    Points
    273
    Par défaut
    C'est une faute de frappe dans ton script ou sur le forum ?

    header('Content-type: image/gif');

  7. #7
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 79
    Points : 60
    Points
    60
    Par défaut


    merci

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

Discussions similaires

  1. [langage] [Expression][Régulière] motif
    Par Cyspak dans le forum Langage
    Réponses: 4
    Dernier message: 23/09/2003, 14h24
  2. [langage] [debutant] expression reguliere
    Par toto_titi dans le forum Langage
    Réponses: 3
    Dernier message: 01/07/2003, 09h45
  3. Réponses: 2
    Dernier message: 16/06/2003, 15h15
  4. [langage] surement une expression régulière...
    Par armada dans le forum Langage
    Réponses: 5
    Dernier message: 30/05/2003, 17h06
  5. [langage] expression reguliere motif répétitif dans 1 pattern
    Par comme de bien entendu dans le forum Langage
    Réponses: 11
    Dernier message: 09/04/2003, 16h14

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