在 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你必须使用 requireinclude 函数,不要使用 header('Content-type: application/x-httpd-php'); 因为浏览器会理解应该将处理后的文本下载为文件而不是显示它