爆炸文件名以分隔名称和扩展名在PHP中不起作用?

时间:2012-05-03 04:31:42

标签: php filenames explode period scandir

我正在构建一个类,它返回一个自动包含文件夹中文件的字符串,有点像HTML文件的加载器。

以下是将要调用的方法:

function build_external_file_include($_dir){
    $_files = scandir($_dir);
    $_stack_of_file_includes = "";//will store the includes for the specified file.
foreach ($_files as $ext){
    //split the file name into two;
    $fileName = explode('.',$ext, 1);//this is where the issue is.

    switch ($fileName[1]){
        case "js":
            //if file is javascript
             $_stack_of_file_includes =  $_stack_of_file_includes."<script type='text/javascript' src='".$dir.'/'.   $ext ."'></script>";

            break;
        case "css";//if file is css
             $_stack_of_file_includes =  $_stack_of_file_includes."<link rel=\"stylesheet\" type=\"text/css\" href=\"".$dir.'/'. $ext."\" />";
            break;
        default://if file type is unkown
             $_stack_of_file_includes =  $_stack_of_file_includes."<!-- File: ".  $ext." was not included-->";
    }


}
return $_stack_of_file_includes;
}

所以,这没有任何错误。但是,它没有做它应该做的事情......或者至少我打算做什么。从技术上讲,这里,

$fileName[1]应该是扩展程序js

$fileName[0]应该是文件main

的名称

$fileName[0]main.js

爆炸无法识别.

提前谢谢。

2 个答案:

答案 0 :(得分:5)

您强制生成的数组有1个元素,这会导致它拥有整个文件名。

explode( '.', $ext, 1 )

应该是

explode( '.', $ext );

证明:http://codepad.org/01DLpo6H

答案 1 :(得分:0)

您已将爆炸限制为生成 1 数组条目,因此它永远无法执行任何操作:

print_r(explode('.', 'a.b', 1));
Array
(
    [0] => a.b
)

限制应该至少为2.或者更好的是,您应该使用pathinfo()函数,它可以为您正确处理文件名组件。