卐槑卍 2019-02-05 23:41:28 1810次浏览 0条回复 0 0 0

最近在使用 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 保存即可解决问题。

    没有找到数据。
您需要登录后才可以回复。登录 | 立即注册