永发信息网

在linux 系统上使用php 代码解压,中文的文件解压不出来,其他的可以,求解答

答案:2  悬赏:70  手机版
解决时间 2021-03-18 06:13
在linux 系统上使用php 代码解压,中文的文件解压不出来,其他的可以,求解答
最佳答案
文件名用中文那就别拉着别人一起恶心了。服务器的基本原则就是绝对不能出现中文文件名。

因为 Linux 下面普遍的文件名默认编码都是 UTF-8 。但是很多情况下,压缩包里面的文件名都是当前系统的 IO 用字符编码。而且解压缩写入文件时,很多软件也都没有提供文件名编码转换的问题。
结果就是出现问题。

现在,你要不然就是用你当前编码去重新压缩文件,当然,Windows 的编码肯定不是 UTF8 ,只能是 Linux ,或者尝试用英文版(不能是用语言包换成英文,必须是纯英文版)。要不然就去用支持文件名编码设置的压缩协议去重新压缩,不过具体有哪些支持我不清楚。

最后的一个办法,那就是你自己写解压缩代码,代码里获取文件名后自己转换。追问关键是中文不是我要求的,对我来说也很重要,不然也不可能费力不讨好追答那没办法。编码问题一直就是这么XXOO。

现在你遇到的主要问题是,压缩时编码、解压缩编码、系统文件名编码,这三个只要有一个不同,就会出问题。

你最直接的办法,就是在 Linux 里面先解压缩一下,之后重新压缩。
用和服务器系统版本一样的 Linux ,而且 locale 设置也要一样的。当然不一定非得是中文,但是最好是 UTF8 的。en_US.UTF-8 和 zh_CN.UTF-8 这种。你的服务器也要用 UTF8 (不过我记得现在服务器基本都是这个,除非有人手欠,或者系统太老)。

如果是乱码的,你在你自己的 Linux 上面要么解压失败,要么就是文件名乱码,这个时候你可以临时 export LANG=XXX 来设置,之后再尝试解压。还有文件系统也有自己的 IO 编码,export 并不一定管用,可能还需要你单独弄一个大文件,格式化成 ext3 之后 -o loop 方式挂载,加上 charset=xxx 参数来使用,让文件能解压缩出来到这个文件里(当然对于系统来说,类似一个新的分区)。之后再给你这个解压缩出来的文件夹转换文件目录的编码(抱歉命令忘了)。之后用 UTF8 重新压缩,服务器上就能正常解压缩了。

最好是去要求,给你的文件,就必须在某个环境下压缩的让他可以在服务器上解压缩。
另外,我记得好像 7zip 的文件名是有编码信息的。这个压缩方式,文件名可以跨编码正确识别。当然有前提,那就是,如果我没记错。
zip 是铁定不行的,tar 好像也依赖于当前系统状况。不过 tar 有个好处是,Linux 现在都是 utf8 ,他在 Linux 里没问题,但是 Windows 下面过来的数据无法保证。另外 rar 也有编码问题,这东西在纯中文版的 Windows 和纯英文版的里面就互相不能文件名兼容。其他的就真想不起来了。追问
代码是在linux运行的,要解压到linux一个指定目录,只有图片是中文反而丢失了,
刚你说的那么多,能不能给点实用的具体该怎么:(临时写)export LANG=XXX 

,这个可以么具体是怎么实现的
追答你可以试试解压缩改用命令 LANG=XXXXX unzip xxxxxx 。
LANG 后面的 XXXXX 你可以是是 zh_CN.GB2312 ,zh_CN.GB18030 ,后面的 xxxxx 是压缩包的名字。
php 调用命令的函数我记得是 system() 吧?
不过有些服务器设置是禁止 php 调用系统命令的。

不过你这么做就算能解压,那么解压缩出来也是乱码,你还是无法调用和提供访问。
而且这么做可能反而更糟,导致服务器上面文件名混乱。

所以,这种情况下,要么你自己实现解压缩的代码,自己读取文件名后转换,而不是调用 php 的 zip 模块。不然就在你自己的计算机上解压缩重新压缩,自己先解决一下编码问题。
zip 的文件名是不含编码信息的,而且你这个肯定是 Windows 下面拿到的 zip ,Windows 自己用的不是 UTF8 ,你这么弄,肯定有编码问题。
全部回答
先将中文文件改为非中文,再尝试解压追问这样一来是可以解压的,但是我必须要中文:
压缩包里有一个文件夹(里面存放了图片)文件可以解压出来里面的图片却没有
如果我吧图片的命名改为非中文却可以,求解答!!!追答把系统环境变量改为中文,再解压试试追问怎么改环境变量哥哥,我是新手,公司的服务器不会出问题吧!!!!追答export LANG=zh_CN.GB2312追问可不可以指定一个目录,这样我公司服务器不会报错吧追答你创建一个用户,只修改用户的环境变量,把压缩包放到用户的主目录去操作就没事儿了。追问上传可以上传中文的图片,但是解压的时候还是解压不出来追答
解压肯定是没问题的,你先保证你在终端中可以显示中文名称。(如果你连中文显示都是乱码,那解压肯定出不来)
PS.现在几乎所有的网站都不可能会出现中文名称的文件,包括图片。你为什么非要选择中文呢!!!中文在linux系统中会很有问题。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
四个马字组成的字怎么读
德语生日快乐
广州市益晟劳务公司天河分公司地址在什么地方
天津河西区大沽南路利民道交口百粤湾,老板拖
有精神分裂症会影响学习吗
怎样加入刘氏宗亲会
pubwin2015交接班点错该怎么办
木珠坊地址在哪,我要去那里办事
情人给我发了个猪头,玫瑰,嘴唇是什么意思?
为什么中国电影的巅峰是90年代
新买的电脑,要新创建一个Microsoft 账户,这
我有一个excel表格,里面全部都是手机号码,
请问一下 在电子里面 150 mVpp 是什么意思?
想转一家体育彩票店!怎么样?能赚钱吗
我想了解太阳能热水袋系列性能:如使用期限,
推荐资讯
手机显示正在充电,却越充越少,有时能充到,
望鼠成龙的成语打一肖
查询中国五星级酒店总机电话到哪个网站啊?
武安古武当山在哪?那里好不好玩?
辽宁省3M代理商是哪家公司?
{3x+4y=5;-7x+9y=-5/2 怎样解
cs1.6 007作弊器 为什么我更改了cfg文档,把
八卦两仪阵,阵法口诀是什么
LOLS6永恒梦魇魔腾还值得入手吗?不论操作难
梦见和老公吵架,并且气醒,是怎么回事拜托各
是以业务发展推进队伍建设,还是以队伍建设促
填空题某工厂生产一种产品,它们来自甲、乙、
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?