获取错误未初始化的字符串偏移量:在PHP中为0

时间:2014-04-10 12:44:27

标签: php arrays

$imageTypes = array("image/gif", "image/jpeg", "image/png","image/jpg");
$uploadData = array_shift($check);

print_r($uploadData)

    Array
    (
        [name] => Chrysanthemum.jpg
        [type] => image/jpeg
        [tmp_name] => C:\xampp\tmp\phpAADE.tmp
        [error] => 0
        [size] => 879394
    )



if(!in_array($uploadData['type'],$imageTypes)){
return false;
}

但是我收到错误未初始化的字符串偏移量:0在这下面的行

if(!in_array($uploadData['type'],$imageTypes)){

2 个答案:

答案 0 :(得分:0)

在您的代码上,$ check未定义。

$imageTypes = array("image/gif", "image/jpeg", "image/png","image/jpg");

$uploadData = array_shift($check);

if(!in_array($uploadData['type'],$imageTypes)){
    return false;
}

也许你必须解决:

$imageTypes = array("image/gif", "image/jpeg", "image/png","image/jpg");

$uploadData = array_shift($imageTypes);

if(!in_array($uploadData['type'],$imageTypes)){
    return false;
}

答案 1 :(得分:0)

我想我明白这里可能会发生什么。 array_shift()数组中$check的值可能是空字符串。请考虑以下示例:

$imageTypes = array("image/gif", "image/jpeg", "image/png","image/jpg");
$check = array(
    '' // empty string
);

$uploadData = array_shift($check);
var_dump(in_array($uploadData['type'], $imageTypes));

这引发了以下警告/通知:

  

PHP警告:非法字符串偏移'类型'在/Users/darragh/Sites/so.php第26行   PHP堆栈跟踪:   PHP 1. {main}()/Users/darragh/Sites/so.php:0   PHP注意:未初始化的字符串偏移:第26行的/Users/darragh/Sites/so.php中为0   PHP堆栈跟踪:   PHP 1. {main}()/Users/darragh/Sites/so.php:0

     

警告:非法字符串偏移'类型'在/Users/darragh/Sites/so.php第26行

     

调用堆栈:       0.0002 227040 1. {main}()/Users/darragh/Sites/so.php:0

     

注意:未初始化的字符串偏移量:在第26行的/Users/darragh/Sites/so.php中为0

     

调用堆栈:       0.0002 227040 1. {main}()/Users/darragh/Sites/so.php:0

     

布尔(假)

示例:https://eval.in/134971

请注意,您的通知PHP Notice: Uninitialized string offset: 0就在那里。

无论哪种方式,您都应该使代码健壮,可能会引发异常或以您首选的方式处理错误。类似的东西:

$uploadData = array_shift($check);

// die if the data is not an array or if it does not have the expected key
if (!is_array($uploadData) || !array_key_exists('type', $uploadData)) {
    exit('$uploadData is not a valid array!');
}

// etc.
return !in_array($uploadData['type'], $imageTypes);

示例:https://eval.in/134972

希望这有帮助。