【问题标题】:PHP - Exploding / Moving / FilenamePHP - 爆炸/移动/文件名
【发布时间】:2014-10-27 13:03:50
【问题描述】:

想知道您是否可以提供帮助,我是 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);

非常感谢任何帮助。或者,如果您能指出我的示例/文档,那就太好了。

谢谢

【问题讨论】:

    标签: php arrays string joomla3.0 explode


    【解决方案1】:

    假设 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);
        }
    }
    

    【讨论】:

    • 当我添加上面的内容时,页面似乎变成空白。所以在 php 代码检查器上运行它并标记为:PHP Syntax Check: Parse error: syntax error, unexpected '{' in your第 72 行的代码 if(!is_file($dir.DS.$file){continue;}
    • 哦哇!!!!!!非常感谢它奏效了。我只剩下一个错误:未定义的偏移量:1 第 74 行,即:$firstTwoLetters = substr($array[1], 0, 2);.
    • 可能有一个文件名中没有空格。在其前面添加if(count($array)&lt;2){ continue; }
    • 啊是的,非常感谢。如果有人可以就这个答案给你投票,我希望我需要 15 个代表来添加投票
    • 非常感谢,顺便说一句,如果我不存在,我想自动创建一个目录。例如,它读取 NS 但没有“Nathan Saunders”文件夹我怎么能自动创建该目录?最后一件事我只想添加到它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-20
    相关资源
    最近更新 更多