写了一段简单的服务器端文件上传的处理代码,但是英文名的文件名上传正常,中文名的文件名也不提示错误,但是上传后文件名变为空,比如“文档.doc”,上传后就变成了“.doc”。不知为什么,文件名应该是不能为空的。下面是我写的代码,其中是myfile是客户端上传input的name。<?
$upload_path = $_SERVER['DOCUMENT_ROOT']."/upload";
$dest_file = $upload_path.basename($_FILES['myfile']['name']);if(move_uploaded_file($_FILES['myfile']['tmp_name'].$dest_file))
{
  echo "文件已上传至服务器!";
}
else
{
  echo "发生错误".$_FILES['myfile']['error'];
}
?>

解决方案 »

  1.   

    bool move_uploaded_file ( string $filename , string $destination )本函数检查并确保由 filename 指定的文件是合法的上传文件(即通过 PHP 的 HTTP POST 上传机制所上传的)。如果文件合法,则将其移动为由 destination 指定的文件。我想这个函数缺少一个$destination 的参数传递进去的原因吧.
      

  2.   

    move_uploaded_file($_FILES['myfile']['tmp_name'],$dest_file))对不起,我刚才敲代码弄错了,是逗号的。
      

  3.   

    还有第一行的路径少敲了一个斜杠 $_SERVER['DOCUMENT_ROOT']."/upload/";
      

  4.   

    我也没仔细看 英文是没问题的,这样的话基本可以从编码下手。
    对文件名做一个编码转换$dest_file=iconv('UTF-8','GBK',$dest_file);utf-8 到 gbk  或者 gbk 到 utf-8 自己看看哪个正常吧。
      

  5.   

    直接打印出来,print_r($_FILES['myfile'])
    看下什么情况。
    你说的情况没遇到过。系统是否支持中文也应该在考虑范围内。
      

  6.   

    回复5#朋友,无论是UTF-8到GBK还是GBK到UTF-8都报错,无法上传。
    回复6#朋友,系统是中文的。打印myfile数组name索引的值可以显示中文,打印$_FILES['myfile']['name']也可以正常显示。
      

  7.   

    但是我打印$dest_file变量就不正常,是不是$upload_path.basename()这里出错了?
      

  8.   

    那就是$dest_file 有问题咯,都不能输出的话。 自己改一改吧 不知道哪个变量有问题就把里面的变量一个一个输出看
      

  9.   

    一般是编码问题,转为GBK先处理
      

  10.   

    我估计是这句
    $dest_file = $upload_path.basename($_FILES['myfile']['name']);里面的$_FILES['myfile']['name']需要转一下编码,但是没有进行编码处理。但是我试了UTF-8到GBK和GBK到UTF-8,都不行,GBK到UTF8还显示乱码文件名。。
    我怎么才能知道要从什么编码转到什么编码呀?
      

  11.   

    UTF-8到GBK 中文文件名显示为空,如果有数字和英文就只显示数字和英文
    GBK到UTF-8  显示乱码
      

  12.   

    我解决了,XML第一行编码为gb2312,我改成UTF-8,结果中文就显示正常了。可是我不解,gb2312不就是中文编码吗,为什么不能显示中文???
      

  13.   


    XML就没在gb下好好工作过...