Bon, voilà les scripts que j'utilise pour faire afficher une page en provenance d'un autre site
à l'intérieur d'une page de mon site... c'est pas 100% garanti compatible avec tous les contenus
(en particulier avec les formulaires), mais ça fonctionne plutôt bien pour du contenu "basique".
Ça me permet en particulier de "browser" des répertoires à l'intérieur de mon site.
Pour afficher la page "http://www.lesiteetranger.com/lescript.php"
après le contenu d'un article, il suffit de mettre dans le texte de cet article la balise:
<browse http://www.lesiteetranger.com/lescript.php>
Dans le squelette des articles, j'ai:
[<div class="textearticle"> (#TEXTE|fl_complements)</div>]
<?
if ($flbrowse){
include("browse.php");
}
?>
Mon fichier browse.php a la tête suivante:
<?
if (!isset($requestedurl)){$requestedurl="http://lapage_par_defaut_a_inclure/";};
$url=parse_url($requestedurl);
GetUrl($url[host],$url[path],$url[query],"",$page,$tete);
$page= filtrehtml($page);
$page = rewritelinks($page, $PHP_SELF."?".eregi_replace("\&requestedurl.*", "",$argv[0]));
?>
<div align="right"><a href="<? echo $requestedurl; ?>" title="open" target="_blank"><font size="-3">Open this page in a new frame</font> </a></div>
<?
echo $page;
?>
Et enfin voila un extrait du fichier "mes_fonctions.php"
-----------------------------------------------------------------------------------------
// Liste des racines des sites autorisés pour l'affichage dans les pages
// C'est juste pour éviter que n'importe quel contributeur fasse apparaitre n'importe quel
// page dans le site... Il faut une intervention du webmaster pour autorirser l'affichage d'un
// site... Ça peut-être contourné bien sur... mais c'est déjà une première barrière.
$GLOBALS['Authorized_sites']=array( "http://www2.iap.fr",
"http://www.iap.fr",
"http://www.planck-hfi.org",
"http://194.57.221.79",
);
// Traitement des balises complémentaires pour les articles
// C'est cette fonction qui est appelé lors de l'affichage des articles par: [(#TEXTE|fl_complements)]
function fl_complements($texte_in){
$texte = $texte_in;
$texte = fl_browse($texte);
$texte = smileys($texte);
//etc...
return $texte;
}
// fonction contrôlant la navigation dans un répertoire
function fl_browse($fl_txt){
global $requestedurl;
$fl_patern_in="|<browse([^>]*?)>|i";
$fl_replace_in1="";
if (preg_match($fl_patern_in, $fl_txt, $matches) ) {
if (trim($matches[1])<>""){
if (!isset($requestedurl)){
$requestedurl=trim($matches[1]);
}
}
$fl_txt = preg_replace($fl_patern_in, "$fl_replace_in1", $fl_txt);
//$rechercher="<browse>";
//if (strstr($fl_txt,$rechercher)!==false){
$GLOBALS['flbrowse']=true;
//$fl_txt = str_replace($rechercher, "", $fl_txt);
}
return $fl_txt;
}
// Fonction d'extraction du contenu (ce qui est entre les balises body) d'une page html
// plus les styles s'il y en a...non, c'est trop dangereux car ces styles prévalent sur les css
// et cassent donc tout le site
//<link href="doxygen.css" rel="stylesheet" type="text/css">
function filtrehtml($pagehtml){
if (eregi("< *body[^>]*>(.*)</body[^>]*>",$pagehtml,$regs)){
//if (eregi("(< *style[^>]*>)(.*)(</style[^>]*>)",$pagehtml,$flstyles)){
// $retour = $flstyles[0];
//} //$retour .= $regs[1];
$retour = $regs[1];
}
else {
$retour = $pagehtml;
}
return $retour;
}
/*
***************** VO ********************
GetUrl v1.1
Originally written by tahmer-@-free.fr
Modified by legrand-@-iap.fr
return:
-1 cant connect
0 protocol error
1 ok
mandatory parameters
$hostwebserver (ie: "www.web.com")
$urlin page beginning with "/" (ie: "/index.html")
$fl_param parameter which have to be passed to the requested page
$cookie list of cookie
syntax: [name=value [ ';' name=value]]
ie: cookie1=v1
or
cookie1=v1; cookie2=v2; ...
output parameters
$page(out) content of url
$header(out) content of header
optional parameters
$fl_login (login and password for basic .htaccess
$fl_password authentification protected pages: "" if none )
$fl_timeout Timeout for connection
exemple:
login on a web server
the login process send a cookie "MagicNumber" witch is mandatory to
access a database result page
ps: cookie are sent by server in the header
Set-Cookie: name=value;....
$res=readurl("www.webserver.com","/login.cgi?user_name=me&password=mypass","",$page,$header);
if ($res!=1) exit;
$MagicNumber=0;
if (preg_match("/Set-Cookie:\s+MagicNumber=(\d+)/i", $header, $parts))
$MagicNumber=$parts[1];
if ($MagicNumber==0) exit;
$res=readurl("www.webserver.com","/result.cgi?query=my_query","MagicNumber=$MagicNumber",$page,$header);
*/
function GetUrl($host ,$urlin,$fl_param,$cookie,&$page,&$header,$fl_login="", $fl_password="", $fl_timeout="20",$reecriturl="true",$servport="80"){
if (site_autorise("http://".$host.$urlin)){
if ($fl_param==""){$url = $urlin;} else {$url = $urlin."?".$fl_param;};
$page="";
$header="";
$sock=fsockopen($host, $servport , $errno , $errstr, 30);
if (!$sock) {echo "$errstr ($errno)<br />\n"; return -1;};
//socket_set_timeout($sock, $fl_timeout); // this feature is not supported by our php built
$msg="GET $url HTTP/1.1";
//$msg="GET / HTTP/1.1";
if ($cookie!="") $msg.="\r\nCookie: $cookie";
$msg.="\r\n"."Host: $host\r\nConnection: Close"."\r\n"."User-Agent: ".$_SERVER['HTTP_USER_AGENT']."\r\n";
//$msg.="\r\n"."Host: $url\r\nConnection: Keep-Alive"."\r\n"."User-Agent: ".$_SERVER["HTTP_USER_AGENT"]."\r\n";
//if ($fl_login)
$msg.="Authorization: Basic ".base64_encode("$fl_login:$fl_password")."\r\n";
$msg.="\r\n\r\nAccept: */* "; //, text/plain, image/*, */* ";
$msg.="Request-URI: absoluteURI";
$msg.="\r\n\r\n\r\n\r\n";
$chunked=0;
// read header
while ($buffer=fgets($sock,4096)) {
if ($buffer=="\r\n") break;
$header.=$buffer;
if (preg_match("/Transfer-Encoding:\s+(.+)\r\n/U", $buffer, $parts))
if (strtoupper($parts[1])=="CHUNKED") $chunked=1;
else echo "**???".$parts[1]."??\r\n";
}
if ($chunked==0) {
while ($buffer = fgets($sock, 4096)) {
$buffer=fread($sock,4096);
$page.=$buffer;
}
}
else {
while ($buffer = fgets($sock, 4096)) {
if (!preg_match("/\s*([\dABCDEFabcdef]+)\s*\r\n/i", $buffer, $parts)) {
echo "**chunk size not found : $buffer\r\n";
return 0;
}
$size = (int)base_convert(strtoupper($parts[1]), 16, 10);
if ($size==0) break;
$buffer=fread($sock,$size);
if (strlen($buffer)!=$size) {
echo "**reading : $size\r\n";
echo "**readed : ".strlen($buffer)."\r\n";
return 0;
}
$page.=$buffer;
//echo $buffer;
$buffer=fgets($sock,4096);
if ($buffer!="\r\n") {
echo "**CRLF not found : $buffer\r\n";
return 0;
}
}
}
$path_parts = pathinfo($urlin); $dirref = $path_parts["dirname"];
if ($dirref=="\\"){$dirref ="/" ;} else {$dirref .= "/" ;};
if ($path_parts["extension"]==""){$dirref .= $path_parts["basename"]."/"; }; $dirref = eregi_replace( "//", "/", $dirref );
//echo " dirname= ".dirname($urlin)."\r\n";
//echo " dir= ".$path_parts["dirname"]."\r\n";
//echo " base= ".$path_parts["basename"]."\r\n";
//echo " ext= ".$path_parts["extension"]."\r\n";
if ($reecriturl=="true"){
// On réecrit les URL en absolu
// Les liens href = "bla bla" mais aussi <href = bli.bli >
$page = preg_replace( "|href= *\"\.(?!http:)([^\"]*)\"|i", "href=\"http://".$host.$dirref."\\1\"", $page); $page = preg_replace( "|href= *\"/(?!http:)([^\"]*)\"|i", "href=\"http://".$host."/\\1\"", $page);
$page = preg_replace( "|href= *\"(?!http:)([^\"]*)\"|i", "href=\"http://".$host.$dirref."\\1\"", $page);
$page = preg_replace( "|href= *\.(?!\")(?!http:)([^>]*)>|i", "href=\"http://".$host.$dirref."\\1\">", $page); $page = preg_replace( "|href= *(?!\")/(?!http:)([^>]*)>|i", "href=\"http://".$host.$dirref."/\\1\">", $page);
$page = preg_replace( "|href= *(?!\")(?!http:)([^>]*)>|i", "href=\"http://".$host.$dirref."\\1\">", $page);
$page = preg_replace( "|src= *\"\.(?!http:)([^\"]*)\"|i", "src=\"http://".$host.$dirref."\\1\"", $page);
$page = preg_replace( "|src= *\"/(?!http:)([^\"]*)\"|i", "src=\"http://".$host."/\\1\"", $page);
$page = preg_replace( "|src= *\"(?!http:)([^\"]*)\"|i", "src=\"http://".$host.$dirref."\\1\"", $page);
$page = preg_replace( "|src= *\.(?!\")(?!http:)([^>]*)>|i", "src=\"http://".$host.$dirref."\\1\">", $page); $page = preg_replace( "|src= *(?!\")/(?!http:)([^>]*)>|i", "src=\"http://".$host."/\\1\">", $page);
$page = preg_replace( "|src= *(?!\")(?!http:)([^>]*)>|i", "src=\"http://".$host.$dirref."\\1\">", $page);
// les formulaires (risky !!!)
$page = preg_replace( "|form action= *\"\.(?!http:)([^\"]*)\"|i", "form action=\"http://".$host.$dirref."\\1\"", $page);
$page = preg_replace( "|form action= *\"/(?!http:)([^\"]*)\"|i", "form action=\"http://".$host."/\\1\"", $page);
$page = preg_replace( "|form action= *\"(?!http:)([^\"]*)\"|i", "form action=\"http://".$host.$dirref."\\1\"", $page);
$page = preg_replace( "|form action= *\.(?!\")(?!http:)([^>]*)>|i", "form action=\"http://".$host.$dirref."\\1\">", $page); $page = preg_replace( "|form action= *(?!\")/(?!http:)([^>]*)>|i", "form action=\"http://".$host."/\\1\">", $page);
$page = preg_replace( "|form action= *(?!\")(?!http:)([^>]*)>|i", "form action=\"http://".$host.$dirref."\\1\">", $page);
}
fclose($sock);
return 1;
}
else{
$page="You cannot display the requested url.";
$header="";
}
//fonction de calcul d'une url absolue
function absurl($urlaanalyser, $serveur, $pathurlbase){
$newurl= parse_url($urlaanalyser);
echo "path = ".$newurl[path]." original=".$urlaanalyser;
if (isset($newurl[scheme])) {
// c'est une url absolue car http ou ftp est défini
return $urlaanalyser;
}
elseif (eregi("^/*",$urlaanalyser)){
// Le chemin défini est absolu
return "http://".$serveur.$newurl[path];
}
else {
// c'est une url relative: on la transforme
return "http://".$serveur.$pathurlbase.$newurl[path];
}
}
// fonction de réécriture des liens d'une page html insérée
function rewritelinks($pagehtml, $pageappelante){
//return eregi_replace( "^< *href=([^>]*)>$", "<href=\"$pageappelante&requestedurl=\\1 \"", $pagehtml);
return eregi_replace( "href= *\"", "href=\"$pageappelante&requestedurl=", $pagehtml);
}
// Fonction renvoyant trou si l'url passée est autorisée pour l'affichage et faulse sinon
function site_autorise($url){
$retour = false;
foreach ($GLOBALS['Authorized_sites'] as $unsite){
if (ereg($unsite, $url)){$retour=true;break;}
}
return $retour;
}
Bertrand wrote:
listes@a-lex.com wrote:
bonjour les gens !*
*Dans ma page de somaire, je souhaite faire executer un PHP qui provient d'un autre site, pour faire afficher une info qu ne provient pas de chez moi*
*
alors j'ai essayé ceci :
<?
include ("http://www.lesiteetranger.com/lescript.php?"\);
?>
include() n'est pas fait pour ça. Essaie plutôt fsockopen()
Bertrand
_______________________________________________
liste spip
spip@rezo.net - désabonnement : spip-off@rezo.net
Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Documentation de SPIP : http://www.spip.net/
irc://irc.freenode.net/spip