2017-07-14 45 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)); 
相關問題