找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2533|回复: 3

php上传文件失败问题

[复制链接]
发表于 2013-11-27 10:04:46 | 显示全部楼层 |阅读模式 来自 中国–广东–深圳
昨天试了一下通过php脚本上传文件的例子,代码如下:  
<?
  $file_path = "upload/";
  $file_name = $_FILES["upfile"];  
  //上传目录,不存在就
  if(!is_dir($file_path))
  {
    mkdir($file_path, 0666);                   
  }

  if(!empty($_FILES))
  {
          echo "上传文件 ".$file_name["name"]." 大小 ".$file_name["size"]."<br>";

          if($file_name["size"] > 2097152)
          {
                  exit("文件大小超过了2M."."<br>");
          }
         
          if($file_name["error"] > 0)
          {
                  exit("文件上传发生错误:".$file_name["error"]."<br>");
          }

          echo "上传临时文件为:".$file_name["tmp_name"]."<br>";
             
    $tmp_arr = explode(".", $file_name["name"]);   
    $file_ext = array_pop($tmp_arr);
    $file_ext = trim($file_ext);
    $file_ext = strtolower($file_ext);      
    $new_file = time().".$file_ext";

    if (is_uploaded_file($file_name["tmp_name"]))
    {
            echo $file_name["tmp_name"]." 为通过http post 上传文件.<br>";
    }
    else
    {
            echo("不允许上传文件.<br>");
            switch($file_name["error"])
            {
                    case 0://no error; possible file attack!
                            echo "there is a problem with your upload.<br>";
                            break;
                    case 1://uploaded file exceeds the upload_max_filesize directive in php.ini
                            echo "the file you try to upload is too big.<br>";
                            break;
                    case 2://uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the html form
                            echo "the file you try to upload is too big.<br>";
                            break;
                    case 3://uploaded file was only partially uploaded
                            echo "the file you try to upload was only partially uploaded.<br>";
                            break;
            case 4: //no file was uploaded
                echo "you must select an image for upload.";
                break;
                        default: //a default error, just in case!  :)
                            echo "there was a problem with your upload.";
                            break;               
            }
            exit;
    }

    if(move_uploaded_file($file_name["tmp_name"], $file_path.$file_name["name"]))
    //if(copy($file_name["tmp_name"], $file_path.$new_file))
    {
            echo "移动文件".$file_name["tmp_name"]."成功.<br>";
    }
    else
    {
            echo "移动文件 ".$file_name["tmp_name"]." 失败. 错误码 : ".$file_name["error"]."<br>";
    }



    exit;
  }
  else
  {
            echo "无正确的文件上传.<br>";
  }
?>
输出结果:

上传文件 1.jpg 大小 213734
上传临时文件为:/tmp/phpo5UTjq
/tmp/phpo5UTjq 为通过http post 上传文件.
移动文件 /tmp/phpo5UTjq 失败. 错误码 : 0

经过几次尝试后,把mkdir时目录权限修改为766就可以正常移动文件,如下:
mkdir($file_path, 0766);
可是理解起来有点怪,要往一个目录移动文件,应该只要有写权限就可以了,为什么还要执行权限呢?

发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;

如何回报帮助你解决问题的坛友,好办法就是点击帖子下方的评分按钮给对方加【金币】不会扣除自己的积分,做一个热心并受欢迎的人!

 楼主| 发表于 2013-11-27 10:21:56 | 显示全部楼层 来自 中国–广东–深圳



补了一下关于目录可执行权限的知识点,参见一下链接:
http://www.cnblogs.com/frydsh/archive/2013/01/15/2862066.html
目录的可执行权限表示是否可以列出目录下文件列表的权限,链接文章中说的stat()系统调用需要的权限。所以创建一个目录后,至少所有者应该要有可执行权限,否则对这个目录连cd命令都用不了。
如下:
drw-rw-rw-  7 someone users      4096 2013-10-15 20:27 test
someone@Server:~> cd test/
-bash: cd: test/: Permission denied

发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;

如何回报帮助你解决问题的坛友,好办法就是点击帖子下方的评分按钮给对方加【金币】不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

发表于 2013-11-27 14:15:35 | 显示全部楼层 来自 中国–河南–新乡



可能是执行写入的时候要先查询是否有同名文件吧

具体的不清楚,姑且这么理解吧;这种专业性的问题  需要向专业人士求助了

发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;

如何回报帮助你解决问题的坛友,好办法就是点击帖子下方的评分按钮给对方加【金币】不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-28 16:49:05 | 显示全部楼层 来自 中国–广东–深圳
天外飘仙 发表于 2013-11-27 14:15
可能是执行写入的时候要先查询是否有同名文件吧

具体的不清楚,姑且这么理解吧;这种专业性的问题   ...

是的 移动文件的时候应该要判断目标目录下是否有同名文件的。


发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;

如何回报帮助你解决问题的坛友,好办法就是点击帖子下方的评分按钮给对方加【金币】不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 需要先绑定手机号

关闭

站长推荐上一条 /1 下一条

QQ|侵权投诉|广告报价|手机版|小黑屋|西部数码代理|飘仙建站论坛 ( 豫ICP备2022021143号-1 )

GMT+8, 2024-11-21 20:44 , Processed in 0.043344 second(s), 8 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表