컴퓨터파일 형식

PHP : 서버에 파일 업로드

PHP를 통해 파일을 다운로드 - 매우 흥미로운 사건을, 어떤 매우 신중하게 접근해야합니다. 인터넷에서 당신은 파일 업로드의 구현의 많은 예를 찾을 수 있습니다,하지만 그들 중 모든는 좋은 및 안전 규정을 충족.

이러한 일들은 시간이 오래 걸리는 경우에도 결론을 가지고해야합니다. 당신은 코드에서 간격을두고 있다면, 전체 서버가 손상 될 수 있습니다.

안전

PHP 용으로 파일 업로드 서버가 아주 쉽게 수행 할 수 있습니다. 코드는 매우 짧고 간단합니다. 라인의 단지 몇 가지. 그러나이 방법은 위험합니다. 훨씬 더 많은 시간과 거리 안전에 코드 라인.

위험은 당신이 검사를하지 않으면, 어떤 공격자가 서버에 자신의 스크립트를 업로드 할 수 있다는 것입니다. 이 경우, 전체 액세스 할 수 있습니다. 그는 그가 원하는 무엇이든 할 수 있습니다 :

  • 데이터베이스를 삭제;
  • 파일 사이트를 삭제;
  • 파일 사이트를 수정;
  • 당신의 웹 사이트에 광고를 추가;
  • 바이러스를 다운로드;
  • 모든 사용자를 자신의 사이트에 리디렉션;
  • 그리고 온 다른 많은 일들이 공격자 마음입니다.

당신은 항상 사용자의 파일을 다운로드하려고 시도하는 확인해야합니다. 당신은 단지 이미지를 업로드 할 경우 예를 들어, 파일이 이미지를 정확하게인지 확인하는 것이 필요하다. 그렇지 않으면, 당신은 아무것도를 다운로드합니다.

정확하게 검증을 구현하는 방법, 그것은 파일을 업로드 할 수있는 직접 검사 스크립트로 표시됩니다.

PHP는 폼 만들기

파일 업로드 양식은 매우 간단합니다. 찾아보기 버튼을 업로드 버튼이 없습니다.

쉽게이기 때문에, 형태는하지 않습니다 만드는 방법을 설명합니다. 또한 지침은 이미 HTML의 기본 개념은 (그렇지 않으면 당신은 PHP에 다운로드에 대한 정보를 찾을 수없는 것)가 있다고 가정합니다.

그러나 형태의 데이터를 당신이에 enctype 속성을 추가 할 필요가 있습니다.

그렇지 않으면, 파일 핸들러에 데이터가 전송되지 않습니다.

그것은 어떻게 작동 하는가?

당신은 찾아보기 버튼을 클릭하면 당신은 파일을 선택하라는 메시지 상자가 표시됩니다.

그 후이 파일이있는 경로를 수신해야합니다.

경로가 나타나지 않으면 다시 작업을 수행합니다.

다운로드 파일 핸들러를 클릭 한 후 정보를 제공 할 수 있습니다.

예를 들어, 파일이 "아무개"이름이 성공적으로 "이러 이러한"폴더에 업로드 된이다라고 말하는 라인을 쓰고 있습니다. 물론, 파일 이름은 항상 다른 받게됩니다.

일반적으로이 정보는 코드를 디버깅하는 데 사용됩니다. 따라서, 데이터를 송신 및 쓰기가 원하는 디렉토리에 발생되는 것을 확인하는 것이 가능하다. 즉, 심지어 파일 이름이 표시되지 않습니다. 이 추가 정보 때문에 사용자는 필요하지 않습니다.

그것은 출력에 사용자가 여러 파일을 다운로드 할 경우에만 이름을 의미가 있습니다. 그런은, 조금 더 고려 경우입니다. 의 앞서 자신의 얻을하지 말자.

조정

서버에 PHP 파일 업로드에서 php.ini 파일에서 수행해야합니다 특정 설정을 필요로합니다. 이 파일은 설정이 많이 포함되어 있습니다. 그들은 모두 우리가 필요하지 않습니다. 의 file_uploads, upload_tmp_dir을하고이 upload_max_filesize : 우리는 세 줄에 관심이 있습니다.

이러한 설정은 서버에서뿐만 아니라 중 하나를 모든 사이트에 영향을 미칠 있습니다. 따라서, 사용자를로드해야합니다 사실에 기초 최대 크기를 설정합니다. 너무 크게 설정하지 않는 것이 좋습니다.

이러한 매개 변수의 값을 변경 한 후에는 서버를 다시 시작해야합니다. 그들은 서버 부하시 읽을 그렇지 않으면 설정이 적용되지 않습니다.

당신은 서버에 SSH를 통해 연결하여 콘솔에서이 작업을 수행 할 수 있습니다. 간단히 명령 서비스 아파치를 다시 시작를 입력 한 후 설정이 적용됩니다.

또 다른 방법 - ISP 패널을 통해 또는 청구 패널 공급자를 통해 다시 시작.

배열 파일

PHP에서 파일 업로드는 배열 $ _FILES에 의해 수행된다. 그것은 우리가 다운로드 파일에 대한 모든 정보가 포함되어 있습니다.

다음 파일 처리기에서 쓰기에 충분 배열에 포함되는 정보를 참조하십시오.

어떤 파일을 선택하고 클릭 "업로드합니다." 핸들러 페이지에서 $ _FILES에 저장되어있는 정보가 표시됩니다. 변수는 대문자로 완전히 작성된 것입니다. PHP - 언어를 구분합니다.

당신이 볼 수 있듯이,이 배열의 필드 많이있다. 그들 모두는 우리에게 중요하다. 첫 번째 필드는 컴퓨터에 사용되는 형태로 파일 이름을 포함합니다.

유형 열은 파일 형식을 지정했습니다. Tmp_name 필드는 임시 파일의 이름에 해당합니다. 스크립트의 종료 후 삭제됩니다.

오류 필드는 오류 코드가 포함되어 있습니다. 이것은 조금 더이었다. 크기 - 크기 (바이트).

오류

PHP 파일 업로드를 통해 수행은 항상 오류 코드 동반한다. "오류"에 입력 오류 메시지. 스크린 샷 오류는 0입니다.

모든 오류의 값을 고려 :

그것은 보통의 HTML에 지정 될 수있는 매개 변수에 대한 위 말했다.

여기에 업로드 된 파일의 양의 제한을 나타내는 파일을 다운로드하는 샘플 형태이다.

PHP : 파일 업로드 스크립트

모두가 실제로 수행으로? PHP에서 파일 업로드 복사 명령을 발생합니다. 원본 파일과 대상 파일 - 당신이 파일을 다운로드하는 방법의 문제에 관심이 있다면, 대답은 두 개의 매개 변수를 사용하여 간단한 저작권법과입니다.

위에서 언급하지만, 그것은 안전을 위해 제한 될 수 없습니다. 예를 들어, 우리는 제공, 당신은 배열 $ _FILES의 필드 형식을 사용할 수있는 파일의 종류를 확인하십시오. 먼저, 검사 처리 한 다음 전체 스크립트로 이동하자

의 당신이 사용자는 GIF, JPEG 또는 PNG의 해상도를 가진 사진을 업로드 할 수 있도록하기를 원하는 경우를 생각 해보자. 그것은 이렇게 될 수 있습니다 나타냅니다.

경우 ($ _ FILES [ 'file_upload'] [ '타입']! = "이미지 / GIF") {
"죄송합니다, 우리는 지프 - 파일 다운로드 지원"에코;
출구;
}

당신이 3 종류를 제공 할 경우, 단순히 이미지의 다른 유형으로 추가 조건을 추가 할 수 있습니다.

사본 (이미지 1, 이미지 2) : 복사는 다음과 같이 이루어집니다.

우리의 경우, 작업이 서버에 PC에서 다운로드 할 때, 당신은 그렇게 할 수 있습니다

복사 ($ _ FILES [ 'file_upload'] [ "tmp_name"] "1.JPG")

즉, 파일 이름 1.JPG로 복사 할 것입니다. 이것은 완전히 정확하지 않습니다. 이 경우, 단지 일례이다. 파일 이름은 파일에 따라 확장을 다른 지정하고 지정하는 것이 필요하다.

확장은 여러 가지 방법이 될 수를 결정합니다. 그것은 모두 박학의 개발자에 따라 달라집니다. (수십 초 차이) 확장을 결정하는 가장 빠른 방법 중 하나는 -이 다음 코드입니다.

$ PATH_INFO의 PathInfo = ($ _ FILES [ '사진 1'] [ "이름"]);

$ 내선 = $ PATH_INFO [ '확장자'];

변수 $ 내선 우리가 원하는 확장자를 저장합니다. 파일 이름은 임의 사용 MD5로 설정할 수 있습니다. 당신이 많은 파일을 다운로드 할 계획이라면, 다른 폴더로 배송하는 것이 좋습니다. 그래서 더 편리 할 것입니다. 특히, 제거하려는 경우.

다음과 같이 될 것입니다 코드를 다운로드합니다.

/// 사진

경우 ($ _FILES [ '사진 1'] [ 'tmp_name'] == NULL)

{

에코 ( "

을 알 수없는 파일.

돌아 가기 ... ");

출구;

}

///. 서버의 모든 프로젝트에 대한 당신을 말해 큰 파일 (비디오)을로드 할 수 있지만 사진 만이있다, 사용자는 제한 할 필요가

경우 (($ _FILES [ "사진 1"] [ "크기"] "1024 * 1024 * 2)

{

?>

의 최대 허용 크기 <강한> 2메가바이트

돌아 가기 ...

출구;

}

폴더를 생성 //

// 현재 월의 폴더를 생성

만약 (! file_exists ( "IMG /". 날짜 ( "M")))

{

MKDIR ( "IMG /"일 ( "M").);

}

// 현재 날짜의 폴더를 생성

만약 (! file_exists ( "IMG /."일 ( "M"). "/". 기간 ( "D")))

{

MKDIR ( "IMG /"일 ( "M") "/"일 ( "D") ...);

}

/// 파일 확장자

$ PATH_INFO의 PathInfo = ($ _ FILES [ '사진 1'] [ "이름"]);

$ 내선 = $ PATH_INFO [ '확장자'];

파일 이름을 생성 ///

$ 이드 MD5 (날짜 ( "YMD을")) =;

경우 (사본 ($ _ FILES [ '사진 1'] [ "tmp_name"] "IMG /."일 ( "M"). "/". 기간 ( "D"). "/". $ ID. $ 추출액) )

{

에코 ( "성공적으로 업로드 된 파일");

}

/// 추가 조치 (데이터베이스 항목, 등등. N.)

}

여러 파일

여러 파일 (PHP)을 업로드하는 형태로 추가 필드에 의해 발생한다.

이 다운로드 파일의 수를 제한이 방법은 매우 좋지 않다. 또한,이 프로그램에 나쁜 형태로 간주됩니다. 동적 모든 일을하려고합니다.

이상적인 옵션은 - 그것은 하나의 버튼을 눌러 한 번에 많은 수의 파일의 선택입니다.

이렇게하려면이 코드와 같은 모양을 만들 수 있습니다.

<양식 방법 = "POST"액션 = NAME = "upload_form"에 enctype = "다중 / 폼 데이터", "링크 핸들러를 파일에">

<입력 클래스 = "form_upload"TYPE = "파일"NAME = "FILE1 []"다중 값 = "개요">

<입력 클래스 = "form_upload"유형 = "제출"이름 = "upldFile"값 = "추가"/>

단어의 여러 또한 유의하고, 이름을 배열 []로 주어진다. 이 경우, $ _FILES 배열이 약간 다를 수 있습니다. 당신은 배열의 배열을 얻을 것이다.

다시 위해서 var_dump ($ _ FILES)를 사용할 수 있습니다 테스트하려면;

모든 파일은이 같은 배열에 배치됩니다 :

  1. $ _FILES [ "파일 1"] [ "이름"] [0]
  2. $ _FILES [ "파일 1"] [ "이름"] [1]
  3. 등등.

괄호 안에 배열의 파일 번호를 기록됩니다. 0에서 계산. 우리는 단지주기를 요청하고 인덱스 추가 [$ i]는 말에 상기 코드에 연락하여, 같은 방식으로 취급합니다.

$ I = 0;

반면 ($ _FILES [ "FILE1"] [ "이름"[$ i]를 <> ')

{

/// 상기 코드를 붙여

}

당신이 파일의 정적 수 (마지막 사진) 버전을 사용하는 경우 보통의 경우와 같이 따라서, 당신은 코드의 불필요한 반복없이 한 사이클에서 서버에 PHP 파일 업로드를 통해 발생해야합니다.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 ko.birmiss.com. Theme powered by WordPress.