尝试在PHP中上载文件时出错
到今天早上为止,一切都很顺利。现在该页面没有上载任何选定的文件。我一直得到的是以下错误消息: 警告: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 我编写了以下代码:尝试在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
$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
存在且可写。以下两件事之一-或
这看起来很明显,但一定要仔细检查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]。