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

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

Oct 09, 2016 am 11:25 AM

문제 설명:
오늘 사용자 등록 시 아바타 이미지 파일을 업로드하는 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의 "@" 연산자를 사용했습니다. 페이지에서 오류를 보고하지 않습니다.)

@ 연산자

참고: 코드에서 PHP의 @ 연산자를 주의해서 사용하세요.
@ 연산자는 잘못된 결과로 인해 발생할 수 있는 모든 문제를 걸러낼 수 있습니다. 잘못된 열 또는 비표준 URL 오류가 포함된 사용자 입력 또는 SQL 쿼리를 피할 수 있습니다. 즉, 코드는 사용자 자체 또는 개발자가 생성한 오류를 확인하지 못할 수도 있습니다. 의 인기 있는 웹사이트에서는 단순히 충돌이나 중지가 불가능하기 때문에 @를 사용하는 경우가 많지만 이 경우에는 다른 오류 해결 방법을 사용해야 합니다.

오류 로그 파일 찾기
당시 @ 연산자가 오류 메시지를 차단했다는 사실을 인지하지 못하고 apache의 오류 로그 파일을 찾아보고 싶었습니다. PHP 개발 환경. xampp 같은 개발 키트를 사용하다보니 error_log 파일이 인터넷에 떠도는 대부분의 글과 달라서 결국
(제 호스트는 ubuntu입니다)

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

사실 그런 문제를 겪을 필요는 없습니다. @ 연산자 제거를 변경한 다음 오류 처리 함수인 handler_error() 함수를 제거하면 웹 페이지에서 오류 메시지를 볼 수 있습니다.

대상 폴더 권한 수정
무슨 일이 있어도 문제의 원인을 찾았는데, 폴더의 사용자와 권한이 잘못되었기 때문에 우리는 단지 문제의 원인을 찾았습니다. 요청해 보세요:

사진이 저장된 폴더를 소유한 사용자를 수정하고 이를 아파치를 실행하고 PHP 스크립트를 실행하는 사용자로 변경하세요.
폴더 권한을 755로 변경합니다.
Apache를 실행하는 사용자는 누구입니까? PHP 스크립트를 사용하여 다음을 얻습니다.

echo exec('whoami') //권한을 얻습니다. 사용자 이름 파일을 실행하여 사진 폴더의 권한을 수정합니다
이런 식으로 스크립트를 실행한 사용자를 daemon으로 얻었습니다. 당신이 얻는 것은 내 것과 다를 수 있습니다.
폴더를 소유한 사용자를 수정해 보겠습니다.

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)