只有变量应该通过引用传递?

azh*_*han -1 php phpmailer

当我尝试通过php邮件发送电子邮件时我得到这个任何哥们可以帮助它这里是我使用的代码

<?php
if(isset($_FILES['image'])){
    $errors= array();
    $file_name = $_FILES['image']['name'];
    $file_size = $_FILES['image']['size'];
    $file_tmp = $_FILES['image']['tmp_name'];
    $file_type = $_FILES['image']['type'];
    $file_ext=strtolower(end(explode('.',$_FILES['image']['name'])));

    $expensions= array("jpeg","jpg","png");

    if(in_array($file_ext,$expensions)=== false){
        $errors[]="extension not allowed, please choose a JPEG or PNG file.";
    }

    if($file_size > 2097152) {
        $errors[]='File size must be excately 2 MB';
    }

    if(empty($errors)==true) {
        move_uploaded_file($file_tmp,"images/".$file_name);
        echo "Success";
    }else{
        print_r($errors);
    }
}
?>
Run Code Online (Sandbox Code Playgroud)

小智 5

问题出在这一行:

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

end()函数的参数是"通过引用"传递,这意味着函数直接修改传递到函数的变量.因此,您无法直接将函数传递给end()- 您必须explode()先将输出存储到变量中,然后将该变量传递给end().一些相关文件:

http://php.net/manual/en/language.references.php

http://php.net/manual/en/function.end.php

对上述行的更改应该有效:

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