您的浏览器过于古老 & 陈旧。为了更好的访问体验, 请 升级你的浏览器
Ready 发布于2013年09月04日 10:42 最近更新于 2019年05月31日 12:57

原创 PHP中访问中文名称的文件时出错

3212 次浏览 读完需要≈ 3 分钟 PHP

内容目录

对于一些刚刚接触PHP文件系统相关函数的程序开发人员来说,在初次使用fopen()filesize()等PHP文件系统函数处理中文名称的文件时,页面可能会显示如下错误信息:

<?php
$fileName = 'D:/中文测试.exe';

$f = fopen($fileName, 'r');
//错误提示
//Warning: fopen(D:\中文测试.exe): failed to open stream: No such file or directory in D:\PHP\core\test.php on line 4

echo filesize($fileName);
//错误提示
//Warning: filesize(): stat failed for D:\中文测试.exe in D:\PHP\MySoft\core\func.php on line 8
?>

经过仔细检查发现,在D盘的根目录下确实存在名为"中文测试.exe"的文件,并且没有被其他应用程序占用,就是无法使用fopen()等函数操作该文件,并且提示的信息中表名PHP找不到指定的目录或文件。

实际上,上述情况很有可能是由于PHP的文件编码与操作系统的编码不一致引起的。当我们使用PHP处理中文名称的文件时,必须保持PHP文件系统函数中的文件名称编码与系统编码保持一致,否则PHP将无法找到指定的文件,从而导致出现上述错误。

解决该问题的办法有两种:

第一种方法是更改PHP文件的编码,使其与操作系统编码保持一致。例如,你的PHP代码文件的编码为UTF-8,但是简体中文版的Windows操作系统的编码默认为GBK,当两者的编码不一致时,将会出现上述错误提示信息。因此,我们可以将PHP文件的编码重新变更为GBK即可。

另一种方法是使用函数iconv()将编码为UTF-8的字符串转换为GBK编码,这样也能够起到同样的效果。示例代码如下:

<?php
$fileName = 'D:\\中文测试.exe';
//将字符编码从UTF-8转为GBK
$fileName = iconv('UTF-8', 'GBK', $fileName);
echo filesize($fileName);	//将输出对应文件的大小(单位:字节)
?>
  • CodePlayer技术交流群1
  • CodePlayer技术交流群2

0 条评论

撰写评论