//自动创建文件夹
$file_path="../../img/";
$file_name=date("Ym");
@mkdir($file_path.$file_name,0777);

if($_FILES[uploadpic][name]<>""){
//图片操作 start
global $sAllowSize,$sSaveFileName,$sOriginalFileName;
$sAllowSize = 200;
$uploadDir = "../../img/".$file_name."/";
  if(@is_file($_FILES['uploadpic']['tmp_name'])) {
   $sOriginalFileName = $_FILES['uploadpic']['name'];
    $ExtName           = substr($sOriginalFileName,strrpos($sOriginalFileName,".")+1);
    if(CheckValidExt($ExtName)) {
      if($_FILES['uploadpic']['size'] <= intval($sAllowSize)*1024) {
        $sSaveFileName = GetRndFileName($ExtName);
    $sFileName = $uploadDir. $sSaveFileName;

        if(!@move_uploaded_file($_FILES['uploadpic']['tmp_name'],$sFileName)) {
   OutScript("alert('文件上传失败,原因未知。$sFileName')");
           exit;
   } else {
$newpicname = $file_name."/".$sSaveFileName;
}

   }else {
   OutScript("alert('你上传的文件总大小超出了最大限制($sAllowSize KB)!')");
        exit;
   }
   }else {
   OutScript("alert('请选择有效的上传文件!\\n支持的格式有(.gif .jpg .jpeg)!')");
      exit;
   }
  }else {
   switch($_FILES['uploadpic']['error']) {
   case 1:
       OutScript("alert('你上传的文件总大小超出了php.ini中的最大限制。')");
        break;
      case 2:
       OutScript("alert('你上传的文件总大小超出了最大限制($sAllowSize KB)!')");
       break;
      case 3:
       OutScript("alert('文件只有部分被上传。')");
       break;
      case 4:
       OutScript("alert('没有文件被上传。')");
       break;
   }
    exit;
  }
//图片操作 end
} else {
$newpicname = '';
}
这段程序。我在别的服务器上可以顺利上传图片。
昨天换了台服务器。上传时就出现在文件上传失败,原因未知。../img/201001/20100126082656784.jpg这个判断的是在这。
if(!@move_uploaded_file($_FILES['uploadpic']['tmp_name'],$sFileName)) {
  OutScript("alert('文件上传失败,原因未知。$sFileName')");
  exit;
} else {
  $newpicname = $file_name."/".$sSaveFileName;
}请问哪里出问题?是服务器设了不让写入吗?

解决方案 »

  1.   

    $_FILES['uploadpic']['error'] 中是错误号
      

  2.   

    就是让你看看$_FILES['uploadpic']['error']里面的内容。然后根据其内容顺藤摸瓜,定位问题。
      

  3.   

    $_FILES['uploadpic']['error'] 输出的是0。代表什么??
      

  4.   

    我是说要看一下 $_FILES['uploadpic']['error'] 的内容
    他有7种情况,而你只处理了4种
      

  5.   

    如果你的error确定是0的话, 解决这个问题很简单, 路径错误先在php.ini中查找临时存放文件路径, 再检查此临时文件有没上传到你要上传的文件
    如果这文件存在, 就是你php代码写错了还有个要注意的问题
    $file_path="../../img/";   //要用相对路径, 这样写容易出错, 
                               //例如 $file_path = ROOT_PATH.'/webroot/img/'
                               //ROOT_PATH常量是用dirname()在根目录获得的路径
      

  6.   

    楼上的兄台..ROOT_PATH怎么获得?
    ROOT_PATH=dirname('/');
    这样吗.用这个时间不长.不是很懂!!!
      

  7.   

    有没设置上传临时文件路径?phpinfo();查看一下 upload_max_filesize       200M       200M 
    upload_tmp_dir            C:/php/tmp C:/php/tmp 
      

  8.   

    忘了说了.我FTP目录结构是这样的
      
    /user_abc/web/img/
      

  9.   

    define(ROOT_PATH,'/web/img/');
    $uploadDir = ROOT_PATH.$file_name."/";
    这样写还是一样的错误。。不是写错了。各位大侠。帮一下忙!!
      

  10.   

    换了服务器出现了错误就意味着服务器设置方面的问题了,
    你把前台form也贴出来,最好单独做个页面把链接发过来。
      

  11.   

    $file_path="../../img/";
    要上溯两个父目录?
      

  12.   


    if($_FILES[uploadpic][name]<>""){
    //图片操作 start
    global $sAllowSize,$sSaveFileName,$sOriginalFileName;
    $sAllowSize = 200;
    $uploadDir = "img/movie/".$file_name."/";
      if(@is_file($_FILES['uploadpic']['tmp_name'])) {
       $sOriginalFileName = $_FILES['uploadpic']['name'];
        $ExtName           = substr($sOriginalFileName,strrpos($sOriginalFileName,".")+1);
        if(CheckValidExt($ExtName)) {
          if($_FILES['uploadpic']['size'] <= intval($sAllowSize)*1024) {
            $sSaveFileName = GetRndFileName($ExtName);
        $sFileName = $uploadDir. $sSaveFileName;
            if(!@move_uploaded_file($_FILES['uploadpic']['tmp_name'],$sFileName)) {
       OutScript("alert('文件上传失败,原因未知。$sFileName')");
               exit;
       }else {
    //得到图片名称
    $newpicname = $file_name."/".$sSaveFileName;
    }
       }else {
       OutScript("alert('你上传的文件总大小超出了最大限制($sAllowSize KB)!')");
            exit;
       }
       }else {
       OutScript("alert('请选择有效的上传文件!\\n支持的格式有(.gif .jpg .jpeg)!')");
          exit;
       }
      }else {
       switch($_FILES['uploadpic']['error']) {
       case 1:
           OutScript("alert('你上传的文件总大小超出了php.ini中的最大限制。')");
            break;
          case 2:
           OutScript("alert('你上传的文件总大小超出了最大限制($sAllowSize KB)!')");
           break;
          case 3:
           OutScript("alert('文件只有部分被上传。')");
           break;
          case 4:
           OutScript("alert('没有文件被上传。')");
           break;
       }
        exit;
      }
    //图片操作 end
    } else {
    $newpicname = 'nopic.gif';
    }上面是上传图片的操作,
    测试地址http://www.tanmoo.com/cate.php
      

  13.   

    今天测试了一下,$newpicname得不到上传的文件名.我把sql语句die出来了..大家看一下!