php教程 php手册 PHP move_uploaded_file 함수가 사진을 이동하지 못하는 문제 해결

PHP move_uploaded_file 함수가 사진을 이동하지 못하는 문제 해결

Oct 08, 2016 pm 04:04 PM

문제 설명:
오늘 사용자 등록 시 아바타 이미지 파일을 업로드하는 PHP 스크립트를 구현할 때 문제가 발생했습니다. PHP 스크립트는 이전에 결정되었습니다

브라우저 측에서 파일 업로드에 오류가 없습니다.
업로드된 파일은 합법적입니다.
업로드한 파일은 이미지 파일입니다.
서버 측에서 고유한 파일 이름이 생성되었습니다.
코드
다음으로 해야 할 일은 파일을 임시 위치에서 고정 위치로 옮기는 것이므로 다음과 같은 스크립트를 작성했습니다.

//임시 위치에서 고정 위치로 파일 이동 @move_uploaded_file($_FILES[$image_fieldname]['tmp_name'], $upload_filename) 또는 handler_error("이미지 파일 저장 중 오류가 발생했습니다.", "파일 이동 중 오류가 발생했습니다. " . "{ $upload_filename}");
코드 handler_error() 함수는 제가 직접 정의한 오류 처리 함수입니다. move_uploaded_file 함수에서 오류가 발생하면 오류 페이지로 점프합니다. 위 스크립트를 실행하면, 스크립트가 점프합니다. 오류 페이지에 도달했을 때 뭔가 잘못되었다는 것이 분명했습니다. 먼저 함수 매개변수에 오류가 있는지 확인했습니다.

$_FILES[$image_fieldname]['tmp_name']$upload_filename //직접 결합한 파일 경로이며 정확함을 보장합니다
PHP 매뉴얼에 따르면 함수에 전달한 위의 두 매개 변수는 다음과 같습니다. 문제는 무슨 일이 일어나고 있는 걸까요? 페이지에 오류가 보고되지 않았습니다. (함수 앞에 PHP의 "@" 연산자를 사용했기 때문에 페이지에서 오류를 보고하지 않습니다.)

@operator

참고: 코드에서 PHP의 @ 연산자를 사용할 때는 주의하세요.
@ 연산자는 잘못된 사용자 입력이나 SQL 쿼리에 잘못된 열 또는 불규칙한 URL 오류가 포함되어 있을 수 있는 모든 문제를 걸러낼 수 있습니다. 피할 수 있으며 코드는 사용자, 자체 또는 밴드에 의해 생성된 오류를 확인하지 못할 수도 있습니다. 간단히 말해서, @ 연산자는 단순히 충돌 또는 오류를 일으킬 수 없기 때문에 코드에서 오류 메시지를 가릴 수 있습니다. 정지되지만 이 경우 다른 오류 해결 옵션을 사용하십시오.

오류 로그 파일 찾기
당시에는 @ 연산자가 오류 메시지를 차단한 줄도 모르고 설정 시 사용했기 때문에 아파치의 오류 로그 파일을 찾아보고 싶었습니다. PHP 개발 환경입니다. xampp과 같은 개발 키트이므로 error_log 파일이 인터넷에 있는 대부분의 기사와 다릅니다. 결국
(내 호스트는 ubuntu입니다)

을 찾았습니다. php_error_log 파일은

/opt/lampp/logs
경로에서 발견되었습니다. 물론 Apache의 error_log 파일도 이 경로에 저장되어 있습니다. php_error_log 파일에서 권한 부족이라는 오류 문제를 확인했습니다. 마침내 오류를 발견했습니다. 장소: 이미지를 저장하는 대상 디렉터리에는 PHP를 실행하는 사용자에 대한 권한이 없습니다. PHP 스크립트를 실행하는 사용자는 스크립트 코드를 작성하고 이미지 폴더를 생성한 사용자와 동일하지 않습니다. >

사실 그렇게 번거로울 필요는 없습니다. 함수 앞의 @ 연산자만 제거한 다음 오류 처리 함수인 handler_error() 함수를 제거하면 오류 메시지를 볼 수 있습니다. 웹 페이지에서.

대상 폴더 권한 수정

무슨 일이 있어도 문제의 원인을 찾았는데, 폴더의 사용자와 권한이 잘못되었기 때문에 수정만 하면 됩니다. 이런 문제들:

이미지가 저장된 폴더의 소유자를 사용자로 수정하고, PHP 스크립트를 실행하기 위해 아파치를 실행하는 사용자로 변경합니다.

폴더 권한을 755로 변경하세요
아파치를 실행하는 사용자는 누구인가요? PHP 스크립트를 사용하여 다음을 얻습니다.

echo exec('whoami'); //파일을 실행할 사용자 이름을 가져와서 사진 폴더의 권한을 수정합니다

이런 식으로 스크립트를 실행한 사용자인 daemon을 얻었습니다. get은 나와 다를 가능성이 높습니다.
폴더를 소유한 사용자를 수정해 보겠습니다.

chown daemon -R ~/web/hello_php/uploads

~/web/hello_php/uploads는 이미지를 저장하는 대상 경로입니다. -R은 이 디렉터리에 있는 폴더의 사용자를 재귀적으로 수정한다는 의미입니다.

폴더 권한을 수정하세요

chmod 775 -R ~/web/hello_php/uploads

이제 끝났습니다.

참고자료 : http://www.manongjc.com/article/1494.html

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)