内容目录
对于一些刚刚接触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); //将输出对应文件的大小(单位:字节)
?>
0 条评论
撰写评论