woodenwang 发表于 2018-4-14 15:52

php做的一道面试题,读取目录下的文件(以及心得)

首先题目大致如下:
                获取选择的文件目录下的所有文件:按回车键进入下一个文件(语言不限);
               
               
                无奈,想破脑袋我还只只想到了   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
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 />";//获取内容
}
?>
             还有啊, 我只是对传到后台的数据只是简单的判断,在实际开发中一定要详细的判断,过滤和检测,安全决定存亡!!!!
               

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

平时开发不会都百度,,,,,,,,,,嘻嘻
页: [1]
查看完整版本: php做的一道面试题,读取目录下的文件(以及心得)