2017-07-14 8 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のように私のサーバーを介してこれを蘭行番号 – Jeff

+0

を含む正確なエラーメッセージを表示してくださいテスト、私は彼が得ているエラーであると推測しています: 'PHPの注意:変数はE:\ sierr \ Documの参照で渡す必要があります$ 16ファイル名を指定してください。ファイル名を指定してください。ファイル名を指定してください。 '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)); 
関連する問題