通过PHP文件使用子目录作为根目录
我有一个文件通过PHP文件使用子目录作为根目录,php,Php,我有一个文件index.php和一个目录app。每当我从变量访问index.php时,我想加载app目录的内容 例如: URL:index.php?URL=app/main.php index.php的代码 <?php require "system/index.php"; $url = $_GET["url"]; load_file($url); ?> 问题 实际需要从文件中加载所有内容并打印。这对于某些文件是必需的,也不是必需的。每当我需要一
index.php
和一个目录app
。每当我从变量访问index.php
时,我想加载app
目录的内容
例如:
URL:index.php?URL=app/main.php
index.php的代码
<?php
require "system/index.php";
$url = $_GET["url"];
load_file($url);
?>
问题 实际需要从文件中加载所有内容并打印。这对于某些文件是必需的,也不是必需的。每当我需要一些文件时,它的头就会被弄乱。这意味着如果URL是
index.php?URL=app/video.mp4
,它将显示视频的文本/代码,而不是播放视频。JavaScript和CSS文件也是如此。他们确实加载了代码,但问题是所有的文件,不管是CSS/JavaScript/ZIP/Image/Video,都会被解释为HTML文档。我只想加载每个文件及其各自的头
感谢您的阅读,如果可以,请提供帮助。有很多方法可以做到这一点。如果您想要一行,您可以尝试: readfile-输出一个文件 描述
int readfile(字符串$filename[,bool$use\u include\u path=false[,
资源$context]])
读取文件并将其写入输出缓冲区
但请确保不要打印脚本中的任何其他内容
请注意,在调用函数时,您仍然需要发送适当的
内容类型
标题。这并不能解决问题而是引入了一个新标题
编辑1 mime_content_type()未返回正确的/或标头所需的mime类型
我想出了一个解决办法。我必须基本上检测文件的MIME类型并将其作为头文件发送。谢谢你的回答和评论。我搜索了google,发现有一个函数mime\u content\u type()来识别mime类型
<?php
function load_file($file){
if(file_exists($file)) {
header("Content-Type:" . mime_content_type($file));
readfile($file); // Refer to http://stackoverflow.com/questions/41444074
}else{
throw new Exception("File you are trying to find does not exist (/anymore).");
}
}
尝试从url中找出文件的扩展名,然后应用一些if-elsedanger代码设计。在没有白名单的情况下,你永远不应该按url加载文件。扩展确实有效,但有很多扩展,比如PDF、DOC、DOCx、MP4、MP3、MPEG-2等等。。。。我需要一个浏览器支持的扩展列表。剩下的我可以发送下载头。此外,我可能每次都要更新扩展名列表,因为有一个新的扩展名。每个文件类型都不同,并且有不同的显示要求,因此您需要了解文件的内容(通过扩展名或mime类型)并适当地处理它。我不认为这真的是一个包罗万象的解决方案。是的,我需要识别文件的内容类型。这就是给我带来很多麻烦的原因。再次感谢。好吧,这是另一个问题,但你可以看看。
<?php
function load_file($file){
if(file_exists($file)) {
header("Content-Type:" . mime_content_type($file));
readfile($file); // Refer to http://stackoverflow.com/questions/41444074
}else{
throw new Exception("File you are trying to find does not exist (/anymore).");
}
}