>백엔드 개발 >PHP 튜토리얼 >PHP 파일 업로드 처리 사례 분석

PHP 파일 업로드 처리 사례 분석

高洛峰
高洛峰원래의
2016-12-20 15:24:211015검색

이 기사의 예에서는 PHP 파일 업로드 처리 방법을 설명합니다. 참고하실 수 있도록 자세한 내용은 다음과 같습니다.

최근 오랫동안 고민했던 일이 있어서 처음 생각을 공유하고 싶습니다.

PHP의 업로드 메커니즘은 완전히 캡슐화되어 있으며, 단 몇 줄의 코드로 구현할 수 있습니다.

파일을 임시 디렉터리에 업로드 –>

이것은 PHP 업로드 프로세스이거나 중간에 추가 확인을 수행합니다. 예를 들어, 문서가 업로드를 통해 제출되었는지, 아니면 당사

에서 파일 확장자를 허용하는지 및 일련의 확인을 통해 확인합니다. 제가 제시한 간단한 코드는 출발점이라고 볼 수 있습니다.

$targetFolder = '/uploads'; // 定义根目录
if (!empty($_FILES)) {
  $tempFile = $_FILES['Filedata']['tmp_name'];
if(is_uploaded_file($tempFile))
{
  $targetPath = $_SERVER['DOCUMENT_ROOT'] . $targetFolder;
  $targetFile = rtrim($targetPath,'/') . '/' . $_FILES['Filedata']['name'];
  $fileTypes = array('jpg','jpeg','gif','png'); // 允许的后缀扩展
  $fileParts = pathinfo($_FILES['Filedata']['name']);
  if (in_array($fileParts['extension'],$fileTypes)) {
    move_uploaded_file($tempFile,$targetFile);
    echo '1';
  } else {
    echo '非法上传文档.';
  }
}else
{
  echo "非法上传文件";
}
}

위 방법은 기본적으로 파일 업로드 요구 사항을 충족합니다. 하지만 그것은 나에게 필요한 것이 아닙니다.

PHP 파일 업로드 처리 사례 분석

업로드 기능

요구사항: 먼저 문서를 업로드하려면 클릭한 다음 JS가 업로드된 후 값이 반환됩니다. 현재 타임스탬프 이름을 표시합니다. 파일은 문서 이름 상자에 있습니다.

그런 다음 제출을 클릭하여 양식을 제출합니다.

서버는 제출된 양식을 처리하고 업로드된 파일의 이름을 변경합니다.

문제도 발생합니다. 서버는 IIS이고 매핑을 사용하여 구현한 가상 디렉터리입니다.

이 경우 $_SERVER['DOCUMENT_ROOT']가 PHP 사이트의 루트 디렉터리에 없습니다.

업로드 기능이 완료되었으나 해당 파일을 다운로드할 수 없습니다. 서버 보안상의 이유로 여전히 PHP 사이트에 파일을 배치할 계획입니다.

그러다가 생각의 한계에 빠졌습니다.

다시 생각해 보세요:

왜 PHP의 업로드 메커니즘을 다시 구현할 필요가 없나요?

PHP는 임시 디렉터리에 파일을 먼저 넣지 않나요? 그렇다면 JS 업로드가 성공한 후의 디렉터리도 임시 디렉터리인

이라고 가정하고 양식을 다시 제출할 때 파일을 복사하는 이유는 무엇입니까? 필요한 기능을 완료하려면 지정된 디렉토리로 이동하십시오.

PHP에는 파일 복사 기능인 Copy()가 있고 rename() 기능과 협력합니다. 이로써 업로드된 파일의 2차 이동 및 이름변경이 완료됩니다.

참고: Windows 플랫폼에서 0바이트 파일을 복사하는 경우 copy()는 FALSE를 반환하지만 파일은 올바르게 복사됩니다.

그러면 PHP는 파일 처리에 있어서 Liunx의 파일 처리 메커니즘을 적극적으로 참조합니다. PHP의 파일 작업 효율성은 I/O 쓰기 및 운영 체제와 관련이 있습니다.

요약: 사실 문제를 해결하는 방법은 여러 가지가 있으며, 생각을 제한하기 위해 스스로 원을 그리지 마세요.

이 글이 PHP 프로그래밍에 종사하는 모든 분들께 도움이 되기를 바랍니다.

PHP 파일 업로드 처리 사례 분석에 관한 더 많은 글은 PHP 중국어 홈페이지를 주목해주세요!

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