Chinaunix首页 | 论坛 | 博客
  • 博客访问: 43078
  • 博文数量: 14
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 170
  • 用 户 组: 普通用户
  • 注册时间: 2014-12-04 22:19
个人简介

Take notes for our web server

文章分类

全部博文(14)

分类: PHP

2015-01-05 01:14:11

系统架构:centos6.5+nginx+php+mysql
问题由来:最近使用PHP文件上传,提示错误0,但是move_uploaded_file()函数总是返回false,于是各种各种怀疑,下面分析一下我的怀疑过程。
1.由于去临时文件的目录去查临时文件是不存在的,故怀疑文件没有上传成功(虽然错误号是0)。
2.首先我怀疑是nginx缺少nginx_upload_module模块,想去安装发现nginx1.3.8以后已经不支持这个模块里,就感觉nginx已经不需要这个里,后来被人告知这个确实是不需要。
3.怀疑配置出里问题,就一顿去查nginx.conf,php.ini,php-ftm等配置,发现也没有问题
4.经过上面的排查感觉已经绝望里...后来偶然发现一个类似的问题,才知道问题所在。
/*这是我原来的代码*/
print_r($_FILES['myfile']);
$file_name=$_FILES['myfile']['name'];
//$file_type=$_FILES['myfile']['type'];
$file_tmp_name=$_FILES['myfile']['tmp_name'];
//$file_error=$_FILES['myfile']['error'];
//$file_size=$_FILES['myfile']['size'];
move_uploaded_file($file_tmp_name,"upload/".$file_name) or die('文件传输错误!');

/*这是我看人家的代码*/
print_r($_FILES['myfile']);
$file_name=$_FILES['myfile']['name'];
//$file_type=$_FILES['myfile']['type'];
$file_tmp_name=$_FILES['myfile']['tmp_name'];
//$file_error=$_FILES['myfile']['error'];
//$file_size=$_FILES['myfile']['size'];
if(is_uploaded_file($file_tmp_name)){
    if (file_exists($file_name)){
        echo "file exist";
    }else {
        if(move_uploaded_file($file_tmp_name,"upload/".$file_name)){
            echo "move success";
        }else {
            echo "move error";
        }
    }
}  else {
    echo "No file is uploaded";
}

很明显人家的代码更有排错能力!!!这时才知道临时文件是存在的,上网一查,原来临时文件在脚本执行完就会自动删除,所以我到文件夹去查看临时文件却看不到。
于是乎,明显想到是move_uploaded_file()函数权限出了问题,在如果在只在临时文件的文件夹下转到临时文件的文件夹就可以上传成功,这点直接证明的了是权限的问题,如果处理这个权限问题呢?
那就是把你要移动到的那个文件夹权限改成777就ok了!

教训总结:
1.先不要怀疑系统的函数,变量出里问题,这点可能行太低了,要先从自己的代码找问题!!!
2.要学会用代码的方式验证自己错误在哪里,看看人家的,再看看自己的就感觉丢人!!!
阅读(1605) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~