2017-07-14 47 views
-1

我得到这个时,试图通过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); 
    } 
} 
?> 
+2

请出示包括行号 – Jeff

+0

@Jeff然这个通过我的服务器作为确切的错误信息一个测试,我假设这是他得到的错误: 'PHP注意:只有变量应该通过引用传递给E:\ sierr \ Docum ents \ Sync \ sync \ code \ snippets-php \ tmp.php on line 16' 其中引用此行: '$ file_ext = strtolower(end(explode('。',$ _ FILES ['image'] [ 'name'])));' – SierraKomodo

+0

[只能通过引用传递变量](https://stackoverflow.com/q/4636166/1255289) – miken32

回答

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

的问题是在这条线:

$file_ext=strtolower(end(explode('.',$_FILES['image']['name']))); 

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)); 
相关问题