感觉你的总有点儿不对,看看下面的代码和说明吧。
例子 20-1. 文件上传表单<form enctype="multipart/form-data" action="_URL_" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="1000">
Send this file: <input name="userfile" type="file">
<input type="submit" value="Send File">
</form>
 
 
该范例中的 _URL_ 应该指向一个 PHP 文件。 MAX_FILE_SIZE 隐藏字段必须在文件输入字段之前,且其值为接受文件的最大尺寸,单位为字节。 
警告 
MAX_FILE_SIZE 的值只是对浏览器的一个建议,实际上它可以被简单的绕过。因此不要把对浏览器的限制寄希望于该值。实际上,PHP 设置中的上传文件最大值,是不会失效的。 
 
为上传文件定义的变量会根据 PHP 的版本及设置的不同而不同。自动全局变量 $_FILES 从 PHP 4.1.0 版本开始被支持。在这之前,从 4.0.0 版本开始,PHP 支持 $HTTP_POST_FILES 数组。这些数组将包含所有关于您上传的文件的信息,其中,我们推荐您使用 $_FILES。如果 PHP 的设置选项 register_globals 为 on,则相关的变量名将也会存在。从 PHP 4.2.0 版本开始,register_globals 的默认值被设为 off。 以上范例中 $_FILES 数组的内容如下所示。我们假设文件上传字段的名称如上例所示,为 userfile。 
$_FILES['userfile']['name']
客户端机器文件的原名称。 $_FILES['userfile']['type']
文件的 MIME 类型,需要浏览器提供该信息的支持,例如“image/gif”。 $_FILES['userfile']['size']
已上传文件的大小,单位为字节。 $_FILES['userfile']['tmp_name']
文件被上传后在服务端储存的临时文件名。 $_FILES['userfile']['error']
和该文件上传相关的错误代码。['error'] 是在 PHP 4.2.0 版本中增加的。 
注: 在 PHP 4.1.0 版本以前该数组的名称为 $HTTP_POST_FILES,它并不像 $_FILES 一样是自动全局变量。PHP 3 不支持 $HTTP_POST_FILES 数组。例子 20-2. 使文件上传生效以下例程适用于 PHP 4.0.2 以上版本。请参阅函数 is_uploaded_file() 和 move_uploaded_file()。 <?php 
// In PHP earlier then 4.1.0, $HTTP_POST_FILES  should be used instead of $_FILES.
if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
    copy($_FILES['userfile']['tmp_name'], "/place/to/put/uploaded/file");
} else {
    echo "Possible file upload attack. Filename: " . $_FILES['userfile']['name'];
}
/* ...or... */
move_uploaded_file($_FILES['userfile']['tmp_name'], "/place/to/put/uploaded/file");
?>
 
 
接受上传文件的 PHP 脚本必须在文件上传后进行判断,来决定接下来要对该文件进行那些操作。例如,您可以通过 $_FILES['userfile']['size'] 变量来忽略尺寸太大或太小的文件,也可以通过 $_FILES['userfile']['type'] 变量来过滤文件类型和某种标准不相符合的文件。在 PHP 4.2.0 以上版本,您还可以通过 $_FILES['userfile']['error'] 变量来根据不同的错误代码来做相关的判断。不管做何种的判断,您必须将该文件从临时目录中删除,要么将其移动到其它的地方。 如果该文件没有被移动到其它地方也没有被改名,则该文件将在表单请求结束时被删除。 

解决方案 »

  1. kingerq(多菜鸟)老兄,多谢你第一个回复我的问题,我后来想了想,感觉还是用那种可以直接上载图片及文字的组件方便一些,就是在表单里面直接把图像和文字提交上去,不知老兄能否推荐一个php下的这种组件?
      

  2. 看看我的
    upload.php文件,代码如下:
    --------------
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>无标题文档</title>
    </head><body>
    <table width="300" border="0" align="center" cellpadding="0" cellspacing="0">
    <form action="doupload.php" method="post" enctype="multipart/form-data">
      <tr>
        <td width="139">选择要上传的文件:</td>
        <td width="161"><!--<INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="10">--><input name="myfile" type="file" id="myfile"></td>
      </tr>
      <tr>
        <td>&nbsp;</td>
        <td><input type="submit" name="Submit" value="上传"></td>
      </tr>
      <tr>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
      </tr>
      </form>
    </table>
    </body>
    </html>
    --------------doupload.php文件:代码如下
    ---------------
    <?php 
    /* $cn=@mysql_connect('localhost','root','')
        or die("不能连接数据库服务器"); */
    ?>
    <?php 
    If($myfile_size>100000000){//限制上传文件大小
    echo "失败";
    exit;
    }
    ?>
    <?php 
    If($myfile != "none") {
    $myfile_name=time();
    copy($myfile,"myfile/$myfile_name");
    unlink($myfile);
    echo "上传成功!";
    echo "<br>你上传的文件大小".$myfile_size."k";
    echo "<br>你上传的文件名:".$myfile_name;
    }
    else {
    echo"你没有上传任何文件";
    }
    ?>
    ---------------------
    应该行,建一个myfile文件夹
      

  3. 但是我的机器上调试时有以下错误:
    Warning: unlink() [function.unlink]: Permission denied in E:\renshichu\upload.php on line 54上传成功!
    你上传的文件大小k
    你上传的文件名:1073359681我的操作系统是winxp,文件夹myfile的属性没法设置成完全控制
      

  4. 你将$myfile_name=time();去掉把copy($myfile,"myfile/$myfile_name");改为:copy($myfile,"/myfile".'/'.$myfile_name);就可以了,WINXP下也一定没有问题。努力
      

  5. playboylee(lee) 老兄,我照你说的做了,但是还是有这样的错误:Warning: unlink() [function.unlink]: Permission denied in E:\renshichu\upload.php on line 55
    上传成功!
    你上传的文件大小k
    你上传的文件名:就连文件名都没有得到,郁闷ing!
      

  6. 你的权限设置不对~~~你是用IIS呢?还是APACHE~~~
    如果IIS的话你将你那个目录的IIS用户权限设置为可写~~~就可以了~~~权限设置方法是打开文件夹属性-》安全设置就可以了~~~~
      

  7. mikespook(Mike大懒猫)我用的是apache
      

  8. 你在c盘下建个dd目录
    把上面的程序改一下:
    //改doupload.php为--
    <?php 
    If($myfile_size>100000000){
    echo "too big";
    exit;
    }
    ?>
    <?php 
    If($myfile != "none") {
    $myfile_name=$_FILES['myfile']['name'];
    copy($myfile,"C:\\dd\\".$myfile_name);
    unlink($myfile);
    echo "done!";
    echo "<br/>file size:".$myfile_size."字节";
    echo "<br/>file name:".$myfile_name;
    }
    else {
    echo"fail";
    }
    ?>
    看看行不行
      

类似问题 »