IT story

변수 만 참조로 전달해야합니다

hot-time 2020. 4. 26. 21:07
반응형

변수 만 참조로 전달해야합니다


// 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에서 여전히 고지 사항이므로 (더 이상 사용되지 않음) 고지 사항에 대해 오류보고를 완전히 비활성화하는 대신 고지 사항을 무시하고 무시 연산자를 사용할 수 있습니다.

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

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

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

end(...[explode('.', $file_name)])PHP 5.6부터 사용되었습니다. PHP 문서 자체는 아니지만 RFC에 문서화되어 있습니다.


PHP 공식 매뉴얼 : end ()

매개 변수

array

배열입니다. 이 배열은 함수에 의해 수정되므로 참조로 전달됩니다. 따라서 실제 변수 만 참조로 전달 될 수 있으므로 배열을 반환하는 함수가 아니라 실제 변수를 전달해야합니다.


먼저, 이와 같은 변수에 값을 저장해야합니다

$value = explode("/", $string);

그런 다음 end 함수를 사용하여 다음과 같은 배열에서 마지막 인덱스를 가져올 수 있습니다

echo end($value);

나는 그것이 당신을 위해 작동하기를 바랍니다.


$ file_extension = 끝 (explode ( '.', $ file_name)); //이 라인의 오류

이 줄을 다음과 같이 변경하십시오.

$ file_extension = end ( (explode ( '.', $ file_name)) ); // 오류 없음

간단한 테크닉을 위해 브라켓을 하나 더 넣으십시오.

(explode ()) 이면 독립적으로 수행 할 수 있습니다.

참고 URL : https://stackoverflow.com/questions/4636166/only-variables-should-be-passed-by-reference

반응형