在docroot之外打开动态内容

时间:2015-08-10 14:02:56

标签: php phalcon readfile

我已经建立了一个带有phalconphp的网站,这使我能够将网站作为我们客户的预览。作为安全要求,所述预览网站的所有内容都存储在服务器的文档根目录之外。只有当用户成功登录时,才能通过PHP访问内容。当用户登录并通过URL请求特定项目时,交付将以控制器操作getAction()开始。此函数将传递与所请求项目相关的多个数据,以确定服务器上项目的路径。经过几次检查后,动作函数返回如下内容:

$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。有谁知道这里出了什么问题?是否可以通过此方法提供服务器编译的页面?

提前致谢

1 个答案:

答案 0 :(得分:0)

好的,这是问题

...
readfile($file);

如果要显示页面内容,则不能使用readfile函数,因为它不处理文件,只读取您的内容,因此,当文件为.php时,您必须使用requireinclude功能,并且不要使用header('Content-type: application/x-httpd-php');,因为浏览器会理解应将已处理的文本作为文件下载而不显示