尝试在PHP中上载文件时出错

时间:2009-06-25 11:52:12

标签: php upload file-upload

我是php页面一切正常,直到今天早上。现在页面没有上传任何选定的文件。我一直得到的是以下错误消息:

  

警告:move_uploaded_file(上传/ BrainStream_2009_06_25_23041.zip)[function.move上传文件]:未能打开流:在C无这样的文件或目录:\ XAMPP \ htdocs中\矢量\管理员\上线jobs_edit.php 146

     

警告:move_uploaded_file()以[function.move上传文件]:无法移动 'C:\ Documents和Settings \管理员\本地设置的\ Temp \ php1B2.tmp' 到C '上传/ BrainStream_2009_06_25_23041.zip' :第146行:\ xampp \ htdocs \ vectorization \ admin \ jobs_edit.php   文件无法上传。请选择一个有效的文件。   文件名:BrainStream.zip

我写了以下代码:

$uplfile = $_FILES['uploadfile']['name'];   
$upltmp = $_FILES["uploadfile"]["tmp_name"];
if(!empty($uplfile))
{       
    $ext = explode(".", $uplfile);

    $upload_date = date("Y_m_d"); //use this variable to change file name to avoid conflict with same name files
    $upload_dir = "upload/";

    $file_name=$ext[0]."_".$upload_date."_".rand(0, getrandmax()).".".$ext[1];

    (move_uploaded_file($upltmp,$upload_dir.$file_name))
 }

我的PC上安装了XAMPP堆栈,运行WinXP,有3 GB RAM和足够的硬盘空间。

无论我选择哪种尺寸的文件,它总是会出错。

此代码中有什么问题?

6 个答案:

答案 0 :(得分:2)

最后一行有趣的语法。该错误表明问题出在该行中,并且缺少源文件或目标目录。由于第一个是自动生成的,因此请确保C:\xampp\htdocs\vectorization\admin\upload存在且可写。

答案 1 :(得分:1)

@phihag,

感谢您的提示。研究源代码的新开发人员之一错误地在$ upload_dir变量赋值中删除了(../)。

$upload_dir = "upload/"; //this is wrong

实际上它被设置为

$upload_dir = "../upload/"; //this works but accidentally edited by another developer 

我真是个傻瓜。我无法发现问题。

无论如何,谢谢你帮助解决我的问题。

答案 2 :(得分:0)

看起来你的问题可能是你正在使用正斜杠为你的上传目录,但在Windows上这将是一个反斜杠,你还需要确保上传目录是相对于脚本。如果没有提供完整的路径。

防止斜杠问题的好建议是使用DIRECTORY_SEPARATOR常量

答案 3 :(得分:0)

两件事之一 -

  1. 没有上传目录
  2. 没有文件php1B2.tmp

答案 4 :(得分:0)

这似乎很明显,但一定要仔细检查你的php.ini

file_uploads = On
upload_tmp_dir = "C:\xampp\tmp"
upload_max_filesize = 64M

答案 5 :(得分:0)

对您来说可能有用的是快速检查以确保文件已成功上传,例如

switch ($_FILES["cv"]["error"])
{
    case UPLOAD_ERR_FORM_SIZE:
       // handle error
    case UPLOAD_ERR_INI_SIZE:
       // handle error
    case UPLOAD_ERR_PARTIAL:
       // handle error
    case UPLOAD_ERR_NO_FILE:
       // handle error
    case UPLOAD_ERR_CANT_WRITE:
       // handle error
}

它是处理上传文件时可能遇到的错误的更好方法。