通过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).");
         }
     }