file_exists()
和file_get_contents()
在名为output‹ÕÍÕ¥.txt
的文件上失败(作为示例),虽然我知道它存在吗?
我猜它与文件名中的特殊字符有关吗?。
所以想知道什么是解决方法?
感谢所有回复。
供参考:
请注意,如果您的想法为什么不简单地更改文件名? - 我不能,因为文件名一般是生成的,更改文件名将意味着使用PHP的文件函数(似乎不允许文件名args中的特殊字符 - 除非我误解/误解了任何东西)。
我在Windows上使用PHP 5.2。
答案 0 :(得分:5)
确保文件系统的编码与PHP代码中包含文件名的字符串的编码相同。
否则,您正在测试存在的错误文件。
例如,如果您的文件系统不支持UTF-8,但文件名是以UTF-8编码的。
修改强>
所以你评论说文件名是UTF-8而你正在使用windows。
这正是我的答案所在。正如written here:
Windows用户的坏消息:Windows文件系统(FAT,FAT32,NTFS)不支持UTF-8。文件名以ISO-8859-1或CP437 / CP850 /(或任何适合您的语言)编码,具体取决于文件系统和本地化。因此,如果您遵循本指南,您可能会在尝试将文件名从数据库与文件系统匹配时遇到麻烦。 (虽然我从未尝试过。)
Windows解决方法:现代Windows版本在已安装的共享上支持UTF-8。分享您的媒体文件夹并将其作为网络驱动器安装。
因此,要么在实际使用文件系统的编码中进行共享或编码文件名。这不是PHP中的错误。你只是没有检查正确的文件名,就是这样。
<强> EDIT2:强>
假设您有可能接受UTF-16的NTFS(这不是真正精确的AFAIK,但您可以尝试一下),您可以将UTF-8文件名转换为UTF-16文件名:
$name = mb_convert_encoding($name, 'UTF-16', 'UTF-8');
然后尝试file_exists是否有效。请记住,他可能在技术上不正确,和你可能有一个额外的编码问题,即使使用此重新编码也无法正确使用。