shumo 发表于 2013-1-16 00:41:24

centos系统上php处理中文文件名

在centos系统上用php处理中文文件名
环境介绍: apache: utf8, mysql: utf8, php页面 utf8; centos lang: en_utf8
任务的简单描述,通过类似
http://www.shumo.com/file.php?id=2 的uri来获取编号为id的文件流,file.php通过访问数据库表来获取中文文件名,然后通过fpassthru向客户端输出文件数据。
问题:数据中获取的文件名,file_exists 判定不存在,但是文件明明是存在的。
莫名其妙,于是在本机上写测试代码,发现也有问题。
解决步骤:
1、检查系统文件名的编码, 通过编写测试代码
$dir = dirname(__FILE__) . "/zh_files/";$handle = @opendir($dir) or die("Cannot open " . $dir);while ($file = readdir($handle)) {if ($file != '.' && $file != '..') {echo "$file <br />";}}closedir($handle); 通过浏览器选择编码,使中文文件名可以正常显示,以此确定系统的中文编码。
通过这一步骤,本机(windows)上,把从数据库中取得的中文名转换编码,任务就OK了
$filename = mb_convert_encoding($filename, "GBK", "UTF-8"); 但是在centos上还是不行。
 
2、检查从数据库中取出的数据编码,虽然数据库是默认utf8的,但是取出的数据却不一定是utf8的。后来查找发现有一个命令,显式指定数据库的链接方式
SET NAMES UTF8; 即在建立连接后,运行该命令
@ $db = new mysqli(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_DATABASE);if (mysqli_connect_errno()) {die('connect error');}$db->query("set names utf8"); 考,问题解决了。
 
另:
因为有几百个小文件需要上传到centos上,提供下载,随即用winrar打了包,上传到ftp上,居然解压不了yum install unrar不行, 下了一个rar linux版本的,make后发现GLIBC2.7 not found; 这个不知道怎么解决;
所以还是下载了一个7-zip, 先压缩选择tar, 再压缩选择gzip, 打包成 name.tar.gz. 再上传通过tar解压。
 
真是郁闷,这些事情搞了半个晚上!
页: [1]
查看完整版本: centos系统上php处理中文文件名