php的move_uploaded_file上传中文文件有时会失败

这个系统是一个文件管理系统,用apache+php+mysql,编码全部统一用utf8。部署的服务器是windows server 2003。上传的目录中也有中文。普通的中文目录、中文文件的操作(上传和下载)都没问题(虽然在服务器上看到都是乱码,但下载下来都正常)。但是,有些中文目录或者中文文件名的操作会失败,就是move_uploaded_file上传失败。如果move_uploaded_file中增加iconv(转utf8为gbk),就可以成功。但我不想这样改,因为改的地方太多了(目录和文件名都会保留到mysql中)。有什么改动最小的好办法吗?

第1个回答  2012-11-15
move_uploaded_file上传文件出错方式有很多,比如文件过大,比如上传文件夹无写权限,比如文件格式限制,你使用print_r(FILE)把上传文件的所有信息打印出来看看。看看错过码,找到错误就能定位!追问

move_uploaded_file上传失败,只是返回false,没法知道错误原因吧。print_r打印的上传的完整路径(utf8)都没问题,只是有目录或文件名为中文而已。

第2个回答  2012-11-15
温馨建议:做网页,最好不要使用中文路径
也许开发的时候好记,但后续的麻烦,远远超出当初的偷懒带来的快乐。。。。追问

可以不用中文路径,但中文文件名无法避免

追答

那怕用拼音也好啊
中文对于网页来说,每种编码下的中文字节是不同的,而英文和数字不会

本回答被网友采纳
第3个回答  2012-11-15
utf8 环境下,中文路径是忽悠出错的,
简单的改法就是改掉中文目录名。追问

中文目录名可以改为英文,但中文文件名必须要支持,上传的部分中文文件名的文件还是会失败,如何解决这个。

第4个回答  2015-08-08
百度是个坑,做任务时看不见楼猪的提问内容,只看见标题。

只好再补充:
楼猪提供给move_file~函数的参数,决定php寻文件,因此移动时一定要保持编码一致。
所以你这没什么好方法,而且上传文件如果重名也不好办,最好是产生时间戳做文件名,然后在数据库里对应。
更多文件系统的编码问题,请参看
http://www.baidu.com/s?wd=NTFS%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E7%9A%84%E7%BC%96%E7%A0%81&tn=87048150_dg&ie=utf8

PHP中move_uploaded_file()移动文件失败
在PHP中处理文件上传时,确保正确执行move_uploaded_file()函数是关键步骤。在进行移动文件操作前,务必使用is_uploaded_file()函数验证文件来源的合法性。请确保在调用move_uploaded_file()之前,先执行is_uploaded_file($_FILES['file']['tmp_name']),以确认文件正确上传。若出现“上传图标,运行move...

php的move_uploaded_file上传中文文件有时会失败
move_uploaded_file上传文件出错方式有很多,比如文件过大,比如上传文件夹无写权限,比如文件格式限制,你使用print_r(FILE)把上传文件的所有信息打印出来看看。看看错过码,找到错误就能定位!

php的move_uploaded_file函数,文件上传成功,但总出错误提示
exit("文件上传失败1");} move_uploaded_file($tmp_name,".\/files\/".$file_name)已经在前面执行一次了,所以就出现错误。应该改为:<?php file=$_FILES['file_test'];tmp_name=$file['tmp_name'];file_name=$file['name'];result = move_uploaded_file($tmp_name,".\/files\/".$file_...

php 图片上传move_uploaded_file 出错
上传文件不存在。很可能是PHP临时文件夹不存在导致的。<?php \/ 文件上传类 \/ class Uploads{ \/\/上传文件 private $uploadFile;\/\/上传文件扩展名 private $ext = array('jpeg','jpg','gif','png');\/\/上传文件大小 private $size = 5000000;\/\/上传文件目录 private $uploadDir = '.\/uploads\/'...

在move_upload_file哪总是出错,
因为文件里没有定义 move_uploaded_file 这个函数。 你如果定义了这个函数,就不会出错了。在文件最后添加 function move_uploaded_file($filename, $filePath) { \/\/在服务器上写入文件 } 就不会出错了。然后在函数中实现文件上传就行了。

move_uploaded_file说明
当文件合法但无法移动时,函数同样返回FALSE,同时会触发一个警告,以提醒开发者可能遇到的问题。这是因为移动上传文件时,可能存在对用户或系统安全的影响,特别是当文件内容可能被显示给用户或影响系统其他用户时。需特别提及的是,move_uploaded_file()函数对PHP的安全模式(如安全模式开启)和open_basedir...

php 上传文件出现无法移动的问题
从你的代码来看,这段有错 move_uploaded_file( $this->file[tmp_name] , "\/" . $this->uploadPath . "\/" . $this->fileName )正确的代码应该为(加一个ROOT路径)move_uploaded_file( $this->file[tmp_name] ,ROOT. "\/" . $this->uploadPath . "\/" . $this->fileName )

PHP程序错误:Warning: move_uploaded_file: failed to open stream:
uploaddir = '\/form\/upload\/file\/';改成 uploaddir = '.\/form\/upload\/file\/';uploaddir = '..\/form\/upload\/file\/';试试。

PHP上传文件失败
提示显示的很清楚的。文件已经上传了,但是在把文件从临时文件夹移出来出错了。注意新地址是否正确 可以使用绝对路径或者相对路径,看个人http:\/\/www.hi-docs.com\/php\/move_uploaded_file.html

PHP图片上传一直提示“移动文件出错!”
if(!move_uploaded_file($file['tmp_name'],$picName)){ echo "移动文件出错!";exit;} 这块 !move 换别的方式试试 还有文件权限查看下 服务器下 新建文件夹 是要给权限的

相似回答