[php] 변수 만 참조로 전달해야합니다.

// Other variables
$MAX_FILENAME_LENGTH = 260;
$file_name = $_FILES[$upload_name]['name'];
//echo "testing-".$file_name."<br>";
//$file_name = strtolower($file_name);
$file_extension = end(explode('.', $file_name)); //ERROR ON THIS LINE
$uploadErrors = array(
    0=>'There is no error, the file uploaded with success',
    1=>'The uploaded file exceeds the upload max filesize allowed.',
    2=>'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form',
    3=>'The uploaded file was only partially uploaded',
    4=>'No file was uploaded',
    6=>'Missing a temporary folder'
);

어떤 아이디어? 이틀 후에도 여전히 붙어 있습니다.



답변

explode변수에 결과를 할당하고 해당 변수를 end다음에 전달하십시오 .

$tmp = explode('.', $file_name);
$file_extension = end($tmp);

문제는 end배열의 내부 표현을 수정하기 때문에 참조 가 필요 하다는 것입니다 (즉, 현재 요소 포인터 가 마지막 요소를 가리 키도록합니다).

의 결과 explode('.', $file_name)는 참조로 전환 될 수 없습니다. 이것은 PHP 언어의 제한 사항으로, 단순성 때문에 존재할 수 있습니다.


답변

PHP 7 호환 적절한 사용법 :

$fileName      = 'long.file.name.jpg';
$tmp           = explode('.', $fileName);
$fileExtension = end($tmp);

echo $fileExtension;
// jpg


답변

다른 사람들은 이미 오류가 발생한 이유를 알려 주었지만 원하는 작업을 수행하는 가장 좋은 방법은 다음과 같습니다.
$file_extension = pathinfo($file_name, PATHINFO_EXTENSION);


답변

배열을 explode ()에서 변수로 저장 한 다음이 변수에서 end ()를 호출하십시오.

$tmp = explode('.', $file_name);
$file_extension = end($tmp);

btw :이 코드를 사용하여 파일 확장자를 얻습니다.

$ext = substr( strrchr($file_name, '.'), 1);

여기서 strrchr지난 후 문자열을 추출 .substr오프 삭감.


답변

이 시도:

$parts = explode('.', $file_name);
$file_extension = end($parts);

그 이유는 인수를 end참조로 전달 하기 때문입니다 end. 최종 포인터로 내부 포인터를 이동시켜 배열을 수정하기 때문 입니다. 변수를 전달하지 않으면 참조 할 항목이 없습니다.

자세한 내용 end은 PHP 매뉴얼을 참조하십시오.


답변

PHP end()는 변경하고자하는 것 (변수 일 수 있음)에 대한 참조를 기대 하기 때문에 불평 합니다. 그러나 먼저 결과를 변수에 저장하지 않고 explode()직접 결과를 전달합니다 end(). 현재 explode()값을 반환 할 때 값은 메모리에만 존재하며 변수를 가리 키지 않습니다. 존재하지 않는 무언가 (또는 메모리에 알려지지 않은 것)에 대한 참조를 작성할 수 없습니다.

또는 다른 말로하면 : PHP는 당신이 그에게주는 값이 직접 값이거나 값에 대한 포인터인지 알지 못합니다 (포인터는 변수 (정수)이며 메모리의 오프셋을 저장합니다. 실제 값은 거주). 따라서 PHP는 항상 포인터 (참조)를 기대합니다.

그러나 이것은 PHP 7에서 여전히 고지 사항이므로 (더 이상 사용되지 않음) 고지 사항에 대해 오류보고를 완전히 비활성화하지 않고 고지 사항을 무시하고 ignore-operator를 사용할 수 있습니다.

$file_extension = @end(explode('.', $file_name));


답변

배열을 즉시 인덱싱 할 수없는 것처럼 end를 호출 할 수도 없습니다. 변수에 먼저 할당 한 다음 end를 호출하십시오.

$basenameAndExtension = explode('.', $file_name);
$ext = end($basenameAndExtension);