PHP:将文件路径扩展到数组中无法正常工作

时间:2013-07-10 13:42:00

标签: php regex

我有超过1百万条文件路径记录保存到mysql DB的一列中。我正在尝试创建一个应用程序来下载可能具有不同路径的类似文件并使用PHP进行排列。我有数据库所有设置,现在我试图让我的PHP工作,但遇到以下警告,以及它甚至没有正确创建数组,因为你会注意到你看到以下输出并将其与文件目录,甚至出现了奇怪的段落符号以及文件名混乱。

array(4) { 
    [0]=> string(42) "2013-01-17-141325589_2013-01-18-j-CP08.45" 
    [1]=> string(3) "ar¶" 
    [2]=> string(10) "loc¶66hygh" 
    [3]=> string(23) "dfgh  est_file1.jpg.meta" 
}

这是我的代码:      

$filepath = "2013-01-17-141325589_2013-01-18-j-CP08\45645\5\ar\666\loc\66666hygh\dfgh\test_file1.jpg.meta";

$pieces = explode("\\", $filepath);

var_dump($pieces);
?>

4 个答案:

答案 0 :(得分:1)

通过使用双引号,PHP进入template mode。例如,\456将被视为八进制值。

只需使用单引号'即可摆脱您的问题。

答案 1 :(得分:0)

您的数组生成的问题是您必须转义$filepath中的反斜杠。以下代码按预期工作:

<?php
$filepath = "2013-01-17-141325589_2013-01-18-j-CP08\\45645\\5\\ar\\666\\loc\\66666hygh\\dfgh\\test_file1.jpg.meta";
$pieces = explode("\\", $filepath);
var_dump($pieces);
?>

当反斜杠未被转义时,它们本身就作为转义字符,这会导致路径中出现意外行为。

但是,您可能会发现pathinfo()功能与您正在做的事情更相关。

答案 2 :(得分:0)

\xxx其中xxx是0-7范围内的数字,被解释为八进制数。因此,例如,代码中的\666被视为八进制666,被视为十六进制0x1B6 /十进制438,即字符。

答案 3 :(得分:0)

只需将双引号更改为单引号即可解析字符串。