PHP:将文件路径分解为数组无法正常工作


PHP: Exploding file path into an array is not working properly

我有超过100万条文件路径记录保存到mysql数据库的一列中。我正在尝试制作一个应用程序来提取可能有不同路径的类似文件,并用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);
?>

通过使用双引号,PHP进入模板模式。例如,'456将被视为八进制值。

只需使用单引号'就可以解决您的问题。

只需将双引号改为单引号,字符串就不会被解析。

生成数组的问题是必须转义$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()函数与您正在做的事情更相关。

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