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

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

高洛峰
高洛峰원래의
2016-10-09 11:25:151502검색

문제 설명:
오늘 사용자 등록 시 아바타 이미지 파일을 업로드하는 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으로 문의하세요.

관련 기사

더보기