吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2853|回复: 5
收起左侧

[其他转载] php做的一道面试题,读取目录下的文件(以及心得)

[复制链接]
woodenwang 发表于 2018-4-14 15:52
首先题目大致如下:
                获取选择的文件目录下的所有文件:按回车键进入下一个文件(语言不限);
               
               
                无奈,想破脑袋我还只只想到了   fopen   和file_get_contents(只是打开文件,读取文件)
               
               
                回来后反思(其实是不甘心)查找到  scandir()  和  opendir();
               
               
                然后  scandir()如下:
               
               
                (1)首先我们假定路径
                const getURL="D:/WoodenWang/Documents";
               
                (2)接着直接使用函数,对就是这么简单
                $list=scandir(getURL);       //获取目录下的所有文件,接着你就可以试着打印一下这个结果
               
                var_dump($list);//返回一个数组,当然还有  "."和"..";此时我们过滤掉
                $newList=[];//   先提前准备一个容器接受;然后过滤
                for($i=0;$i<count($list);$i++){

                        if($list[$i]!="."  &&  $list[$i]!=".."){
                                array_push($newList,$list[$i]);
                        }
                }
                var_dump($newList);//打印一下,获取数组然后我们就可以在这里读取文件了啊!!!
                for($i=0;$i<count($newList);$i++){
                        echo file_get_contents(getURL."/".$newList[$i])."<hr />";
                }
                ojbk,但是并不符合题意 啊,怎么办?
               
               
                好吧,那我们写一个表单,写完表单刷新页面发现中文乱码,无奈的我在有忘掉了header()里的参数(建议大家不要过于依赖框架的开发,有空再多多的回顾一下基础知识)
               
                为了惩罚自己,我选择手敲100遍 header("content-type:text/html; charset=utf8");(傲娇的我怎么能这样惩罚自己啦。当然循环100次啊)
               
                好吧,就先这样吧还要在研究一下opendir(),在增加点击事件模拟下一页然后用file_fet_contents()获取数据就可以了。

               详细代码看附件,不不不,直接粘出来吧:


[PHP] 纯文本查看 复制代码
<?php
header("content-type:text/html; charset=utf8");
if(empty($_POST)){
    header("location:index.html");
}
if(!is_dir($_POST["sendUrl"])){
    header("location:index.html");
}
$getUrl=$_POST["sendUrl"];
echo $getUrl;
//exit();
// $getUrl="D:/WoodenWang/Documents";
$list=scandir($getUrl);       //获取目录下的所有文件
echo "<br />";
$newList=[];
for($i=0;$i<count($list);$i++){
    if($list[$i]!="."  &&  $list[$i]!=".."){
        array_push($newList,$list[$i]);
    }
}
echo "<br />";
// var_dump($newList);
echo "<br />";
for($i=0;$i<count($newList);$i++){
    echo $newList[$i]."<hr />";
    // echo file_get_contents($getUrl."/".$newList[$i])."<hr />";//获取内容
}
?>

             还有啊, 我只是对传到后台的数据只是简单的判断,在实际开发中一定要详细的判断,过滤和检测,安全决定存亡!!!!
               

免费评分

参与人数 2吾爱币 +2 热心值 +1 收起 理由
Zero__Lee + 1 + 1 谢谢@Thanks!
mosou + 1 真正面试的时候考虑把for改成foreach 这样加分

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

1204376616 发表于 2018-4-14 16:00
编程太难了,膜拜大佬,告辞
mosou 发表于 2018-4-14 16:08
18381831680 发表于 2018-4-14 17:12
function tree(&$arr_file, $directory, $dir_name=''){
    $mydir = dir($directory);
    while($file = $mydir->read())
    {
        if((is_dir("$directory\\$file")) AND ($file != ".") AND ($file != ".."))
        {
            tree($arr_file, "$directory\\$file", "$dir_name\\$file");
        }
        else if(($file != ".") AND ($file != ".."))
        {
            //只读取目录
            $arr_file[] = "$dir_name\\" . "\r\n";
            //读取目录和文件
           // $arr_file[] = "$dir_name\\$file" . "\r\n";
        }
    }
    $mydir->close();
}


$arr_file = array();
tree($arr_file, "./ch/");
$newa2 = array_unique($arr_file);
$newa2 = array_merge($newa2);
file_put_contents('asd.txt', $newa2);
18381831680 发表于 2018-4-14 17:14
/*
*  new getFile($_dir[,$_emptyDir,$_fileType]);
* @parma $_dir 是目录名称
* @parma $_emptyDir 是否获取空文件夹,选填,默认不获取,true则获取空文件夹
* @parma $_fileType 获取文件名称的类型,选填,默认获取只文件名称,true则获取带有路径的文件名称
**/
class getFiles {
    private $_dir;
    private $_emptyDir;
    private $_fileType;
    public $_files;

    public function __construct($_dir,$_emptyDir = false,$_fileType = true) {
        $this->_dir = $_dir;
        $this->_emptyDir = $_emptyDir;
        $this->_fileType = $_fileType;
        if ($this->_emptyDir) {
            $this->getFileEmpty($this->_dir,$this->_files);
        } else {
            $this->getFile($this->_dir,$this->_files);
        }
    }
    //读取文件夹所有文件不包括空文件夹
    private function getFile($_dir,&$_arr) {
        if (!!$_dirs = opendir($_dir)) {
            while (($_file=readdir($_dirs)) != false) {
                if ($_file == '.' || $_file == '..') continue;
                $_files = $_dir .'/'. $_file;
                if (is_dir($_files)) {
                    $this->getFile($_files,$_arr);
                } else {
                    if ($this->_fileType) {
                        $_arr[] = $_files;
                    } else {
                        $_arr[] = $_file;
                    }
                }
            }
        }
        closedir($_dirs);
    }
    //读取文件夹所有文件包括空文件夹
    private function getFileEmpty($_dir,&$_arr) {
        if (!!$_dirs = opendir($_dir)) {
            while (($_file=readdir($_dirs)) != false) {
                if ($_file == '.' || $_file == '..') continue;
                $_files = $_dir .'/'. $_file;
                if (is_dir($_files) && $this->isEmpty($_files)) {
                    $this->getFileEmpty($_files,$_arr);
                } else {
                    if ($this->_fileType) {
                        $_arr[] = $_files;
                    } else {
                        $_arr[] = $_file;
                    }
                }
            }
        }
        closedir($_dirs);
    }
    //判断文件夹是否为空
    private function isEmpty($_dir) {
        if (!!$_dirs = opendir($_dir)) {
            while (($_file=readdir($_dirs)) != false) {
                if($_file != '.' && $_file != '..') {
                    closedir($_dirs);
                    return true;
                    break;
                }
            }
            closedir($_dirs);
            return false;
        }
    }
}
maqingyao 发表于 2018-4-14 18:56
平时开发不会都百度,,,,,,,,,,嘻嘻
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 14:48

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表