我已经建立了一个带有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。有谁知道这里出了什么问题?是否可以通过此方法提供服务器编译的页面?
提前致谢
答案 0 :(得分:0)
好的,这是问题
...
readfile($file);
如果要显示页面内容,则不能使用readfile
函数,因为它不处理文件,只读取您的内容,因此,当文件为.php
时,您必须使用require
或include
功能,并且不要使用header('Content-type: application/x-httpd-php');
,因为浏览器会理解应将已处理的文本作为文件下载而不显示