0 php upload strict pass-by-reference
我正在 PHP 中创建上传函数,但当我尝试上传时收到此消息:
\n\n\n\n\n严格标准:第 72 行仅变量应通过引用传递
\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 }\nRun Code Online (Sandbox Code Playgroud)\n
出现此错误的原因是函数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)您也会检索最后一个元素。