PHP中如果使用中文文件名进行rename操作的时候会失败,这时候需要对文件的编码进行一下处理。下面是 file_exists 也会存在这个问题,使用方法也是一样的。

PHP中通常使用file_exists()判断某个文件或者文件夹是否存在,如果文件或文件夹存在则返回true,否则返回false。今天写程序时发现,在网页使用UTF8编码的情况下,该函数对于中文文件名或者文件夹名不能返回正确值,始终返回false。猜测可能是编码不同导致PHP不能正确判断。

下面是不能够返回正确值的代码,无论文件是否在都返回不在:

 <?php;
 $file="/attachment/21/0/代码+.rar";
 $newfile = dirname(__FILE__).$file;
 
 echo file_exists($newfile);
 ?>

增加了一句将 UTF8 编码转换为 GB2312 编码的语句,改进后可以了正确判断了:

<?php
$file="/attachment/21/0/代码+.rar";
$newfile = dirname(__FILE__).$file;

$file=iconv('UTF-8','GB2312',$file);

echo file_exists($newfile);
?>

rename 方法也一样的,需要先对文件名进行 iconv 的方式进行转换。