在 docroot 之外打开动态内容
open dynamic content outside docroot
我用 phalconphp 建立了一个网站,它使我能够将网站作为预览呈现给我们的客户。作为一项安全要求,上述预览网站的所有内容都存储在服务器的文档根目录之外。当用户成功登录后,内容只能由 PHP 访问。当用户登录并通过 URL 请求特定项目时,交付从控制器操作开始 getAction()
.此函数会传递与请求的项目相关的多个数据,以确定服务器上项目的路径。经过几次检查,动作函数 returns 是这样的:
$mimetypes = array(
'gif' => 'image/gif',
'png' => 'image/png',
'jpg' => 'image/jpg',
'css' => 'text/css',
'js' => 'text/javascript',
'html' => 'text/html',
'php' => 'application/x-httpd-php'
);
$path_parts = pathinfo($file);
$mimetype = 'application/octet-stream';
if (isset($path_parts['extension']) &&
array_key_exists($path_parts['extension'], $mimetypes)) {
$mimetype = $mimetypes[$path_parts['extension']];
}
// open project
if (!file_exists($file)) {
throw new Exception("File ".$file." not found. \n ");
}
header('Content-type: '.$mimetype);
readfile($file);
到目前为止,它工作得很好。当前的问题是这不适用于 PHP 页面。当项目有 PHP 个页面并且登录用户请求它们时,它们只是下载而不是呈现为 HTML。有谁知道这里出了什么问题?有没有可能通过这种方式传送服务器编译页面?
提前致谢
好的,问题来了
...
readfile($file);
如果要显示页面内容,可以不用readfile
函数,因为它不处理文件,只读取你的内容,所以,当文件是.php
你必须使用 require
或 include
函数,不要使用 header('Content-type: application/x-httpd-php');
因为浏览器会理解应该将处理后的文本下载为文件而不是显示它
我用 phalconphp 建立了一个网站,它使我能够将网站作为预览呈现给我们的客户。作为一项安全要求,上述预览网站的所有内容都存储在服务器的文档根目录之外。当用户成功登录后,内容只能由 PHP 访问。当用户登录并通过 URL 请求特定项目时,交付从控制器操作开始 getAction()
.此函数会传递与请求的项目相关的多个数据,以确定服务器上项目的路径。经过几次检查,动作函数 returns 是这样的:
$mimetypes = array(
'gif' => 'image/gif',
'png' => 'image/png',
'jpg' => 'image/jpg',
'css' => 'text/css',
'js' => 'text/javascript',
'html' => 'text/html',
'php' => 'application/x-httpd-php'
);
$path_parts = pathinfo($file);
$mimetype = 'application/octet-stream';
if (isset($path_parts['extension']) &&
array_key_exists($path_parts['extension'], $mimetypes)) {
$mimetype = $mimetypes[$path_parts['extension']];
}
// open project
if (!file_exists($file)) {
throw new Exception("File ".$file." not found. \n ");
}
header('Content-type: '.$mimetype);
readfile($file);
到目前为止,它工作得很好。当前的问题是这不适用于 PHP 页面。当项目有 PHP 个页面并且登录用户请求它们时,它们只是下载而不是呈现为 HTML。有谁知道这里出了什么问题?有没有可能通过这种方式传送服务器编译页面?
提前致谢
好的,问题来了
...
readfile($file);
如果要显示页面内容,可以不用readfile
函数,因为它不处理文件,只读取你的内容,所以,当文件是.php
你必须使用 require
或 include
函数,不要使用 header('Content-type: application/x-httpd-php');
因为浏览器会理解应该将处理后的文本下载为文件而不是显示它