4

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

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

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

4

6 回答 6

4

尝试在你的脚本中使用 utf-8 也检查斜杠

于 2013-01-26T20:21:32.897 回答
2

在窗户上

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

在 Linux 上

这不是那么简单。文件系统本身并没有真正的文本编码,这让事情变得很尴尬。西里尔文文件名可以存储在 UTF-8 或 Windows-1252(或其他任何格式)中,这取决于创建/读取文件的软件来识别编码是什么。文件系统只是将一堆字节存储为“文件名”。PHP 也不关心文本编码,所以你真的需要事先知道文件名的编码是什么,这样你才能将正确的字符串传递给is_dir().

总之

我强烈建议在使用 PHP 时避免使用文件名中的非英文字符。很难做到正确。

于 2013-01-26T20:30:35.113 回答
1

举个具体的例子,你可以反过来看问题:

存在哪些目录

$dirs = scandir('C:\Users');
print_r($dirs);

由于您知道有一个名为“Администратор”的文件夹 - 看看 php 如何显示它。通过获取 php 收到的结果,您有望确定特定文件夹的正确编码。如果编码是一致的(根据Vilx-它是一致的),则应该可以处理任何带有西里尔字符的文件夹/文件。

于 2013-01-27T00:56:19.010 回答
1

您可以检查是否file_exists()

if(file_exists('C:\Users\Administrator\Desktop\Wednesday read'))
{
    // Do your thing...
}
于 2013-01-26T20:24:02.650 回答
0

这个问题可能是因为你没有“转义”反斜杠,因此,PHP 尝试这样做:

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

这是行不通的。

尝试转义反斜杠;

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

尽管使用“斜线”也适用于 Windows 上的 PHP;

is_dir('C:/Users/Администратор/Desktop/Среда чтения')
于 2013-01-26T21:17:21.433 回答
0

不要使用管理员权限!

使用 UTF-8。

使用 linux,至少在 VM 中。它将为您节省大量时间。

你永远不应该依赖非 ASCII 路径!

使用 file_exists() 函数测试文件/目录是否存在: http: //php.net/manual/en/function.file-exists.php

于 2013-01-26T20:25:16.397 回答