相关疑难解决方法(0)

使用PHP提供文件的最快方法

我正在尝试组合一个接收文件路径的函数,识别它是什么,设置适当的头,并像Apache一样提供服务.

我这样做的原因是因为我需要在提供文件之前使用PHP来处理有关请求的一些信息.

速度至关重要

virtual()不是一个选项

必须在共享托管环境中工作,用户无法控制Web服务器(Apache/nginx等)

这是我到目前为止所得到的:

File::output($path);

<?php
class File {
static function output($path) {
    // Check if the file exists
    if(!File::exists($path)) {
        header('HTTP/1.0 404 Not Found');
        exit();
    }

    // Set the content-type header
    header('Content-Type: '.File::mimeType($path));

    // Handle caching
    $fileModificationTime = gmdate('D, d M Y H:i:s', File::modificationTime($path)).' GMT';
    $headers = getallheaders();
    if(isset($headers['If-Modified-Since']) && $headers['If-Modified-Since'] == $fileModificationTime) {
        header('HTTP/1.1 304 Not Modified');
        exit();
    }
    header('Last-Modified: '.$fileModificationTime);

    // Read the file
    readfile($path);

    exit();
}

static function mimeType($path) {
    preg_match("|\.([a-z0-9]{2,4})$|i", $path, $fileSuffix);

    switch(strtolower($fileSuffix[1])) …
Run Code Online (Sandbox Code Playgroud)

php performance file-io x-sendfile

93
推荐指数
4
解决办法
5万
查看次数

以性能为导向的方法来保护PHP级别的文件?

我正在寻找一些关于我一直在思考的事情的一些意见.这是一个非常普遍的问题,也许有解决方案,我还没有想到.

我有一个基于PHP的CMS.
对于在CMS中创建的每个页面,用户可以上载资源(要下载的文件,图像等)

这些资产存储在一个目录中,我们称之为"/ myproject/assets",基于每页(1个子目录= 1页,例如"/ myproject/assets/page19283")

用户可以在CMS中"取消发布"(隐藏)页面.当一个页面被隐藏,并且有人试图访问它因为他们记住了URL或者他们来自谷歌或其他东西时,他们会收到"未找到"消息.

但是,资产仍然可用.我也希望保护这些,以便当用户取消发布页面时,他们可以信任它完全消失了.(对于司法问题非常重要,比如法庭命令要把内容放下......这样的事情可能会发生).

最明显的方法是将所有资产存储在安全目录中(= Web服务器无法访问),并使用PHP"前门"在检查后传递文件.当项目需要防水时,这是我目前的方式,但我不喜欢它,因为PHP解释器运行网站上的每个微小图像,脚本和样式表.我希望有一个更快的方式.

.htaccess保护(拒绝来自所有或类似)并不完美,因为CMS应该是可移植的并且能够在共享环境中运行.我希望它甚至可以在IIS和其他Web服务器上运行.

我现在能想到的最好的方法是特定页面的资产目录移动到未发布的安全位置,并在发布时将其移回.但是,管理员用户需要能够查看页面,即使它未被发布,所以我必须解决这个问题,即我必须从安全目录中提供这些资产.

任何人都可以想到一种方法,允许直接Apache访问文件(=没有通过PHP脚本),但仍然使用PHP控制访问?我不能.

我还会考虑一个可能在大多数共享环境中运行的简单的.htaccess解决方案.

php apache security .htaccess

6
推荐指数
1
解决办法
2194
查看次数

标签 统计

php ×2

.htaccess ×1

apache ×1

file-io ×1

performance ×1

security ×1

x-sendfile ×1