Forum und email

PUT 방식 지원

PUT 방식 지원은 PHP 3와 PHP 4에서 차이가 있습니다. PHP 4에서는, 표준 입력 스트림으로 HTTP PUT의 내용을 읽어야 합니다.

Example#1 PHP 4로 HTTP PUT 파일을 저장하기

<?php
/* PUT 데이터는 stdin 스트림으로 들어옵니다. */
$putdata fopen("php://stdin""r");

/* 쓰기 위한 파일을 엽니다. */
$fp fopen("myputfile.ext""w");

/* 한번에 1kb씩 읽어서 파일에 씁니다. */
while ($data fread($putdata1024))
  
fwrite($fp$data);

/* 스트림을 닫습니다. */
fclose($fp);
fclose($putdata);
?>

Note: 아래의 문서는 PHP 3에만 해당합니다.

PHP는 Netscape Composer나 W3C Amaya 등의 클라이언트에서 사용하는 HTTP PUT 방식에 대한 지원을 제공합니다. PUT 요청은 파일 업로드보다 단순하고 다음과 같은 식으로 이루어집니다.

PUT /path/filename.html HTTP/1.1
     

일반적으로 원격 클라이언트가 웹 트리의 /path/filename.html에 내용을 저장하는걸 의미합니다. 아파치나 PHP가 웹 트리의 모든 파일에 누구나 자동적으로 덮어쓰게 하는 것은 좋은 생각이 아닙니다. 그래서, 웹 서버에 이러한 요청이 들어왔을때, PHP 스크립트를 통해서 다루도록 할 수 있습니다. 아파치에서는 Script 지시자를 통해 지정할 수 있습니다. 아파치 환경 설정 파일의 거의 모든 곳에서 지정할 수 있습니다. 일반적으로는 <Directory> 블록이나 <Virtualhost> 블록의 내부에 위치하게 됩니다. 다음 줄을 추가하면 됩니다:

Script PUT /put.php
     

이는 아파치가 이 줄이 들어가 있는 URI에 해당하는 모든 PUT 요청을 put.php 스크립트에 전달하게 합니다. 물론, .php 확장자에 대해 PHP가 사용 가능한 상태여야 합니다.

put.php 파일 안에서는 다음과 같은 작업을 해야 합니다:

<?php copy($PHP_UPLOADED_FILE_NAME$DOCUMENT_ROOT $REQUEST_URI); ?>

파일을 원격 클라이언트에서 요청한 위치로 복사합니다. 파일 복사가 이루어지기 전에 몇가지 체크나 사용자 인증을 할 수 있습니다. 여기서 보였듯이 PHP는 PUT 방식 요청을 POST 방식을 다루는 것과 마찬가지로 임시 파일로 저장합니다. 요청이 끝날 때, 임시 파일은 삭제됩니다. 그러므로, PUT을 다루는 PHP 스크립트는 파일을 어딘가로 복사해야합니다. 임시 파일의 파일명은 $PHP_PUT_FILENAME 변수에 들어있고, 대상 파일명의 지정은 $REQUEST_URI에서 확인할 수 있습니다. (아파치가 아닌 경우 다를 수 있습니다) 대상 파일 이름은 원격 클라이언트가 지정합니다. 이 클라이언트로부터의 지정을 무시할 수 있습니다. 예를 들면, 모든 전송 파일을 특별한 업로드 디렉토리로 복사할 수 있습니다.