【问题标题】:Illegal offset type非法偏移类型
【发布时间】:2011-01-12 09:45:33
【问题描述】:

我在通过 php 上传文件时遇到问题。我在进程开始时检查文件类型并收到错误消息。

这是我得到的错误:

警告:非法偏移类型 /balblabla/DBfunctions.inc.php 上线 183

这是打印出来的 $_FILES var

数组 ( [图片] => 数组 ( [名称] => JPG.jpg [类型] => 图像/jpeg [tmp_name] => /tmp/phpHlrNY8 [错误] => 0 [大小] => 192221 ) )

这是我正在使用的给我带来问题的代码段:

function checkFile($file, $type)
{
    if( in_array($_FILES[$file]['type'], $type) ){    //   <---  LINE 183
        return true;
    }//if
    return false;
} // end checkFile()

这是调用函数的代码行

if(checkFile($_FILES['Picture'], array("image/jpeg")) == true){
//做事
}// 如果结束

我已经在我自己的服务器上的几十个网站上使用了这段代码,所以我猜这是一些不同的配置选项。我怎样才能修改我的代码以便它在这个不同的服务器上工作?

【问题讨论】:

  • 只是一个小建议,你不必检查这个表达式checkFile(...) == true,只要if (checkFile(...))返回值true,你的做的东西 将被执行

标签: php arrays file-upload


【解决方案1】:

checkFile() 中,将$_FILES[$file] 替换为$file。您正在索引 $_FILES 数组两次。

【讨论】:

    【解决方案2】:

    您将数组,而不是字符串/整数索引传递给您的 checkFile 函数。

    要解决此问题,请进行以下更改之一:

    更改检查文件,使其使用传入的数组进行检查,因此:

    if( in_array($file['type'], $type) )
    

    或者更改调用此函数的代码,使其传递文件名以用作索引而不是文件数组,因此:

    if( checkFile('Picture', array("image/jpeg") ) == true )
    

    任何一种更改都会起作用。

    【讨论】:

      猜你喜欢
      • 2013-03-24
      • 2019-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-21
      • 2019-07-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多