未定义索引:文件

问题描述

| 我在上传表单页面中第一次遇到未定义的索引错误,或者如果我移到下一页并单击“后退”按钮,那么我将收到相同的错误消息。 如果我上传文件,则工作正常,错误消息消失。 我也尝试过这个:
global $file;
if (!isset($file)) {
    $file = \'\';
}
这是我的代码
<form id=\"uploadForm\" name=\"upload\" enctype=\"multipart/form-data\"/>
  <fieldset>
    <input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"30000\" />
    <input type=\"file\" name=\"file\" />
<?PHP
echo \'<pre>\';
var_dump($_REQUEST[\'file\']);
echo \'</pre>\';

$uploaded = new upload;
//set Max Size
$uploaded->set_max_size(350000);
//Set Directory
$uploaded->set_directory(\"data\");
//Set Temp Name for upload.
$uploaded->set_tmp_name($_FILES[\'file\'][\'tmp_name\']);
//Set file size
$uploaded->set_file_size($_FILES[\'file\'][\'size\']);
//set file type
$uploaded->set_file_type($_FILES[\'file\'][\'type\']);
//set file name
$uploaded->set_file_name($_FILES[\'file\'][\'name\']);
//start copy process
$uploaded->start_copy();
if($uploaded->is_ok()) 
    echo \" upload is doen.\";
else
    $uploaded->error().\"<br>\";
?>
    <div class=\"filesize\">JPG minimaal 800x60 pixels max. 2Mb</div>
    <a href=\"\" class=\"submit\" title=\"Upload your own phooto\"><span> Upload your own photo </span></a>
upload_inc.PHP
<?
class upload
{
    var $directory_name;
    var $max_filesize;
    var $error;

    var $user_tmp_name;
    var $user_file_name;
    var $user_file_size;
    var $user_file_type;
    var $user_full_name;

    function set_directory($dir_name =\".\")
    {
        $this->directory_name = $dir_name;
    }

    function set_max_size($max_file = 2000000)
    {
        $this->max_filesize = $max_file;
    }

    function error()
    {
        return $this->error;
    }

    function is_ok()
    {
        if(isset($this->error))
            return FALSE;
        else
            return TRUE;
    }

    function set_tmp_name($temp_name)
    {
        $this->user_tmp_name = $temp_name;
    }

    function set_file_size($file_size)
    {
         $this->user_file_size = $file_size;
    }

    function set_file_type($file_type)
    {
        $this->user_file_type = $file_type;
    }

    function set_file_name($file)
    {
        $this->user_file_name = $file;
        $this->user_full_name = $this->directory_name.\"/\".$this->user_file_name;
    }

    function start_copy()
    {
        if(!isset($this->user_file_name))
            $this->error = \"You must define filename!\";
        if ($this->user_file_size <= 0)
            $this->error = \'File size error (0):\' . $this->user_file_size . \'KB <br>\';
        if ($this->user_file_size > $this->max_filesize)
            $this->error = \'File size error (1):\' . $this->user_file_size . \'KB<br>\';
        if($this->user_file_type != \"image/jpeg\")
            $this->error = \"the image must be jpeg extension\";
        if (!isset($this->error))
        {
            $filename = basename($this->user_file_name);
            if (!empty($this->directory_name))
                $destination = $this->user_full_name;
            else
                $destination = $filename;
            if(!is_uploaded_file($this->user_tmp_name))
                $this->error = \"File \" . $this->user_tmp_name . \" is not uploaded correctly.\";
            if (!move_uploaded_file ($this->user_tmp_name,$destination))
                $this->error = \"Impossible to copy \" . $this->user_file_name . \" from your folder to destination directory.\";
        }
    }

}
?>
    

解决方法

“ 3”表示您正在尝试读取不存在的数组元素。 您的特定问题似乎是您正在尝试读取尚不存在的上传数据:当您首次访问上传表单时,没有no4ѭ数组(或者,其中没有任何内容),因为尚未提交表单。但是由于您不检查表单是否已提交,因此以下几行会给您带来一个错误:
//Set Temp Name for upload.
$uploaded->set_tmp_name($_FILES[\'file\'][\'tmp_name\']);
//Set file size
$uploaded->set_file_size($_FILES[\'file\'][\'size\']);
//set file type
$uploaded->set_file_type($_FILES[\'file\'][\'type\']);
//set file name
$uploaded->set_file_name($_FILES[\'file\'][\'name\']);
他们都试图读取
$_FILES[\'file\']
的值,以将其传递给
$uploaded
的方法。 您需要事先进行检查:
if (isset($_FILES[\'file\'])) {
    $uploaded = new upload;
    //set Max Size
    $uploaded->set_max_size(350000);
    //Set Directory
    $uploaded->set_directory(\"data\");
    //Set Temp Name for upload.
    $uploaded->set_tmp_name($_FILES[\'file\'][\'tmp_name\']);
    //Set file size
    $uploaded->set_file_size($_FILES[\'file\'][\'size\']);
    //set file type
    $uploaded->set_file_type($_FILES[\'file\'][\'type\']);
    //set file name
    $uploaded->set_file_name($_FILES[\'file\'][\'name\']);
    //start copy process
    $uploaded->start_copy();
    if($uploaded->is_ok()) 
        echo \" upload is doen.\";
    else
        $uploaded->error().\"<br>\";
}
    ,该错误可能是在您的上传课程中。错误消息非常清楚,如果您得到的是实际消息,则该类中某处可能会在一行中查找名为\'fileUpload \'的数组键I。 只需在您的代码中搜索\'fileUpload \',然后添加一些内容以检查密钥是否已设置,即
 if(isset($arraywhatever[\'fileUpload\'])) condition to your code.