PHP读取CSV路径\后接数字触发八进制溢出是否与命名规范相关
问题本质
这个现象和PHP的文件命名规则无关,是PHP双引号字符串的转义解析机制导致的。
- PHP中用双引号包裹的字符串里,反斜杠
\属于特殊转义字符,当反斜杠后紧跟0-7范围的数字时,解析器会将这部分内容识别为八进制转义序列,尝试转换为对应的ASCII字符。 - 你原始代码路径中的
\403刚好匹配这个解析规则:解析器会把反斜杠后的403识别为八进制数值,但单字节八进制转义的合法取值范围是0377(对应十进制0255),403超出了合法范围,因此触发你看到的溢出警告。 - 转义解析完成后,实际传入
file_exists()函数的路径已经和你磁盘上的真实路径不一致,自然会返回文件不存在的提示。 - 你在文件名开头加字母A之后,反斜杠后紧跟的字符变成了字母A,不会触发八进制转义解析,路径字符串能被正确识别,所以代码可以正常运行。
正确修复方案
不需要修改原文件名,任选以下一种写法即可彻底规避转义问题:
- 用正斜杠作为路径分隔符,Windows环境下PHP可以正常识别正斜杠路径:
$csvfile = "C:/wamp64/importcsv/403-002-20220701_F.csv";
- 用单引号包裹路径字符串,单引号中除了末尾反斜杠外,其他反斜杠不会被当作转义符解析:
$csvfile = 'C:\wamp64\importcsv\403-002-20220701_F.csv';
- 对路径中的反斜杠做转义,用两个反斜杠表示一个实际的反斜杠字符:
$csvfile = "C:\\wamp64\\importcsv\\403-002-20220701_F.csv";
注意你原始代码里的路径字符串末尾多了一个多余空格,也可能导致路径匹配失败,写路径时要注意去掉多余的空白字符。
内容的提问来源于stack exchange,提问作者JCRCAN
相关产品推荐
相关产品推荐

