如何从同一台服务器上的另一个页面中提取特定div的内容?

时间:2011-01-08 18:24:17

标签: php javascript ajax

朋友们,我在同一台服务器上运行2个应用程序,我想将Application-1的一些内容导入Application-2,同样将Application-2的一些内容导入Application-2。

目前我正是这样做的:

<?php
    $app1 = file_get_contents('http://localhost/cms');

    file_put_contents('cms.html', $app1); 

    $app2 = file_get_contents('http://localhost/blog');

    file_put_contents('blog.html', $app2); 
?>

像这样我用这些应用程序的HTML保存这两个文件

现在让我说我有

<div id="header">中的cms.html,我要在Application-2 <div id="header">的{​​{1}}中导入

index.php file <div id="footer"> {}} blog.html我想要在{1}}的{​​1}} <div id="footer">文件中。{/ p>

我该怎么做?

更新:两个应用程序都是Joomla和WordPress。

我的模板很简单,没有任何JavaScript,所以请尽量提出PHP解决方案,除非必须加载JavaScript,否则我希望保持简单明了。

请注意我刚开始学习编程因此我很难理解一种语言技术,因此请求一种简单的语言。希望你明白。

如果我的方法在第一时间出错,那么请随意提出更好的方法来完成这项任务。

请帮助。

更新2:请注意,我的问题不在于从其他应用程序获取内容。我的问题是获取正在生成的HTML文件的片段。

4 个答案:

答案 0 :(得分:0)

以下是我建议您:

创建header.php和footer.php,每个都包含您想要在两个页眉/页脚中都有的内容。

<div id="header">内,在要共享相同标头的所有文件中添加<?php include "header.php" ?>。同样,为页脚做同样的事情。

除非你真的需要,试图解析另一个页面的部分以找到合适的标签将使你想要做的事情变得不必要的复杂。

- 编辑 - 由于您正在使用CMS,因此系统上实际上没有文件可以解析。您在浏览器中看到的HTML是在有人请求时创建的。

要执行您所描述的内容,您可以使用php的cURL库来访问该页面,然后通过html解析以提取您正在寻找的标记。 然而,这种方法会非常慢,因为你基本上要求用户加载2页而不是1页。

您可能需要查看joomla / wordpress的后端 - 查看页脚如何存储在数据库中,并输入代码以从其他应用程序访问它。

答案 1 :(得分:0)

如果文件驻留在同一本地服务器上,则无需使用带有HTTP URL的file_get_contents。这样做会产生HTTP请求,并且会增加不必要的延迟。

除非您希望文件由各自的应用程序处理,否则您只需从文件路径加载HTML文件的内容即可,例如

$content = file_get_contents('/path/to/application1/html/file.htm');

如果这些文件包含需要评估的PHP,请使用

include 'path/to/application1/html/file.htm';

代替。请注意,使用include会在目标文件的开头将PHP置于HTML模式,并在最后再次恢复PHP模式。因此,您必须使用相应的<?php开放标记将任何PHP代码包含在文件中。

如果需要在变量中捕获include调用的输出,请将其包装到

ob_start();
include '…'; // this can also take a URL
$content = ob_get_clean();

这将启用output buffering

如果您需要处理文件中的HTML,请使用proper HTML parser

答案 2 :(得分:0)

嗯,我想我找到了一个更好的方式自己做,所以我在这里发帖作为答案,为了寻找类似解决方案的其他人。

写一个将在标记之间读取并获取该位的类。

<?Php
class className {
    private $_content;
    private $_Top;
    private $_Bottom;

    public function __construct(
        $url, $markerStartTop = null, 
        $markerEndTop = null, 
        $markerStartBottom = null, 
        $markerEndBottom = null){

            $this->_content = file_get_contents($url);
            $this->_renderTop($markerStartTop, $markerEndTop);
            $this->_renderBottom($markerStartBottom, $markerEndBottom);
        }

    public function renderTop($markerStart = null, $markerEnd = null){
        return $this->_Top;
        }

    private function _renderTop($markerStart = null, $markerEnd = null){
        $markerStart = (is_null($markerStart)) ? '<!– Start Top Block –>' : (string)$markerStart;
        $markerEnd = (is_null($markerEnd)) ? '<!– End Top Block –>' : (string)$markerEnd;

        $TopStart = stripos($this->_content, $markerStart);
        $TopEnd = stripos($this->_content, $markerEnd);

        $this->_Top = substr($this->_content, $TopStart, $TopEnd-$TopStart);
        }

    public function renderBottom(){
        return $this->_Bottom;
        }

    private function _renderBottom($markerStart = null, $markerEnd = null){ 
        $markerStart = (is_null($markerStart)) ? '<!– Start Bottom Block –>' : (string)$markerStart;
        $markerEnd = (is_null($markerEnd)) ? '<!– End Bottom Block –>' : (string)$markerEnd;

        $BottomStart = stripos($this->_content, $markerStart);
        $BottomEnd = stripos($this->_content, $markerEnd);

        $this->_Bottom = substr($this->_content, $BottomStart, $BottomEnd-$BottomStart);
        }
}
?>

称之为:

<?php
    $parts = new className('url/to/the/application');
    echo $parts->renderTop();
?>

此方法准确提取您在所需标记之间标记的内容片段。

答案 3 :(得分:0)

这假定结构良好的XHTML和PHP 5:

  1. 通过某种方法获取所需的HTML,例如cURL请求。
  2. 使用SimpleXML将XML解析为DOM,然后使用XPath解析所需的节点。
  3. 将提取的节点作为文本发送。