包括使用PHP的外部网页

时间:2009-12-13 22:12:56

标签: php html xhtml include

如何使用PHP包含外部网页? (有点像wordpress主题预览。)

我想要(X)符合HTML STRICT的代码 - 没有iFrame,最好没有javascript。

我的想法是,我正在为客户制作沙箱,以便在受控环境中查看网页。另一件事是,如果没有“沙盒”包装器,那么所包含的网页就不可见了。

编辑:

根据一些评论员的说法,GoDaddy已经开始了。问题的下一部分变成了 - 如何在php中删除html的页眉和页脚,以便只保留body标签的内容?我宁愿使用php字符串函数而不是正则表达式。

3 个答案:

答案 0 :(得分:5)

尝试使用卷曲:

/**
 * 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;
}

只需使用您的网址调用该功能,它应该将整个网页回显到php页面。

但是,您可能需要使用一些正则表达式重写资源链接,例如样式表和图像。 (将“/image.jpg”替换为“http://mydomain.com/image.jpg”)。

Curl通常安装在共享主机上。

如果你想获取页面的主体或头部,可以使用simplexml或regex表达式。 (如果html格式正确,simplexml非常适合遍历DOM。)

答案 1 :(得分:2)

PHP的file_get_contents命令适用于各个域,因此您可以检索外部标记。但是,只是输出它有多个问题,包括相关链接不起作用,以及跨站点脚本漏洞。

虽然您说您不想使用iframe,但该标记是有效的XHTML 1.0 Transitional,并且出于兼容性和安全性原因,我会根据您的描述进行推荐。

答案 2 :(得分:0)

你能做的就是用这个:

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;                                  
}

请注意,您必须定义域名