2014-02-25 74 views
0

我有一个文本文件,我想将其复制到具有以下结构的所有子目录中。将文件复制到所有子目录中php

S000314/0000356/data folder 
/0000357/data folder 
/0000358/data folder 

所以,我阅读完所有的子目录,并试图将文本文件复制到所有them..But的,重命名功能只能once.its复制文本文件复制到0000356->数据文件夹

if ($handle = opendir('S000314')) { 
    while (false !== ($entry = readdir($handle))) { 
     if ($entry != "." && $entry != "..") 
     { 
      rename("sdata.txt" , "/S000314/$entry/data/sdata.txt"); 
     }  
    } 
    closedir($handle); 
} 

我不知道如何将同一个文件复制到所有的子目录。请看下面的代码。

+0

有被称为PHP函数['副本()'](http://php.net/copy) - 你尝试已经?你也应该检查'$ entry'是否真的['is_dir()'](http://php.net/is_dir) – kero

+0

是的,我做了..但是,这没有奏效。 – user2791530

+0

我的目录包含所有的子目录,,没有别的..这就是为什么我没有包含is_dir() – user2791530

回答

1

我推荐使用copy()代替rename(),因为这是你想要的(代码会更容易阅读)的实际操作。

的一个问题可能是目录分隔符 - 我测试了它在Windows其中两个/\似乎是工作,但是这不应该是你的关心,因为PHP有​​DIRECTORY_SEPARATOR

下面这段代码在我的机器上工作:

$topdir = 'S000314'; 
if ($handle = opendir($topdir)) { 
    print "in\n"; 
    while (FALSE !== ($subdir = readdir($handle))) { 
     if ($subdir != '.' && $subdir != '..') { 
      $dest = $topdir . DIRECTORY_SEPARATOR . 
       $subdir . DIRECTORY_SEPARATOR 
       'data' . DIRECTORY_SEPARATOR; 
      copy('data.txt', $dest.'data.txt'); 
     } 
    } 
} 
+0

实施你的建议,它没有工作。这里有代码$ topdir ='../simulations/S000611/'; if($ handle = opendir($ topdir)){ while(false!==($ entry = readdir($ handle))){ if($ entry!=“。”&& $ entry!=“.. “){ \t \t $ dest = $ topdir。 DIRECTORY_SEPARATOR。 $条目。 DIRECTORY_SEPARATOR。 'data'。 DIRECTORY_SEPARATOR; echo“$ dest \ n”; \t \t \t // echo $ dir.PHP_EOL; \t \t \t $ file =“../ data/sdata.txt”; \t \t \t copy($ file,$ dest。“sdata.txt”); } } closedir($ handle); } – user2791530

+0

您需要进一步调试。你确定循环正常运行吗?这些子目录实际上是可写的吗? – kero

+0

我已经使用echo“$ dest \ n”;在脚本中......它完美地打印出所有的路径,但是,它不会复制。 – user2791530

0
@copy($yourSource_file, $yourFile_element . '/youPage.html'); 
相关问题