文件路径需要是英语

时间:2013-01-26 20:19:49

标签: php

我正在尝试使用PHP验证目录:

is_dir('C:\Users\Администратор\Desktop\Среда чтения')

但结果总是错误的。我是否必须使用英语命名一个目录才能正确使用它们?

6 个答案:

答案 0 :(得分:4)

尝试在脚本中使用utf-8 还要检查斜线

答案 1 :(得分:2)

在Windows上

文件系统总是UCS-2,遗憾的是PHP并不那么聪明。我不确定is_dir()是否缩减为ANSI API调用或WideString,但是使用ANSI是有意义的。在这种情况下,您将受到“非Unicode程序语言”操作系统设置的支配。您将无法访问错误语言的文件名。

在Linux上

这不是那么简单。文件系统本身并没有真正的文本编码,这使得事情变得尴尬。西里尔文件名可以存储在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/Среда чтения')