【问题标题】:PHP: recursively remove brackets from filenames in directory and all sub directoriesPHP:递归地从目录和所有子目录中的文件名中删除括号
【发布时间】:2017-10-31 23:01:48
【问题描述】:

我在删除系统中上传文件中的括号时遇到问题。

我可以删除单个目录文件中的括号,但我很难在同一文件夹的子目录中递归地让它工作。

我正在使用 str_replace 查找括号 [ ] 并将它们替换为空白字符。

    $dir = $_SERVER["DOCUMENT_ROOT"]."/uploads" ; // what directory to parse

  if ( $handle = opendir ( $dir)) {
   print "Directory Handle = $handles\n" ;
   print "Files : \n" ;
    while ( false !== ($file = readdir($handle))) {
     if ( $file != "." && $file != ".." ) {
      $isdir = is_dir ( $file ) ;
       if ( $isdir == "1" ) {} // if its a directory do nothing
        else {
        $file_array[] = "$file" ; // get all the file names and put them in an array
        print "$file\n" ;
        } // closes else
      } // closes directory check
     } // closes while
  } // closes opendir
 //Lets go through the array
 $arr_count = count( $file_array ) ; // find out how many files we have found so we can initiliase the counter
 for ( $counter=1; $counter<$arr_count; $counter++ ) {
  print "Array = $file_array[$counter]\n" ; // tell me how many files there are
  $illegals = array("[","]");
  $new = str_replace ( $illegals, "", $file_array[$counter] ) ; // now create the new file name
  $ren = rename ( "$dir/$file_array[$counter]" , "$dir/$new" ) ; // now do the actual file rename
  print "$new\n" ; // print out the new file name
  }
 closedir ( $handle ) ;
echo $dir;

【问题讨论】:

  • "我目前找不到代码,稍后会上传。"好的,那我等着……
  • 抱歉没有马上上传代码。已经是凌晨 2 点了,我的女朋友在对我大喊大叫。花了一整天的时间试图找到一种方法来做到这一点。

标签: php recursion str-replace sanitize


【解决方案1】:

好的,所以我从递归重命名脚本中获取代码并创建了我自己的清理脚本。如果我搞砸了,请告诉我。感谢您为我指明正确的方向 NIC3500

$path = $_SERVER["DOCUMENT_ROOT"]."/uploads" ;
$illegals = array("[","]");


$di = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($path, FilesystemIterator::SKIP_DOTS),
    RecursiveIteratorIterator::LEAVES_ONLY
);

foreach($di as $name => $fio) {

    //$newname = $fio->getPath() . DIRECTORY_SEPARATOR . strtolower( $fio->getFilename() );
    $newname = $fio->getPath() . DIRECTORY_SEPARATOR . str_replace ( $illegals, "", $fio->getFilename() );
    //echo $newname, "\r\n";
    rename($name, $newname);

}

【讨论】:

    猜你喜欢
    • 2017-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-11
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    相关资源
    最近更新 更多