0

我正在尝试找出是否可能以及使用什么代码:加载当前页面的内容并使用 PHP 或PHP Simple回显到特定页面(c.html)的相对路径,该页面在“#navbar a”中Html DOM 解析器。

到目前为止我的代码:

<?php
$pg = 'c.html';
include_once '%resource(simple_html_dom.php)%';
/* $cpath = $_SERVER['REQUEST_URI']; Old version */  // Path to current pg from root
$cpath = "http://www.".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
echo var_dump($cpath).": Current Root Path"."<br />";  // "http://www.partiproductions.com/copyr/index.php" - Correct
$cfile = basename($cpath);
echo 'Current File: ' . $cfile . "<br />"; // "index.php" - Current pg, Correct

$html = file_get_html($cpath); // Getting Warning: URL file-access is disabled in the server configuration & failed to open stream: no suitable wrapper could be found in.. & Fatal error: Call to a member function find() on a non-object in...
foreach($html->find(sprintf('#navbar a[href=%s]', $pg)) as $path) {
  echo 'Path: ' . $path."<br />";
}
?>
4

2 回答 2

1

您遇到的主要问题是调用 file_get_html($cfile)。

您的示例中的 $cfile 将包含类似 /copyr/index.php 的内容

当您将它传递给 file_get_html() 时,它将在您的服务器根目录中查找目录 /copyr,并在其中查找 index.php 文件。根据您指出的警告,您实际上在服务器的根目录中没有此文件夹结构。

您实际需要做的是在您当前拥有的 URI 前面包含完整的 URL,如下所示:

$cpath = "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];

这将产生这样的路径:http://www.yourserver.com/copyr/index.php然后您应该为 file_get_html();

于 2012-11-06T19:11:15.497 回答
0

根据提问者的最新信息,我将采用不同的方法。

创建一个新文件,其中仅包含要在两个文件之间共享的内容。然后,在两个文件中(或更多,如果需要)使用 include() 函数从新的共享内容文件中注入内容。

index.php 文件:

<?php
//Any require PHP code goes here
?>
<html>
    <body>
    <?php include('sharedfile.php');?>
    </body>
</html>

/copyr/c.php 文件:

<?php
//Any require PHP code goes here
?>
<html>
    <body>
    <?php include('../sharedfile.php');?>
    </body>
</html>

共享文件.php:

// You need to close the PHP tag before echoing HTML content
?>
<p>
    This content is displayed via include() both on index.php and /copyr/c.php
</p>
<?php  // The PHP tag needs to be re-opened at the end of your shared file

这样做的好处是,您现在可以通过遵循相同的技术在您想要的任何文件中使用 sharedfile.php 文件内容。您也不需要解析页面的 DOM 来去除要跨多个页面显示的内容,这可能会很慢且容易出错。

于 2012-11-09T18:13:01.443 回答