当我尝试通过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);
}
}
?>
答案 0 :(得分:5)
问题出在这一行:
$file_ext=strtolower(end(explode('.',$_FILES['image']['name'])));
end()
函数的参数通过引用&#39;传递,这意味着函数直接修改传递给函数的变量。因此,您无法将函数直接传递到end()
- 您必须先将explode()
的输出存储到变量中,然后将该变量传递给end()
。一些相关文件:
http://php.net/manual/en/language.references.php
对上述行的更改应该有效:
$file_name_array = explode('.',$_FILES['image']['name']);
$file_ext=strtolower(end($file_name_array));
答案 1 :(得分:2)
end
是一个函数,将内部数组指针移动到数组的末尾。它通过获取数组引用并修改其数组指针来实现。该行将发出警告:
$file_ext=strtolower(end(explode('.',$_FILES['image']['name'])));
它之所以这样做是因为explode
是一个返回数组的函数。 PHP只是告诉你,你正在尝试移动数组指针,但是没有跟踪你正在移动指针的数组。
然而,副作用end
也会返回结尾的元素(这是你想要的假设)。分成两行将起作用:
$array = explode('.',$_FILES['image']['name']);
$file_ext=strtolower(end($array)); // Now a variable.
答案 2 :(得分:0)
看这个链接 https://stackoverflow.com/a/4636183
将explode的结果分配给一个变量并将该变量传递给end:
$tmp = explode('.', $file_name);
$file_extension = end($tmp);
问题是,那端需要一个引用,因为它修改了数组的内部表示(即它使当前元素指针指向最后一个元素)。
explode('.', $file_name)
的结果不能转化为引用。这是 PHP 语言中的一个限制,可能出于简单原因而存在。