当前位置: 首页 > 技术随笔 > PHP中访问中文名称的文件时出错

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);	//将输出对应文件的大小(单位:字节)
?>
7 1
我们认为: 用户的主要目的,是为了获取有用的信息,而不是来点击广告的。因此本站将竭力做好内容,并将广告和内容进行分离,确保所有广告不会影响到用户的正常阅读体验。用户仅凭个人意愿和兴趣爱好点击广告。
我们坚信:只有给用户带来价值,用户才会给我们以回报。
CodePlayer技术交流群1CodePlayer技术交流群1

帮朋友打一个硬广告:

P2P网贷系统(Java版本) 新年低价大促销,多年P2P技术积累,系统功能完善(可按需定制,可支持第三方存管、银行存管),架构稳定灵活、性能优异、二次开发快速简单。 另可提供二次开发、安装部署、售后维护、安全培训等一条龙服务。

外行看热闹,内行看门道。可以自信地认为,在系统设计上,比市面上的晓风、迪蒙、方维、绿麻雀、国融信、金和盛等P2P系统要好。
深圳地区支持自带技术人员现场考察源代码、了解主要技术架构,货比三家,再决定是否购买。

也可推荐他人购买,一旦完全成交,推荐人可获得实际售价 10% 的返现。
有意向者,详情请 点击这里 联系,工作时间立即回复。