在PHP中从专用文件夹中渲染HTML页面


Render HTML pages from private folder in PHP

我有一个网站,它的HTML页面存储在一个私人文件夹中。我想要一个PHP脚本,它可以读取HTML文件,然后将其推送到浏览器。

我的任务是用PHP中的file()函数获取html文件。然后echo()将其发送到浏览器。这适用于页面的html内容。然而,图像和css并没有跟随。

我听说IIS或ASP中有一个"呈现"功能,它可以在私人文件夹中呈现网页的HTML内容,然后以二进制格式发送图像PHP有类似的东西吗

目前我阅读的文件如下:

$htmlFile = file(PATHTOFILE);
echo(implode('',$htmlFile));

我们尝试这样做的原因是为了保护此文件夹中包含的页面的url/信息。用户必须连接到web服务,然后PHP脚本将推送html页面

您可以使用标记base来解决文件的相对路径问题,如下所示:

$html = file_get_contents($url);
$html = str_replace('<head>', '<head><base href="FULL PATH OF DIR" />', $html);
echo $html;

CSS和图像不会显示,因为它们在HTML文件中的路径是相对于HTML文件的,对吧?如果你在同一个私人文件夹中有这些CSS和图像,你怎么能希望用户能获取它们呢?

间接地,您应该像获取HTML一样获取CSS和图像。但这意味着您必须替换显示的HTML中的所有路径,这是非常荒谬的。事实上,我们现在正在讨论某种代理?!?!?

你为什么需要它?

无论如何,echo(file_get_contents($htmlFile));压力较小。

另一个选项,如果它是<img />标签,并且图像也存储在根目录之外,则可以将src=属性设置为:

src="get_image.php?file=thisfile.png" // add a $_GET if needed to distinguish files

然后get_image.php:

  $file = $_GET['file'];
  // security checks if you wish
  header(sprintf("Content-type: %s;",'image/png'));
  readfile($file);
  exit;