2009-10-29 7 views
1

PHP 스크립트를 개발하여 스크립트의 파일 내용을 다른 스크립트로 보내고 있습니다. PHP에서는 일반적으로 폼에 제출 된 업로드 된 파일을 포함하는 $ _FILE 배열을 사용합니다.

// pseudo function names ahead 

$content = file_get_contents(FILE_TO_SEND); 
send_file_with_curl(base64_encode(gzcompress($content))); 

그래서이 기본적으로 파일의 내용을 가져옵니다 다음 gzip 압축과 압축 한 후 base64로 그것을 인코딩 : 나는 조금 다른 뭔가를 내놓았다 있도록하지만 양식을 필요로하지 않았다. 그런 다음 모든 것은 cURL POST 요청과 함께 전송됩니다. 반대편에서 나는 base64 디코드 된 내용을 보내고 압축을 풀고 모든 것은 원래대로 돌아온다.

제 질문은 이렇습니다 : 이런 식으로 일하는 데 단점이 있습니까? 내가 간과 할 수있는 보안 또는 무결성 관련 문제가 있습니까?

전송에 문제가 없는지 확인하기 위해 파일의 md5 다이제스트를 보냅니다. 전송할 파일의 크기는 3Mb를 넘지 않습니다.

미리 답변 해 주셔서 감사합니다.

답변

3

나는 HTTP PUT 방식이 이러한 종류의 것에 적합하다는 것을 발견했다. 당신은 반드시 파일을 인코딩 할 필요가 없으며, 압축 등을 신경 써서는 안됩니다. 실제 크기 제한은 없습니다. 그것은 빠르고 파일 크기에 관계없이 고정 된 양의 메모리를 사용합니다.


이 기능은 HTTP 원격 끝에 원격 URL

//Specify the location of a tmp file 
function PutFile($sName, $sFile) 
{ 
    $URL = "http://MY-SERVER/PutFile.php?FileName=" . urlencode($sName); 

    $FILE = fopen($sFile, 'rb'); 

    $curl = curl_init($URL); 
    curl_setopt($curl, CURLOPT_HEADER,0); 
    curl_setopt($curl, CURLOPT_PUT, 1); 
    curl_setopt($curl, CURLOPT_INFILE, $FILE); 

    ob_start(); 
     curl_exec($curl); 
     $sReturn = ob_get_contents(); 
    ob_end_clean(); 

    curl_close($curl); 

    fclose($FILE); 

    return $sReturn; 
} 

로컬 디스크에서에게 파일을 넣어 것입니다,이

<?php 

$Name = (get and **validate** file name from $_GET['FileName']; 
$Path = /somewhere/to/put/the/file/ + $Name 

set_time_limit(3); 

$f1 = fopen('php://input', 'rb'); 
$f2 = fopen($Path, 'wb'); 

while($data = fread($f1, 4096)) 
{ 
    fwrite($f2, $data); 
} 

fclose($f1); 
fclose($f2); 

echo "Success\n"; 

PutFile.php입니다 디스크에 쓰지 않고 메모리에 저장하려면을 사용하면됩니다. 0.

1

한 가지 단점은 base64 인코딩이 전반적인 전송 크기를 크게 증가 시킨다는 것입니다. 압축은 도움이되지만 base64는 압축 된 파일 크기에 비해 33 %의 오버 헤드를 추가합니다.

그 외에도 두 가지 방법이 큰 차이는 없을 것이라고 생각합니다.

+3

프랭크에게 언급했듯이 base64는 정확하게 33 %를 추가합니다. 3 바이트를 4로 인코딩합니다. 여기에는 추측이 없습니다. –

0

그 base64 인코딩은 파일 크기를 33 % 늘립니다 (아래의 설명에 따라). 또한 전체 파일을 한 번에 메모리에로드해야합니다.

정상적인 파일 업로드 방법을 활용 한 경우이 두 가지 문제가 걱정됩니다.

+1

base64에는 일관된 오버 헤드가 있습니다. 파일 크기가 33 % 증가합니다. 그것도 간단하고 예측 가능합니다. 그것이 '몇 배'가 증가한다고 말하는 것은 잘못된 것입니다. –

+0

충분합니다. 이를 반영하도록 편집합니다. –