错误“严格标准:仅应通过引用传递变量”

0 php upload strict pass-by-reference

我正在 PHP 中创建上传函数,但当我尝试上传时收到此消息:

\n\n
\n

严格标准:第 72 行仅变量应通过引用传递

\n
\n\n

我不确定我做错了什么。我该如何修复它?

\n\n

这些线条看起来像:

\n\n
    if(isset($_FILES[\'image\'])){\n        $errors= array();\n        $file_name = $_FILES[\'image\'][\'name\'];\n        $file_size = $_FILES[\'image\'][\'size\'];\n        $file_tmp  = $_FILES[\'image\'][\'tmp_name\'];\n        $file_type = $_FILES[\'image\'][\'type\'];\n        $file_ext = strtolower(end(explode(\'.\', $_FILES[\'image\'][\'name\']))); // LINE 72\n        $extensions = array("jpeg", "jpg", "png");\n        if(in_array($file_ext, $extensions)=== false){\n         echo "Filtypen skal v\xc3\xa6re JPEG, JPG eller PNG.";\n        } \n        else {\n            move_uploaded_file($file_tmp, "../img/portfolio/".$file_name);\n        }\n
Run Code Online (Sandbox Code Playgroud)\n

and*_*vid 5

出现此错误的原因是函数end。如果您仔细查看 PHP 文档,您会发现它end采用与符号隐含的引用。PHP 只能引用变量,但不能引用即时值。

要克服这个问题,您必须执行以下操作:

 $exploded = explode('.', $_FILES['image']['name']);
 $last_element = end($exploded);
 $file_ext=strtolower($last_element);
Run Code Online (Sandbox Code Playgroud)

或者短一点

 $exploded = explode('.', $_FILES['image']['name']);
 $file_ext = strtolower(end($exploded));
Run Code Online (Sandbox Code Playgroud)

让我在这里进一步解释一下:

虽然函数的返回值end是数组的最后一个元素,但它在内部将指针设置为数组的末尾。如果您现在调用,$elem = current($exploded)您也会检索最后一个元素。