php文件上传错误代码
Warning: date(): 这个需要代码中设置时区
date_default_timezone_set("PRC")
Warning: mkdir(): 文件已经存在了 使用:
file_exists()
Notice: Undefined variable: FILES 全局的文件变量写错了:
$_FILES
Warning: move_uploaded_file(): The second argument to () function cannot be a directory 不能是个目录,需要是个文件
⑵ php 图片上传move_uploaded_file 出错
上传文件不存在。很可能是PHP临时文件夹不存在导致的。
<?php
/*
* 文件上传类
*/
class Uploads{
//上传文件
private $uploadFile;
//上传文件扩展名
private $ext = array('jpeg','jpg','gif','png');
//上传文件大小
private $size = 5000000;
//上传文件目录
private $uploadDir = './uploads/';
//是否自定义名称,默认FALSE
private $newName = '';
//上传文件是否可读,默认为TRUE
private $isRead = TRUE;
//上传文件是否可写,默认为TRUE
private $isWrite = TRUE;
//上传信息
private $info;
/*
* 文件上传类初始化
*/
public function __construct($newName='',$ext='',$size='',$dir='',$isRead=TRUE,$isWrite=TRUE){
$this->ext = empty($ext)?$this->ext:$ext;
$this->size = empty($size)?$this->size:$size;
$this->dir = empty($dir)?$this->uploadDir:$dir;
$this->newName = $newName;
$this->isRead = $isRead?TRUE:FALSE;
$this->isWrite = $isWrite?TRUE:FALSE;
}
/*
* 处理上传文件
*/
public function doUpload(){
$this->checkData();
$this->checkFile() or $this->error();
$this->checkExt() or $this->error();
$this->checkSize() or $this->error();
$this->checkError() or $this->error();
$this->checkDir() or $this->error();
$this->upload() or $this->error();
return $this->info['msg'];
}
/*
* 处理上传文件数据
*/
public function checkData(){
$num = 0;
$newArr = array();
foreach($_FILES as $v){
if(is_array($v['name'])){
$count = count($v['name']);
for($i=0; $i<$count; $i++){
foreach($v as $m=>$n){
$newArr[$num][$m] = $n[$i];
}
$num++;
}
}else{
$newArr[$num] = $v;
$num++;
}
}
$endArr = array();
foreach($newArr as $v){
if($v['name'] != ''){
$endArr[]=$v;
}
}
$this->uploadFile = $endArr;
}
/*
* 检测上传文件是否存在
*/
private function checkFile(){
if(empty($this->uploadFile)){
$this->info['error'] = '上传文件不得为空!!!';
return FALSE;
}
return TRUE;
}
/*
* 检测上传文件类型是否合法
*/
private function checkExt(){
if(!is_array($this->ext)){
$this->ext = explode(',', $this->ext);
}
foreach($this->uploadFile as $v){
$ext = strtolower(substr(strrchr(basename($v['name']),'.'),1));
if(!in_array($ext,$this->ext)){
$this->info['error'] = '上传文件类型非法,禁止上传!!!';
return FALSE;
}
}
return TRUE;
}
/*
* 检测上传文件大小
*/
private function checkSize(){
foreach($this->uploadFile as $v){
if($v['size']>$this->size){
$this->info['error'] = '上传文件体积过大,上传失败!!!';
return FALSE;
}
}
return TRUE;
}
/*
* 检测文件上传错误代码
*/
private function checkError(){
foreach($this->uploadFile as $v){
switch($v['error']){
case 0:
return TRUE;
break;
case 1:
$this->info['error'] = '上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值,上传失败!!!';
return FALSE;
break;
case 2:
$this->info['error'] = '上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值,上传失败!!!';
return FALSE;
break;
case 3:
$this->info['error'] = '文件只有部分被上传!!!';
return FALSE;
break;
case 4:
$this->info['error'] = '没有文件上传!!!';
return FALSE;
break;
}
}
return TRUE;
}
/*
* 检测上传文件夹是否存在
*/
private function checkDir(){
if(!file_exists($this->uploadDir)){
mkdir($this->uploadDir,0777,true);
}
if(!is_writeable($this->uploadDir)){
$this->info['error'] = '上传目录没有写入权限,上传失败!!!';
return FALSE;
}
return TRUE;
}
/*
* 上传文件
*/
private function upload(){
date_default_timezone_set('PRC');
//检测文件是否自定义名称
$name = empty($this->newName)?date('Ymd_His'):$this->newName;
foreach($this->uploadFile as $k=>$v){
$upload_path = $this->uploadDir.$name.'_'.($k+1).strrchr(basename($v['name']),'.');
$upload_path = iconv('UTF-8','gbk',$upload_path);
if(is_uploaded_file($v['tmp_name'])){
if(move_uploaded_file($v['tmp_name'], $upload_path)){
if($this->isRead && $this->isWrite){
chmod($upload_path,0777);
}else if($this->isRead && !$this->isWrite){
chmod($upload_path,0444);
}else if(!$this->isRead && $this->isWrite){
chmod($upload_path,0222);
}else{
chmod($upload_path,0000);
}
$this->info['msg']=array('type'=>1,'success'=>'文件上传成功','path'=>iconv('gbk','UTF-8',$upload_path));
}else{
$this->info['error'] = '文件上传失败!!!';
return FALSE;
}
}
}
return TRUE;
}
/*
* 上传成功的方法
*/
public function success(){
echo $this->info['msg']['success'];
}
/*
* 上传文件错误方法
*/
public function error(){
echo $this->info['error'];
die;
}
这是我写的PHP类,你可以参考一下。有什么特殊需要的,你可以告诉我一下,完善一下上传类。
⑶ 请问一下以下PHP上传文件代码是什么意思,有一小部分搞不懂
files的变量的用法
$_FILES超级全局变量很特殊,他是预定义超级全局数组中唯一的二维数组。其作用是存储各种与上传文件有关的信息,这些信息对于通过PHP脚本上传到服务器的文件至关重要。此函数中总共有5项:
1.$_FILES["userfile"]["error"]
$_FILES["userfile"]["error"]数组值提供了与上传尝试结果有关的重要信息。总共有5个不同的返回值,其中一个表示成功的结果,另外4个表示在尝试中出现的特殊错误。灭个返回值的名字和将在后面介绍。
2.$_FILES["userfile"]["name"]
$_FILES["userfile"]["name"]变量指定客户端机器上声明的文件最初的名字,包括扩展名。因此,如果浏览器一个名为vacation.jpg的文件,并通过表单上传,则此变量的值将是vacation.png。
3.$_FILES["userfile"]["size"]
$_FILES["userfile"]["size"]变量指定从客户端上传的文件的大小,以字节为单位。因此,在vacation.jpg文件的例子中,此函数可能赋值为5253,大约为5kb.
4. $_FILES["userfile"]["tmp_name"]
$_FILES["userfile"]["tmp_name"]变量指定上传到服务器后为文件赋予的临时名。这是存储在临时目录(由PHP指令upload_tmp_dir指定)中时所指定的文件名。
5. $_FILES["userfile"]["type"]
$_FILES["userfile"]["type"]变量指定从客户端上传的文件的mime类型。因此,在vacation.jpg文件的例子中,此变量会赋值为image/jpeg。如果上传的是PDF,则赋值为application/pdf。因为这个变量有时会得到意外的结果,所以应当在脚本中显示地进行验证。
$_FILES['myFile']['error'] 和该文件上传相关的错误代码。['error'] 是在 PHP 4.2.0 版本中增加的。下面是它的说明:(它们在PHP3.0以后成了常量)
⑷ php上传文件错误怎么解决
<html>
<body>
<form enctype="multipart/form-data" action="upload.php" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="1000000" />
Choose a file to upload: <input name="uploaded_file" type="file" />
<input type="submit" value="Upload" />
</form>
</body>
</html>
有一些规则需要建设时遵循HTML表单。首先,请确保该窗体使用POST方法。第二,形
式需要以下属性:字符编码=“多重/表单数据”。它指定的内容类型时使用的信息提
交给服务器。如果没有这些要求,您的文件上传不了。
另一个需要注意的是隐藏的表单字段名为MAX_FILE_SIZE设置的值。某些Web浏览器实
际上反映了这个领域,也不会允许用户上载文件超过这个数字(字节)更大。您应该
将此值设置为配合最大上传大小,在php.ini文件中设置。这是一套与中
upload_max_filesize,默认值是2MB的。但它仍然不能保证你的脚本将不会转交了尺
寸较大的文件。危险的是,攻击者将尝试向您发送一个请求几个大文件,并填写了文
件系统,也就是PHP存储解码文件。设置在php.ini的post_max_size的指令文件的最大
尺寸,你要(必须大于中upload_max_filesize)。默认值为10MB的。此指令控制的所
有要求,在一个允许的POST数据最大大小。另外,还要确保在你的php.ini文件
file_uploads设置为On。
至少,有一个在输入标记属性看:类型=“文件”。它是用来指定为文件选择控制输入
元素。这提供了一个文件的URI的地方,则需要键入一个“浏览”按钮,可作为替代的
URI输入使用。
在用户进入一个文件的URI,并点击提交按钮的文件的副本将被发送到服务器和用户将
被重定向到upload.php。此PHP文件将处理表单数据。
返回页首
处理表单数据(PHP代码)
当文件被上传和PHP创建了一个文件的临时副本,并建立了超全局变量$ _FILES数组,
包含有关文件的信息。对于每个文件,有5个数据。我们已上传字段命名
为'uploaded_file',所以会存在以下数据:
变量$ _FILES [“uploaded_file”] [“name”]从用户的机器上载的文件的原名称
变量$ _FILES [“uploaded_file”] [“type”]的上传文件的MIME类型(如果浏览器
提供的类型)
变量$ _FILES [“uploaded_file”] [“size”]的以字节为单位上传的文件大小
变量$ _FILES [“uploaded_file”] [“tmp_name”],在该文件暂时存储在服务器上
的位置
变量$ _FILES [“uploaded_file”] [“error”]错误代码从文件上传结果
下面的例子接受一个上传的文件并保存在上载目录中。它允许根据350Kb上传只有JPEG
图像。该代码本身,是相当清楚的,但我们会作出一些解释。有一个例子在外观和保
存此为upload.php PHP代码。
<?php
//Сheck that we have a file
if((!empty($_FILES["uploaded_file"])) && ($_FILES['uploaded_file']['error']
== 0)) {
//Check if the file is JPEG image and it's size is less than 350Kb
$filename = basename($_FILES['uploaded_file']['name']);
$ext = substr($filename, strrpos($filename, '.') + 1);
if (($ext == "jpg") && ($_FILES["uploaded_file"]["type"] == "image/jpeg")
&&
($_FILES["uploaded_file"]["size"] < 350000)) {
//Determine the path to which we want to save this file
$newname = dirname(__FILE__).'/upload/'.$filename;
//Check if the file with the same name is already exists on the
server
if (!file_exists($newname)) {
//Attempt to move the uploaded file to it's new place
if ((move_uploaded_file($_FILES['uploaded_file']
['tmp_name'],$newname))) {
echo "It's done! The file has been saved as: ".$newname;
} else {
echo "Error: A problem occurred ring file upload!";
}
} else {
echo "Error: File ".$_FILES["uploaded_file"]["name"]." already
exists";
}
} else {
echo "Error: Only .jpg images under 350Kb are accepted for upload";
}
} else {
echo "Error: No file uploaded";
}
?>
在此之前的上载您需要的文件,以确定文件是否真的上传任何东西。之后我们检查上
传的文件,JPEG图像,其大小小于350Kb的。接下来,我们确定的道路,这是我们要保
存此文件,并检查是否已经存在一个服务器上的这些文件的名称。当所有检查通过,
我们将文件复制到一个永久的位置使用move_upload_file()函数。此功能也证实该
文件你要过程,是一个合法的文件从用户上传结果。如果该文件上传成功,那么相应
的消息将出现。
注意:要确保PHP已经允许读取和写入临时文件中保存的位置是您要复制文件的目录。
这个例子其实很简单,它的提出是为了演示如何使用PHP上传文件。例如,您可以添加
新的条件,并允许上传GIF和PNG图像,或任何文件,您需要其他种类。如果您是本教
程使用PHP不熟悉可能是一个很好的起点。
⑸ php 上传文件格式判断出错
是你判断文件类型的时候错了,因为文件MIME类型不是文件的后缀。如图:希望对你有帮助
常见的MIME类型
超文本标记语言文本 .html,.html text/html
普通文本 .txt text/plain
RTF文本 .rtf application/rtf
GIF图形 .gif image/gif
JPEG图形 .ipeg,.jpg image/jpeg
au声音文件 .au audio/basic
MIDI音乐文件 mid,.midi audio/midi,audio/x-midi
RealAudio音乐文件 .ra, .ram audio/x-pn-realaudio
MPEG文件 .mpg,.mpeg video/mpeg
AVI文件 .avi video/x-msvideo
GZIP文件 .gz application/x-gzip
TAR文件 .tar application/x-tar
⑹ php文件上传,提示移动文件失败
php文件上传,提示移动文件失败,基本是上传保存的目录不可写造成的,需要好好设置一下,下面是一个PHP文件上传的简单例子,仅作参考:
<formaction=""enctype="multipart/form-data"method="post"
name="uploadfile">上传文件:<inputtype="file"name="upfile"/><br>
<inputtype="submit"value="上传"/></form>
<?php
//print_r($_FILES["upfile"]);
if(is_uploaded_file($_FILES['upfile']['tmp_name'])){
$upfile=$_FILES["upfile"];
//获取数组里面的值
$name=$upfile["name"];//上传文件的文件名
$type=$upfile["type"];//上传文件的类型
$size=$upfile["size"];//上传文件的大小
$tmp_name=$upfile["tmp_name"];//上传文件的临时存放路径
//判断是否为图片
switch($type){
case'image/pjpeg':$okType=true;
break;
case'image/jpeg':$okType=true;
break;
case'image/gif':$okType=true;
break;
case'image/png':$okType=true;
break;
}
if($okType){
/**
*0:文件上传成功<br/>
*1:超过了文件大小,在php.ini文件中设置<br/>
*2:超过了文件的大小MAX_FILE_SIZE选项指定的值<br/>
*3:文件只有部分被上传<br/>
*4:没有文件被上传<br/>
*5:上传文件大小为0
*/
$error=$upfile["error"];//上传后系统返回的值
echo"================<br/>";
echo"上传文件名称是:".$name."<br/>";
echo"上传文件类型是:".$type."<br/>";
echo"上传文件大小是:".$size."<br/>";
echo"上传后系统返回的值是:".$error."<br/>";
echo"上传文件的临时存放路径是:".$tmp_name."<br/>";
echo"开始移动上传文件<br/>";
//把上传的临时文件移动到up目录下面
move_uploaded_file($tmp_name,'up/'.$name);
$destination="up/".$name;
echo"================<br/>";
echo"上传信息:<br/>";
if($error==0){
echo"文件上传成功啦!";
echo"<br>图片预览:<br>";
echo"<imgsrc=".$destination.">";
//echo"alt="图片预览: 文件名:".$destination." 上传时间:">";
}elseif($error==1){
echo"超过了文件大小,在php.ini文件中设置";
}elseif($error==2){
echo"超过了文件的大小MAX_FILE_SIZE选项指定的值";
}elseif($error==3){
echo"文件只有部分被上传";
}elseif($error==4){
echo"没有文件被上传";
}else{
echo"上传文件大小为0";
}
}else{
echo"请上传jpg,gif,png等格式的图片!";
}
}
?>
⑺ php写了个上传文件的代码,报如下错误:Notice: Undefined variable: FILES in D:哪位大神帮我看下
$hz=array_pop(explode(".",$FILES['myfile']['name'])); //这里$FILES['myfile']['name']
$FILES['myfile']['name'] 这种表示是一个php的二维数组 没有这个数组当然就报错啦 码代码注意下就好了
⑻ 我的php代码关于上传文件不太会
$filename=$_FILES['upfile']['tmp_name'];//要用tmp_name
$_FILES超全局变量的元素内容有:
$_FILES['file']['name']客户端文件的原名称。
$_FILES['file']['type']文件的MIME类型,需要浏览器提供该信息的支持,例如"image/gif"。
$_FILES['file']['size']已上传文件的大小,单位为字节。
$_FILES['file']['tmp_name']文件被上传后在服务端储存的临时文件名,一般是系统默认。
可以在php.ini的upload_tmp_dir指定,但用putenv()函数设置是不起作用的。
$_FILES['file']['error']该文件上传相关的错误代码
值:0;没有错误发生,文件上传成功。
值:1;上传的文件超过了php.ini中upload_max_filesize选项限制的值。
值:2;上传文件的大小超过了HTML表单中MAX_FILE_SIZE选项指定的值。
值:3;文件只有部分被上传。
值:4;没有文件被上传。
值:5;上传文件大小为0.
⑼ PHP上传文件在自己电脑上报错undefined index,但换到别人电脑上运行正常。请问是怎么回事呢
这个是notice提示,不是报错,这是因为你电脑的php.ini设置的是页面返回全部错误,具体到产生你这个问题的原因,是因为你这个页面在某种情况下(对于你这个写法,就是在提交上传的文件前),myfile这个索引并不存在,解决这个问题的方法有很多种,一个是可以修改php.ini使得提示级别的错误不予返回(将php.ini中的error_reporting = E_ALL & ~E_NOTICE设置成这样),或者在这行代码前加个@符等等,方法有很多的
⑽ php不能上传文件,[error] => 2
从 PHP 4.2.0 开始,PHP 将随文件信息数组一起返回一个对应的错误代码。该代码可以在文件上传时生成的文件数组中的 ['error'] 字段中被找到,也就是 $_FILES['userfile']['error']。
UPLOAD_ERR_OK
值:0; 没有错误发生,文件上传成功。
UPLOAD_ERR_INI_SIZE
值:1; 上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
UPLOAD_ERR_FORM_SIZE
值:2; 上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。
UPLOAD_ERR_PARTIAL
值:3; 文件只有部分被上传。
UPLOAD_ERR_NO_FILE
值:4; 没有文件被上传。
注: 这些在 PHP 4.3.0 之后变成了 PHP 常量。
************************************************************************************************************************************
按这上面说的你上传的文件太大了.所以你在程序里最好加个对$_FILES['userfile']['error']的判断然后给操作者一个提示.还有最好也对文件的类型进行限制,要不然也对服务器造成不必要的麻烦上传的文件类型在$_FILES['userfile']['type']里.
************************************************************************************************************************************