我正在尝试使用PHP验证目录:
is_dir('C:\Users\Администратор\Desktop\Среда чтения')
但结果总是错误的。我是否必须使用英语命名一个目录才能正确使用它们?
答案 0 :(得分:4)
尝试在脚本中使用utf-8 还要检查斜线
答案 1 :(得分:2)
文件系统总是UCS-2,遗憾的是PHP并不那么聪明。我不确定is_dir()
是否缩减为ANSI API调用或WideString,但是使用ANSI是有意义的。在这种情况下,您将受到“非Unicode程序语言”操作系统设置的支配。您将无法访问错误语言的文件名。
这不是那么简单。文件系统本身并没有真正的文本编码,这使得事情变得尴尬。西里尔文件名可以存储在UTF-8或Windows-1252(或其他任何内容)中,由创建/读取文件以识别编码的软件决定。文件系统只存储一堆字节作为“文件名”。 PHP也不关心文本编码,所以你真的需要事先知道文件名的编码是什么,这样你就可以将正确的字符串传递给is_dir()
。
我强烈建议在使用PHP时避免文件名中的非英文字符。很难做到这一点。
答案 2 :(得分:1)
您可以查看是否file_exists()
:
if(file_exists('C:\Users\Administrator\Desktop\Wednesday read'))
{
// Do your thing...
}
答案 3 :(得分:1)
通过一个具体的例子,你可以反过来看问题:
$dirs = scandir('C:\Users');
print_r($dirs);
因为您知道有一个名为“Администратор”的文件夹 - 请参阅php如何显示它。通过获取php收到的结果,您可以希望确定特定文件夹的正确编码。如果编码是一致的(根据它Vilx-),应该可以处理任何带有西里尔字符的文件夹/文件。
答案 4 :(得分:0)
请勿使用管理员权限!
使用UTF-8。
使用linux,至少在VM中使用。它会为你节省很多时间。
你永远不应该依赖非ASCII路径!
使用file_exists()函数测试文件/目录是否存在:http://php.net/manual/en/function.file-exists.php
答案 5 :(得分:0)
这个问题可能是因为你没有“逃避”反斜杠引起的,因此,PHP试图这样做:
is_dir('C:UsersАдминистраторDesktopСреда чтения')
哪个不起作用。
尝试转义反斜杠;
is_dir('C:\\Users\\Администратор\\Desktop\\Среда чтения')
尽管使用'slashes'也适用于Windows上的PHP;
is_dir('C:/Users/Администратор/Desktop/Среда чтения')