<?php
$upload_file=$_FILES['upload_file']['tmp_name'];
$upload_file_name=$_FILES['upload_file']['name'];
$store_dir = "/data1/test/UploadFile/";// store path
if(!is_dir($store_dir)){ 
echo "Create";
mkdir($store_dir,0777); 
   }
else{
echo "Existed";
}
echo  "<p>The uploaded file name:";
echo $_FILES['upload_file']['name'];
echo "<br>";
//client orinigal file name。 
echo  "MIME Type :";
echo $_FILES['upload_file']['type'];
//MIME Type。 
echo "<br>";
echo  "FileSize:";
echo $_FILES['upload_file']['size'];
echo "<br>";
echo  "Temp Name:";
echo $_FILES['upload_file']['tmp_name'];
echo "<br>";$Erroe=$_FILES['upload_file']['error'];
switch($Erroe){
    case 0:
      Echo  "Success"; break;
    case 1:
      Echo  "More than upload_max_filesize"; break;
    case 2:
      Echo  "More than HTML MAX_FILE_SIZE ";  break;
    case 3:
      Echo  "Upload part";break;
    case 4:
      Echo  "Failed";break;
}
?>
以上就是我写的代码,但是很奇怪的是老是上传不了,我看看发现$_FILES['upload_file']['tmp_name']这个的值都是为空?不知道是什么原因,本人刚开始学习php。着急中,谢谢。

解决方案 »

  1.   

    查看之前的表单文件,注意设置 enctype 的属性,这样$_FILES[ 'upload_file '][ 'tmp_name ']应该就得到值了,如:form action="" method="post" enctype="multipart/form-data">
    <p>Pictures:
    <input type="file" name="pictures[]" />
    <input type="file" name="pictures[]" />
    <input type="file" name="pictures[]" />
    <input type="submit" value="Send" />
    </p>
    </form>还有,注意你以上的代码只是打印出了被上传文件的基本信息,根本没有完成文件的上传,你还需要move_uploaded_file(),具体的自己查看php文档
      

  2.   

    <html><head>
    <title>Upload Demo</title></head> 
    <body> 
    <form enctype="multipart/form-data" action="upload.php" method="post"> 
    Choose Files <br>
    <input name="upload_file" type="file"><br>
    <input type="submit" value="UpLoad"> 
    </form> 
    </body>
    </html>
    前面的表单,enctype="multipart/form-data"我也设置了,
    move_uploaded_file(),这一步也有了,刚发帖的时候被我给弄点了,
    if (!move_uploaded_file($upload_file,$store_dir.$upload_file_name)) {//move file
    echo "fail to move file";
    exit;
    }
      

  3.   

    我个人觉得应该是什么配置有问题,
    要不然 
    $upload_file=$_FILES[ 'upload_file '][ 'tmp_name ']; 
    $upload_file_name=$_FILES[ 'upload_file '][ 'name ']; 
    都是空值,
    是不惜要什么其他的配置?
      

  4.   

    首先确认在文件上传的服务器上,是否有创建以及操作文件的权限
    其次根据你ini文件的设置,找到所谓的temp文件夹,看看文件有否上传到临时文件夹里
    再次,文件上传失败,页面显示什么,有否报出错误如果还是不行,把你的form代码,以及upload代码完整的贴出来,弄掉的给补上~~~~
      

  5.   

    谢谢楼上的 !dreambird1983 
     @首先确认在文件上传的服务器上,是否有创建以及操作文件的权限 
      ---  权限我这边都开了,777的权限,
     @其次根据你ini文件的设置,找到所谓的temp文件夹,看看文件有否上传到临时文件夹里 
      ---  temp文件夹内没有文件,
     @再次,文件上传失败,页面显示什么,有否报出错误 
      ---  没有报错信息,不知道php有没有什么可以catch错误的?我提交后没有错误信息 @如果还是不行,把你的form代码,以及upload代码完整的贴出来,弄掉的给补上~~~~
      ---  好的,非常感谢
     upload.html页面 <html><head>
    <title>Upload Demo</title></head> 
    <body> 
    <form enctype="multipart/form-data" action="upload.php" method="post"> 
    Choose Files <br>
    <input name="upload_file" type="file"><br>
    <input type="submit" value="UpLoad"> 
    </form> 
    </body>
    </html> upload.php页面 <?php
    $upload_file=$_FILES['upload_file']['tmp_name'];
    $upload_file_name=$_FILES['upload_file']['name'];
    $store_dir = "/data1/test/UploadFile/";// store pathif(is_uploaded_file($upload_file)){
    $file_size_max = 1024*1024;// Max_Size By bytes
    $accept_overwrite = true;//be allowed to overwrite
    if ($upload_file_size > $file_size_max) {//check size
    echo "File_Size more than Max_Size";
    exit;
    }

    if (file_exists($store_dir . $upload_file_name) && !$accept_overwrite) {//check file is existed
    Echo  "there is the same files existed";
    exit;
    }

    if (!move_uploaded_file($upload_file,$store_dir.$upload_file_name)) {//move file
    echo "fail to move file";
    exit;
    }
    echo  "<p>The uploaded file name:";
    echo $_FILES['upload_file']['name'];
    //client orinigal file name。 
    echo  "MIME Type :";
    echo $_FILES['upload_file']['type'];
    //MIME Type。 
    echo  "FileSize:";
    echo $_FILES['upload_file']['size'];
    echo  "Temp Name:";
    echo $_FILES['upload_file']['tmp_name']; $Erroe=$_FILES['upload_file']['error'];
    switch($Erroe){
    case 0:
      Echo  "Success"; break;
    case 1:
      Echo  "More than upload_max_filesize"; break;
    case 2:
      Echo  "More than HTML MAX_FILE_SIZE ";  break;
    case 3:
      Echo  "Upload part";break;
    case 4:
      Echo  "Failed";break;
    }
    }
    else{
    echo "no upload";
    }
    ?>麻烦您帮忙看看。非常感激
      

  6.   

    在upload.php的一开始直接echo $_FILES[ 'upload_file '][ 'tmp_name '];如果得不到值,那么请重新检查我所说的1,2,3点,在程序的一开始就得不到值,说明问题不是出现在程序这里,而是出现在配置那里,temp文件夹里既然没有上传的临时文件,upload.php这里肯定得不到值,我感觉问题出在这里。
      

  7.   

    @首先确认在文件上传的服务器上,是否有创建以及操作文件的权限   
        ---     权限我这边都开了,777的权限, 
        两文件夹我都给了777的权限,还要配置什么东西吗 ?
    @其次根据你ini文件的设置,找到所谓的temp文件夹,看看文件有否上传到临时文件夹里   
        ---     temp文件夹内没有文件, 
        这个目录,我设置了权限了,但是我还有点不明白的是这个临时文件是怎么产生的?在post的时候就产生了嘛?
    @再次,文件上传失败,页面显示什么,有否报出错误   
        ---     没有报错信息
      

  8.   

    你的temp目录是哪里呢?看看这几个配置先:; Whether to allow HTTP file uploads.
    file_uploads = On; Temporary directory for HTTP uploaded files (will use system default if not
    ; specified).
    ;upload_tmp_dir =; Maximum allowed size for uploaded files.
    upload_max_filesize = 2M看看有没有做设置。就是你的你的777权限给的是什么文件夹?如果这里没有指定upload_tmp_dir,通常是系统的tmp,linux下通常是 /tmp ,win下通常是c:\windows\temp这类的,看看系统环境变量的设置。
      

  9.   

    我的temp文件放在 UploadFile
    这个是他的权限: drwxrwxrwx  UploadFile;   Whether   to   allow   HTTP   file   uploads. 
    file_uploads   =   On ;   Temporary   directory   for   HTTP   uploaded   files   (will   use   system   default   if   not 
    ;   specified). 
    这个我改成了;upload_tmp_dir   = 
    upload_tmp_dir   = /data1/test/UpLoad/(他的权限:drwxrwxrwx  UploadFile);   Maximum   allowed   size   for   uploaded   files. 
    upload_max_filesize   =   2M 
    多谢各位。小弟还在困惑中,
      

  10.   

    ;;;;;;;;;;;;;;;;
    ; File Uploads ;
    ;;;;;;;;;;;;;;;;; Whether to allow HTTP file uploads.
    file_uploads = On; Temporary directory for HTTP uploaded files (will use system default if not
    ; specified).
    upload_tmp_dir = /data1/test/UploadFile/; Maximum allowed size for uploaded files.
    upload_max_filesize = 8M
      

  11.   

    请问一下,是不是apache也需要设置。
      

  12.   

    dreambird1983 ,谢谢你,我很郁闷,这两个文件我给我的一个同学,他在windows上的apache跑,却是可以正常上传的。
      

  13.   

    我把我同学的php.ini文件拿过来比较了一下,没有什么区别,把他有的,我没有的加了上去,配置好了也还是不行,呜呜
      

  14.   

    用print_r($_FILES);打印出来看看,看是不是该有的都有,如果没有的话就说明配置有问题,如果有的话就说明代码有问题,不同的服务器权限也不一样,move_uploaded_file有些服务器可以用有些不行,但一般用copy好像都行吧,mkdir也是一样,呵呵
      

  15.   

    rokey001 ,好的我试试一下,谢谢,
      

  16.   

    用print_r($_FILES); 
    打印出来的结果: Array ( ) 
      

  17.   

    是个空值,既然是空值,那就是说move_uploaded_file这个函数是肯定不对了。
    现在就是看能不能找到空值的原因
      

  18.   

    <input   name= "upload_file "   type= "file ">换个名字试哈呢?是不是与系统的默认的是不是有同名的?
      

  19.   

    <input   name= "upload_file "   type= "file ">换个名字试哈呢?是不是与系统的默认的有同名的?
      

  20.   

    windows下还是linux下啊?如果是linux下用chown apache.apache /data1/test/UploadFile/ 试试呢?
      

  21.   

    @  --windows下还是linux下啊?如果是linux下用chown   apache.apache   /data1/test/UploadFile/   试试呢   linux下的,chown   apache.apache  /data1/test/UploadFile/
       报 : chown: `apache:apache': invalid user
      

  22.   

    @  --- <input       name=   "upload_file   "       type=   "file   "> 换个名字试哈呢?是不是与系统的默认的有同名的?    改了名字还是不可以。
      

  23.   

    最基本的文件上传:
    第一个页面1.php<html
    <head>
    <title>无标题文档</title>
    </head>
    <body>
    <form name="form1" method="post" action="2.php" enctype="multipart/form-data" >
    <input name="photoname" type="file">
    <input type="submit" name="Submit" value="上传">
    </form>
    </body>
    </html>第二个页面2.php
    <html
    <head>
    <title>无标题文档</title>
    </head>
    <body>
    <?PHP
    $tmp_name=$_FILES['photoname']['name'];   //获取文件名
    if($tmp_name !='')
    {
    $v=copy($_FILES['photoname']['tmp_name'],"D:/AppServ/www/text/".$_FILES['photoname']['name']);  //$_FILES['photoname']['tmp_name']获取文件路径
    if($v==true)
    echo "OK";
    else
    echo "NO";
    }
    ?>
    </body>
    </html>这个是最简单的了,没有增加其它的功能,但我也有一个问题,就是上传的文件可能只在2M以内才能上传,大了就不行了,不知为什么,学php的朋友可以跟我聊聊,我Q是75450644