Yii 2 上传中文名文件时出错的原因及解决方法 [ 求助交流 ]
最近在使用 Yii 2.0 时练手时,发现一个奇怪现象:上传文件时一直提示上传错误,报错 failed to open stream
。按照 Yii 2.0 权威指南中的文件上传代码,还是提示错误。
最初以为是php配置问题,重新修改相关配置,结果 failed to open stream
。
然后错误追踪为 saveAs()
方法中的 move_uploaded_file()
。经过不断测试,把 $this->imageFile->baseName
直接换成对应的名字,上传就 OK 了。难道出现 bug 了?这么多人用会有 bug.....
再进行不断测试,发现使用 $this->name
属性值,也提示上传成功。
这.....,无奈年前手头有事催着紧,没时间琢磨,借着过年有空好好把这个问题研究
经过研究发现:文件名为中文时无法上传,改成英文或数字都正常上传。此问题原因为编码引发的“血案”,windows 默认编码为 GBK(查看方法:开始->cmd->chcp,然后显示一个数字:如936,则代表是GBK简体中文),而 Linux 系统本身就是使用 UTF-8 来编码的。
Yii 2.0 编码格式我默认为 utf-8。在上传文件后,一般都会用 move_uploaded_file()
进行文件移动改名。但是 move_uploaded_file()
并不支持 UTF-8 编码,如果含有,那么函数就会执行失败,不过这个函数是支持 GB2312 或者是 GBK 编码的,在调用 move_uploaded_file()
方法前,通过 mb_convert_encoding
( string $str
, string
转换后格式,string
转换前格式),在存入数据库时,使用此函数转化为 utf-8 保存即可解决问题。
共 0 条回复
卐槑卍 湖北十堰
最后登录:2019-09-13
在线时长:8小时35分
- 粉丝1
- 金钱370
- 威望20
- 积分650