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

尝试在PHP中上载文件时出错,php,upload,file-upload,Php,Upload,File Upload,到今天早上为止,一切都很顺利。现在该页面没有上载任何选定的文件。我一直得到的是以下错误消息: 警告:move_upload_file(upload/BrainStream_2009_06_25_23041.zip)[function.move upload file]:无法打开流:在第146行的C:\xampp\htdocs\vectorization\admin\jobs_edit.php中没有此类文件或目录 警告:move_upload_file()[function.move upload

到今天早上为止,一切都很顺利。现在该页面没有上载任何选定的文件。我一直得到的是以下错误消息:

警告:move_upload_file(upload/BrainStream_2009_06_25_23041.zip)[function.move upload file]:无法打开流:在第146行的C:\xampp\htdocs\vectorization\admin\jobs_edit.php中没有此类文件或目录

警告:move_upload_file()[function.move upload file]:无法将C:\Documents and Settings\Admin\Local Settings\Temp\php1B2.tmp移动到C:\xampp\htdocs\vectorization\Admin\jobs\u edit.php第146行的“upload/BrainStream_2009\u 06_25\u 23041.zip” 无法上载文件。请选择一个有效的文件。 文件名: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))
 }
我在运行WinXP的PC上安装了XAMPP堆栈,它有3 GB RAM和足够的硬盘空间

无论我选择哪个大小的文件,它总是给出错误


这段代码中一定有什么错误?

看起来您的问题可能是您正在对上载目录使用正斜杠,但在windows上这将是反斜杠,您还需要确保上载目录与脚本相关。如果没有,请提供完整路径


防止斜杠问题的一个好技巧是在最后一行中使用目录分隔符常量。该错误表示问题在该行中,并且源文件或目标目录丢失。由于第一个是自动生成的,请确保
C:\xampp\htdocs\vectorization\admin\upload
存在且可写。

以下两件事之一-或

  • 没有上载目录
  • 没有文件php1B2.tmp

  • 这看起来很明显,但一定要仔细检查php.ini

    file_uploads = On upload_tmp_dir = "C:\xampp\tmp" upload_max_filesize = 64M 文件上传=打开 上传\u tmp\u dir=“C:\xampp\tmp” 上载\u最大\u文件大小=64M
    可能对您有用的是快速检查以确保文件已成功上载,例如:

    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
    }
    
    这是处理上传文件时可能遇到的错误的更好方法。

    @phihag

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

    $upload_dir = "upload/"; //this is wrong
    
    实际上它被设定为

    $upload_dir = "../upload/"; //this works but accidentally edited by another developer 
    
    我真是个跛子。我看不出这个问题


    无论如何,感谢once one帮助我解决问题。

    Windows的目录分隔符是\和/,所以这不是问题。一般来说,在php中使用目录分隔符或者只使用/。哦,真的,我从来没有在windows上工作过,但我一直认为使用目录分隔符的原因是为了防止类似的问题。如果没有,那么它的用途是什么?简单说明一下:如果在没有任何参数的情况下调用rand(),它会自动按照您使用它的方式运行。我看到一个安全漏洞:如果有人上载了一个名为“filename.php.jpg”的文件,其中包含一些恶意php代码,该怎么办?使用$ext[count($ext)-1]代替$ext[1]。