PHP打压缩包无中文文件

16 篇文章 0 订阅
本文记录了一个在Docker测试环境中,使用PHP下载的压缩包解压后出现空文件的问题,原因是basename函数对中文支持不佳。作者通过自定义get_basename方法解决文件名获取问题,或者在启动Docker时设置envLANG=C.UTF-8来支持中文。这个经验分享对于遇到类似问题的开发者有参考价值。
摘要由CSDN通过智能技术生成

问题:测试环境下载压缩包,解压后是空文件,而是本地正常。

测试环境下载解压后

测试环境:docker+php

 

本地环境解压后显示

Homestead集成环境

 

问题分析查找过程

首先去断点打印,压缩包外的需要打印的文件内容及其路径是否正确,并在服务器上查对对应位置是否有文件。

代码如下:

 

输出内容如下

 初次断定以为是相对路径所导致,修改成绝对路径后再次进行尝试,后进行下载,无效进行推翻。

其次,在压缩代码中进行断点常试。

代码如下。

 打印结果如下:

结果:原因找到了。发现basename获取文件名称,对中文没有生效,原先没有遇到啊过,太坑了,咋整??去度娘一查,发现遇到这个坑的人还真不少,谦虚学习一下。进行学习,对程序代码处理如下:

get_basename方法如下:

 /**
     * Undocumented function
     * @content basename 不支持中文 处理
     * @param [type] $filename
     * @return void
     */
    public  function get_basename($filename){

        return preg_replace('/^.+[\\\\\\/]/', '', $filename);
    }

 第二种处理方法:

在启动docker 是加入参数  env LANG=C.UTF-8 即可支持中文

总结:

好记性不如烂笔头,遇到这个坑了,别的文章也有各路大神文章,但是觉得还是自己再写一遍加深记忆,希望对后踩坑的兄弟有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值