Faire croire à une include qu'elle est sur son propre serveur

Faire croire à une include qu'elle est sur son propre serveur - PHP - Programmation

Marsh Posté le 28-12-2006 à 17:12:44    

Coucou à tous :)  
 
J'ai includé une page, et les liens de cette page sont faits comme ceci : <a href="/page.php">  
 
Donc, comme l'include se croît dans mon site, elle met : www.monsite.com/page.php
Alors que je voudrais mettre : www.siteinclude.com/page.php !  
 
Alors j'ai testé ceci :  
 

Code :
  1. $_SERVER['SERVER_NAME'] = 'www.monsite.com';

 
 
Au cas où, mais ça ne fonctionne pas...  
 
Une idée ? :)  
 
Merci,  
 
Pouzy


---------------
Hello hello super jello
Reply

Marsh Posté le 28-12-2006 à 17:12:44   

Reply

Marsh Posté le 28-12-2006 à 17:21:32    

C'est le navigateur qui resout les liens relatifs comme cela et non l'include qui fait quoi que ce soit.
 
Ton include est tres mal venu dans ton cas : la page que tu demandes d'inclure va etre traitée par le serveur distant puis la page HTML générée sera envoyée a ton script. A final ton script ne voit qu'une page HTML que tu lui demandes de parser (fonction include) a la recherche de code PHP. Il est plus judicieux dans ton cas d'utiliser readfile qui a la difference d'include ne cherche pas a interpreter le code PHP qui pourrait se trouver dans une page.
 
Pour résoudre ton probleme tu vas devoir recuperer le code HTML de la page (file_get_content) puis effectuer un traitement sur les liens relatifs présent dans le document pour y concatener 'www.siteinclude.com/' avant. Tu peux t'orienter vers les expressions regulieres pour faire ce travail : preg_replace par exemple. Peut-etre sais-tu te servir des expressions regulieres ... dans le cas contraire tu viendras poser tes questions complementaires.

Reply

Marsh Posté le 28-12-2006 à 18:43:36    

En gros, ( je pense plutôt utiliser readfile, non ? ) readfile renvoie tout simplement le code HTML de la page ? à moi de tronquer où je veux ?  
 
Les expressions régulières je n'y ai touché que pour le BBCode, je reviendrai sans doute poser quelques questions.  
 
Donc impossible de changer le site dans une include ? :(
 
EDIT :  
 
Bon le readfile fonctionne, par contre je suis dans le flou pour les expressions régulières. En gros faut que je fasse une recherche sur tous les href=" et que je les remplace par href="http://site.com ?


Message édité par pouzy le 28-12-2006 à 18:46:53

---------------
Hello hello super jello
Reply

Marsh Posté le 28-12-2006 à 19:18:47    

En fait il y a encore une chose que je ne saisis pas : Le readfile ça ne retourne pas juste le code, ça affiche tout aussi, alors comment utiliser mes expressions régulières la dedans ?  
 
Je viens de tester, mais ça ne fonctionne pas : La page en question
 
Voici ce que j'ai testé :  
 

Code :
  1. str_replace ('href="','href="http://www.google.com"',readfile ($suite));


 
Avec dans $suite l'url de la page :/
Nada, les urls restent fausses :/ ( j'ai essayé un peu dans tous les sens le str_replace )


---------------
Hello hello super jello
Reply

Marsh Posté le 28-12-2006 à 19:58:41    

Reply

Marsh Posté le 28-12-2006 à 22:55:47    

Ho non ! pas bien ca :/

 

Sinon comme dit plus haut pour recuperer le contenu de la page distante et le traiter utilise file_get_content()

 

Le code magique dont tu auras besoin :

Code :
  1. $texte = file_get_contents('http://lesite.com/lapageinclude.html');
  2. $texte = preg_replace('#\b(href|src)="(?!http://)(.*)"#Ui','$1="http://lesite.com/$2"', $texte);
  3. echo $texte;


L'expression réguliere remplace les occurence de src="xxx" et de href="xxx" contenant des liens relatifs par src="http://lesite.com/xxx" href="http://lesite.com/xxx"


Message édité par afbilou le 28-12-2006 à 22:57:28
Reply

Marsh Posté le 29-12-2006 à 15:33:05    

Bon, ça progresse, ça progresse :) Je n'aurais jamais trouvé une expression régulière de ce type tout seul, alors merci beauco afbilou :) !
 
Me manque encore deux trois choses, par exemple quand on change de page, ça renvoie sur google mais ça c'est pas bien grave, mais aussi quand on fait une nouvelle recherche directement dans le formulaire qui est dans l'include ça fait une belle 404 :(


---------------
Hello hello super jello
Reply

Marsh Posté le 29-12-2006 à 17:00:51    

Ça renvoie sur Google ? Comment ça ?
 
Pour les formulaures, tu peux sûrement remplacer (href|src) par (href|src|action).
 
Sinon, je pense que rajouter l'option 's' à la regexp ne ferait pas de mal.

Reply

Marsh Posté le 30-12-2006 à 16:26:20    

CQuel est l'effet de l'option s ?
Et pour ce qui est de mon formulaire , j'ai une autre petite demande :  
 
Comment faire pour tronquer un texte à partir d'un certain mot ?  
 
Par exemple, si je veux enlever le style qu'il y a avant, il faudrait que je coupe jusqu'à </style> et que je n'affiche que ce qui vient après...  
J'ai tenté un substr mais bon, en fait le problème c'est que le nombre de caractère dépend de la recherche...


---------------
Hello hello super jello
Reply

Marsh Posté le 30-12-2006 à 16:37:34    

Vu tes compétences, utilise une frame ou penche toi sur le manuel regex


---------------
HAHAHA I M USING TEH INTERNET
Reply

Marsh Posté le 30-12-2006 à 16:37:34   

Reply

Marsh Posté le 30-12-2006 à 17:17:58    

pouzy a écrit :

CQuel est l'effet de l'option s ?


 
http://fr.php.net/manual/fr/refere [...] ifiers.php
 

Citation :


Et pour ce qui est de mon formulaire , j'ai une autre petite demande :  
 
Comment faire pour tronquer un texte à partir d'un certain mot ?  
 
Par exemple, si je veux enlever le style qu'il y a avant, il faudrait que je coupe jusqu'à </style> et que je n'affiche que ce qui vient après...  
J'ai tenté un substr mais bon, en fait le problème c'est que le nombre de caractère dépend de la recherche...


 
Faudrait que tu donnes un exemple, c'est pas super clair comme ça. [:figti]

Reply

Marsh Posté le 30-12-2006 à 18:10:35    

Merci pour le lien sielfried. :)
 
Pour l'exemple, on va faire simple.  
 
Si j'ai :
 

Code :
  1. <title><?=$mot?> - pouet</title>
  2. <style>.toctoc { color:white }
  3. .bipbip { margin-left:2px; }
  4. </style>
  5. <table><tr><td>Hihi</td></tr></table>


 
Et que je veux prendre seulement ce qu'il y a à partir du <table>, sachant que $mot peut varier, contenir des espaces etc ?  
J'ai fait des strlen pour essayer de compter, c'est à peu près potable ce que ça rend mais ça me casse tout mon design, il doit y avoir des tables qui partent à la trappe, et puis quand il y a des espaces dans le mot ça ne fonctionne pas toujours. Vous pouvez voir le résultat sur www.aidoforum.com/rechercher.php
 
Merci :)


---------------
Hello hello super jello
Reply

Marsh Posté le 01-01-2007 à 19:04:40    

Je suis pas sûr de comprendre ce que tu essaies de faire après être passé voir l'url que tu as donnée, ceci dit pour ce genre de manips effectivement les regexp c'est très bien.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed