2009-12-13 8 views
0

Comment puis-je utiliser PHP pour inclure une page Web externe? (un peu comme l'aperçu du thème wordpress.)Y compris une page Web externe utilisant PHP

Je veux un code (X) HTML STRICT conforme - pas d'iFrame et de préférence pas de javascript. L'idée est que je fais un sandbox pour que les clients puissent voir les pages web dans mon environnement contrôlé. L'autre chose est que les pages Web sont inclus ne doivent pas être visibles sans le « bac à sable » wrapper »

EDIT:

Selon certains commentateurs, GoDaddy a CURL La partie suivante de la question devient - comment.. ?. Est-ce que je dépouilleront les en-têtes et pieds de page du html en php de sorte que seulement le contenu de la balise body restent Je préfère utiliser les fonctions de chaîne php que regex

+0

GoDaddy ne se recourbe de soutien: http://help.godaddy.com/topic/435 – philfreo

+0

fsockopen si vous voulez faire face à tout ce tapage. – Kugel

Répondre

5

Essayez d'utiliser Curl:

/** 
* Get a web file (HTML, XHTML, XML, image, etc.) from a URL. Return an 
* array containing the HTTP server response header fields and content. 
*/ 
function get_web_page($url) 
{ 
    $options = array(
     CURLOPT_RETURNTRANSFER => true,  // return web page 
     CURLOPT_HEADER   => false, // don't return headers 
     CURLOPT_FOLLOWLOCATION => true,  // follow redirects 
     CURLOPT_ENCODING  => "",  // handle all encodings 
     CURLOPT_USERAGENT  => "spider", // who am i 
     CURLOPT_AUTOREFERER => true,  // set referer on redirect 
     CURLOPT_CONNECTTIMEOUT => 120,  // timeout on connect 
     CURLOPT_TIMEOUT  => 120,  // timeout on response 
     CURLOPT_MAXREDIRS  => 10,  // stop after 10 redirects 
    ); 

    $ch  = curl_init($url); 
    curl_setopt_array($ch, $options); 
    $content = curl_exec($ch); 
    $err  = curl_errno($ch); 
    $errmsg = curl_error($ch); 
    $header = curl_getinfo($ch); 
    curl_close($ch); 

    $header['errno'] = $err; 
    $header['errmsg'] = $errmsg; 
    $header['content'] = $content; 
    return $header; 
} 

Appelez simplement cette fonction telle quelle avec votre URL et elle devrait renvoyer l'ensemble de la page Web vers la page php. Toutefois, vous devrez peut-être réécrire les liens vers des ressources, telles que des feuilles de style et des images, en utilisant une expression régulière. (Remplacer "/image.jpg" par "http://mydomain.com/image.jpg").

Curl est généralement installé sur les hôtes partagés.

Si vous voulez simplement obtenir le corps de la page, ou la tête, vous pouvez utiliser des expressions simplexml ou regex pour cela. (Si le html est bien formé, simplexml est idéal pour traverser le DOM).

+0

Comment configurer une boucle? Je suis sur un hôte partagé. – Moshe

+0

Aussi, cela importera-t-il l'étiquette principale de la page et que sais-je? - Je ne l'espère pas parce que je dois le retirer ... plus de travail ... – Moshe

+0

Demandez à votre hébergeur si cUrl est installé, ou s'ils peuvent l'installer. – Strae

2

La commande file_get_contents de PHP fonctionne sur plusieurs domaines, ce qui vous permet de récupérer des balisages externes. Cependant, le simple fait de sortir ceci a de multiples problèmes, y compris des liens relatifs qui ne fonctionnent pas, ainsi que des vulnérabilités de script intersite.

Bien que vous ayez indiqué que vous ne voulez pas utiliser un iframe, le tag est valide XHTML 1.0 Transitional, et ce que je recommanderais pour des raisons de compatibilité et de sécurité est basé sur votre description.

+0

désolé - je voulais dire XHTML strict. – Moshe

+0

+1, si un type de "sandboxing" est requis, alors un iframe est la solution la plus raisonnable. – DisgruntledGoat

+0

En outre, tout le code est directement dans mon domaine - moins de problèmes de sécurité - Je vais filtrer l'URL de la page à parent avant de l'appeler. – Moshe

0

Ce que vous pouvez faire est d'utiliser ceci:

function __test($results){ 
    $pattern = '/http:\/\/.+\.(jpeg|jpg|gif)/'; //regex pattern defines the image :D 
    preg_match_all($pattern, $results, $array); //responce of array 

    foreach ($array[0] as $images) //add everything as one 
    { 
     $results_image = $images; 
     $url = "http://saxtorinc.com/$results_image"; 
    } 
    return $url;         
} 

Notez que vous devez définir le nom de domaine

+0

Je ne suis pas sûr de ce que fait exactement ce code. Il tire des images ou des fichiers HTML? – Moshe

Questions connexes