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