2014-10-27 32 views
0

不知道你是否可以帮忙,我是新来的PHP和卡住了。我有大量文件看起来像这样:PHP - 爆炸/移动/文件名

2014-04-01 NS122345 - 日期,人的姓名缩写以及员工代码。

我希望能够将具有NS或JB或GA的文件移动到相关文件夹/目录中。所以对于NS来说,它会进入Nathan Saunders文件夹,因为JB会进入Joe Bailey文件夹。

有几个人对我说要使用explode和substr来分割文件名,然后我猜想通过数组搜索。有人说这样使用:

$array = explode(' ', $filename); 
$firstTwoLetters = string substr ($array[1], 0, 2); 

但我得到错误的变量文件名未定义。

不幸的是我没有线索。我通过论坛搜索论坛和发布帖子后,我已经跟从了这个至今:

if(JFile::exists($searchpath .DS. '.doc')){ 
    JFile::move($searchpath .DS. '.doc', JPATH_BASE .DS. 'upload' .DS. 'Nathan' .DS. '.doc'); } 

我的目录结构是这样的:

root/wan/upload - Where files/images/docs are stored. Inside upload folder i have: 
>2014-04-08 NS6565.doc 
>2012-01-03 JB8932.doc 
>2013-02-01 GA5434.doc 
>etc 
root/wan/administrator/components/com_upload - where my code is stored 

问题是,我有几百万的这些文件,而我在上面给出的例子开始时的日期将会改变。

我试图把它们放入数组,但在那里不知道如何再拆/调用正确的摆在正确的文件夹:

尝试 - 阵列

$dir = JPATH_BASE . DS . "upload"; 
$basename = basename($dir); 
$array = scandir($dir); 
$filename = basename($dir[0]); 
print_r($array); 
print_r($basename); 

任何帮助非常感激。或者,如果你可以指点我的例子/文档,那会很棒。 。

感谢

回答

2

假设DS是DIRECTORY_SEPARATOR

$dir = JPATH_BASE . DS . "upload"; 
$folders = array('NS'=>'/path/to/Nathan/Saunders/Folder','JB'=>'/path/to/Joe/Bailey/folder'); 
$files = scandir($dir); 
foreach($files AS $file){ 
    if(!is_file($dir.DS.$file)){ continue; } 
    $array = explode(' ', $file); 
    if(count($array)<2){ continue; } 
    $firstTwoLetters = substr($array[1], 0, 2); 
    if(!empty($folders[$firstTwoLetters])){ 
     rename($dir.DS.$file,$folders[$firstTwoLetters].DS.$file); 
    } 
} 
+0

该网页似乎变成空白页时,我加在上面所以运行它的PHP代码检查工具,它标志了在:PHP语法检查:解析如果(!is_file($ dir.DS. $ file){continue;} – Simpson 2014-10-27 14:29:01

+0

)错误:语法错误,在第72行的代码中意外的'{''''')。编辑的代码。 – MIvanIsten 2014-10-27 14:38:31

+0

OH WOW !!!!!!非常感谢你的工作。我只剩下一个错误:未定义偏移量:1行74,即:$ firstTwoLetters = substr($ array [1],0,2);. – Simpson 2014-10-27 14:45:05