2010-01-15 2 views
3

나는 websitwe에서 일하고 있는데, 나는 천개의 그림에 가까운 나를 보내려면 클라이언트가 필요하다. 우리 사이에는 약간의 지리적 거리가 있기 때문에 CD 나 SD 카드를 우편으로 보내는 것이 불가능하지는 않지만 선호하지 않습니다. 클라이언트가 그림을 제출하도록 PHP 업 로더를 작성할 수 있습니까? 아니면 더 좋은 방법이 있습니까? 나는 어떤 파일 공유 사이트에도 가입하고 싶지 않다.약 1,000 개의 이미지를 업로드하는 PHP 업 로더?

내가 그러한 업 로더를 작성한다고 가정 할 때, 중단 된 업로드로 손상된 파일을 보호하는 progresbar 및/또는 다른 기능을 코딩 할 수있는 방법이 있습니까?

더 도움이되는 모든 리소스에 대한 링크입니다.

감사

편집 :

이 한 시간 일 이러한 우리가 논의하고 높은 품질의 이미지입니다. 몇 GB가 될 것입니다.

FTP 공간이란 내 FTP 서버에 대한 사용자 이름과 pwd를 의미합니까? 그것은 할 수 있지만 (왜) FTP 클라이언트가 웹 기반 업 로더보다 낫습니까? 클라이언트가 FTP 프로그램을 다운로드하거나 다운로드하는 방법을 알고 있는지 확신하지 못합니다. 클라이언트는 Mac에 있고 나는 본 Mac 용 FTP 프로그램을 신뢰하지 않습니다.

"모든 것을 하나의 우편으로"라고 가정하면 PHP가 작동할까요?

다시 한번 감사드립니다.

편집 :

좋아, 지금까지 우리가 .zip 파일을 사용하지 않는 PHP를 사용하지 확신하고있었습니다. 또한, 지금은 진도 표시 줄에 nix로 표시 할 것입니다. 고객을 기다리면 앞으로 며칠 이내에 모든 사람에게 돌아갑니다.

편집 :

일종의 기능으로 클라이언트를 만났습니다. 클라이언트는 플래시 드라이브에 사진을 가지고있었습니다. 문제 해결됨. 모든 입력에 +1.

답변

5

나는 약간의 FTP 공간 또는 WebDAV 공유를 설정한다고 말할 것이다. 그렇게 할 수 없다면 수백 개의 고유 한 업로드를 처리하는 대신 단일 또는 작은 수의 zip 파일로 이미지를 업로드 할 것이고 이는 브라우저가 단일 파일 만 선택하기 때문에 시간이 많이 걸릴 것입니다. 파일 업로드 대화 상자에서 한 번에 (즉, 업로드 할 전체 디렉토리를 선택할 수는 없습니다).

이유는이 인스턴스에서 PHP를 사용하지 : 간단한 파일 업로드 핸들러를 작성

것은 PHP에서 간단하지만 매우 큰 업로드를 처리하는 경우 당신이해야하므로 꽤 비트 잔재주입니다 파일 크기 업로드 제한, 스크립트 실행 제한 시간 및 메모리 제한에주의하십시오.처음 설치하는 데 다소 실망 스러울 수 있습니다.

당신이 처리하고자하는 다중 GB 파일 인 경우 HTTP 업로드는 원하는 방식이 아닙니다. (이유를 묻는다면, 원하는대로 작동시키는 것이 매우 좋을 것입니다. 당신을위한 좌절 프로세스).

Mac OS에는 우수한 FTP 클라이언트가 몇 가지 있습니다. FTP 클라이언트보다 파일을 전송하는 데 웹 브라우저를 더 신뢰할 수있는 방법은 없습니다. 진행 표시 줄 지원에 대한

:

지원은 매우 내가있는 모듈을 포함하는 계획이 믿지 불구하고 (현재는 약간의 털이있는 제 3 자 모듈을 통해) PHP 제한됩니다 Currenly 진행 막대 표준 배포. Goalling for uploadprogress.so는 관련 결과를 제공해야합니다. 응답에서

는 littlegreen합니다 : 나는 (I 이미 설치 한 적어도 하나 개의 확장과 충돌 관리 - 나는 그들이 지금 그 문제를 해결 한 생각하지만)이 확장 http://pecl.php.net/package/uploadprogress을 사용

및 사용자 지정 자바 스크립트 처리기를 썼다 ( http://iaincollins.com/javascript/FileUploader.js)을 웹상의 여러 가지 여러 예를 기반으로 각각의 장점을 최대한 반영하도록 노력했습니다. 예 : 보이지 않는 iframe을 사용하여 투명하게 업로드 진행률을 반환하고 DHTML 파일 업로드 대화 상자를 만들고 추악한 브라우저 기반 파일 업로드 컨트롤을 투명하게 만들고 내 컨트롤 위에 오버레이하여이를 대체 할 수 있습니다. 업로드를 위해 선택된 파일의 이름을 얻을 수 있지만 JavaScript에서 파일 업로드 대화 상자를 호출하지 않습니다. CSS 스타일링을 올바르게하는 것이 특히 중요했습니다. 브라우저별로 다릅니다.

내가 작성한 JS는 매우 슬픈 상황이지만, 유용한 요소가있을 수 있습니다. 개인 인터페이스 용으로 생성 된 것처럼 링크 할 수있는 것은 공개하지 않습니다.

uploadprogress 용 jQuery 플러그인이 있습니다. 모든 것을 수행하지는 않지만 좋은 시작이 될 것입니다. http://nixbox.com/demos/jquery-uploadprogress.php ... 여러 파일 업로드를 처리하는 것을 포함하여 더 좋은 예가 있습니다. 큐에 넣고 순차적으로 수행함으로써 - 한 번에 하나의 파일을 선택해야했지만) 불행히도 나는 그들을 찾을 수없는 것 같습니다.

결론 :

나는 시도하고 번거 로움을 피하고 FTP 공간이나 시간이없는 경우 파일 전송 응용 프로그램을 피어 개인/피어 같은 일을 할 것입니다.

파일 전송 프로토콜 (이름에서 알 수 있듯이)은 대용량 파일 전송을 위해 특별히 설계되었으며 구성이 거의 필요하지 않으므로 (리소스 제한을 초과하지 않음) 클라이언트가 가질 수 있다고 기대할 수 있으므로 더 나은 옵션입니다. FTP가 HTTP 업로드를 기반으로 PHP 파일과 관련이 있기 때문에 처음부터 다시 시작하는 것이 아니라 다운로드가 중지되면 다시 시작할 수 있어야합니다.

HTTP는 파일 업로드를 처리 할 수 ​​있지만 강력한 것은 아니며 다양한 리소스 제한 (웹 서버 및 PHP - 위에 언급 한 바와 같이)을 명시 적으로 구성하여 여러 GB 파일 가능. WebDAV (원격 파일 시스템을 사용하는 HTTP 서버)를 사용하더라도 투명하지만 FTP와 같이 강력하지는 않습니다. 주로 클라이언트 구현이 복잡하기 때문입니다. 특히 Windows와 Mac OS에서 매우 큰 파일을 전송할 때 문제가 발생할 수 있습니다. 일반적으로 작은 (예 : < 500MB) 파일 전송에는 문제가 없습니다.

부수적으로 HTML5 사양은 파일 업로드 처리 방식을 개선합니다. 한 번에 여러 파일을 업로드하고 파일 업로드 진행률을 사양의 일부로 처리 할 수는 있지만 지금은 실제로 옵션이 아닙니다.

+0

+1입니다. –

+3

그런데 www.swfupload.org와 같은 플래시 기반 진행률 표시 줄 솔루션이 있습니다. 그것들은 훌륭하지만 PHP와 마찬가지로 수천 개의 파일과 방대한 양의 데이터를 위해 만들어지지 않았습니다. FTP 또는 P2P는 확실히 여기에 갈 수있는 올바른 방법입니다. –

+1

예, 언급할만한 가치가 있습니다. 가능한 경우 플래시 기반 옵션을 사용하지 않는 편이 더 좋지만, HTML의 표준 파일 업로드 방식을 사용하는 것보다 더 정교 해 졌으므로이 경우 언급하는 것이 좋습니다. 대부분의 브라우저보다 대용량 파일 업로드를 훨씬 더 잘 처리 할 것으로 기대합니다. 그들 자신이 할 것이다. 전에 PHP + JS에서 정말 매끄러운 DHTML 기반 파일 언로더를 만들었지 만, 크로스 브라우저 지원 (HTML5로 롤백)으로 정교한 UI를 원한다면 상당한 양의 해커가 필요하기 때문에 전용 전용입니다. –

2

파일 수를 무시하면 얼마만큼의 데이터가 필요합니까?

파일 수가 걱정된다면 클라이언트가 파일을 압축하도록하십시오. 서버에서 압축을 풀고 이동해야하는 위치에 이미지를 넣을 수 있습니다.

또한 정기적으로 수행 할 프로세스인지, 아니면 불규칙한 유지 관리 또는 일회성 시작 작업인지 직접 확인하십시오. 그렇다면 ftp 또는 다른 방법을 통해 파일을 교환하여 자신과 고객의 시간과 비용을 절약 할 수 있습니다.

+0

자세한 답변은 가장 대중적/철저한 답변 – Moshe

4

일괄 업로드, 시작/일시 중지/중지 및 폴더 계층 유지 (필요한 경우)를 수행 할 수있는 이유로 FTP를 제안합니다. Mac 용 FTP 솔루션은 훌륭합니다. 나는 Transmission과 Cyberduck을 사용한다. Filezilla도 좋습니다.

다른 FTP 옵션은 클라이언트가 자신의 Mac을 사용하여 사진을 다운로드 할 수있는 로컬 FTP 서버를 설정하는 것입니다. 이렇게하려면 약간의 구성이 필요하지만 확실히 가능합니다.

어쨌든이 파일 양에 대해 브라우저 기반 파일 업로드를 권장하지 않습니다. 하나씩 (또는 일괄 적으로) 업로드하는 경우 클라이언트에 대해 많은 번거 로움을 만들 수 있습니다. PHP의 게시 매개 변수 및 업로드 파일 크기 제한은 모든 이미지를 하나의 아카이브로 압축하기 어렵게 만들고 대용량 파일을 전송하면 브라우저가 일반적으로 일시 중지 및 다시 시작을 처리 할 수 ​​없기 때문에 시간 초과 문제가 발생할 수 있습니다.

브라우저 기반 업로드의 예외는 플래시 기반 파일 업 로더 (예 : SWFUpload)를 사용하는 것입니다. 이를 통해 클라이언트가 한 번에 모든 파일을 선택하도록 할 수 있습니다. 그런 다음 파일이 대기열에 올려 져 서버 측 스크립트 (PHP에있을 수 있음)에 하나씩 업로드됩니다. 사실, 클라이언트가 파일을 보내도록하는 것과 같은 목적으로 이것을 사용했습니다.

그런데, 나는 여전히이 경우 FTP를 권장합니다.

2

클라이언트와 비슷한 문제를 해결해야했습니다. 정기적으로 고객들은 FTP를 통해 총 300-400MB의 파일을 업로드합니다. 그러나 한 클라이언트에 방화벽이있어 FTP를 사용할 수 없습니다. 그래서 나는 HTTP 업 로더를 코딩해야했습니다.

나는 인터넷을 통해 PHP 솔루션을 검색했으며 기본적으로 Ian Collins가 이미 말했듯이 1) PHP는 가능하지만 털이 있고 2) PHP의 진행률 표시 줄 지원이 좋지 않다는 사실을 발견했습니다. 좀 더 자세한 정보를 제공 할 수 있습니다. 업로드/크기 제한에 대해서는 다음 코드가 포함 된 .htaccess 파일을 웹 디렉토리에 포함해야합니다. 업로드 제한 인 3GB와 스크립트 실행을 제한하지 않아야합니다. 웹 호스트가 htaccess 파일의 PHP conf 값 설정을 지원하는 한 시간 :

php_value upload_max_filesize 3000M 
php_value post_max_size 3000M 
php_value max_execution_time 0 
php_value max_input_time 0 

업 로더 스크립트의 코딩은 비교적 간단합니다. 좋은 자습서는 here입니다.

진행률 표시 줄을 사용하는 것이 더 까다 롭습니다. 확장 기능을 설치하지 않으면 PHP 전용 진행률 표시 줄을 사용할 수 없습니다. 일반적으로 허용되는 옵션은 hybrid Perl/PHP solution을 사용하는 것입니다. 그러나 서버에서 CGI 스크립트를 실행할 수 있어야합니다. 할 수 없으므로 진행률 표시 줄을 벗어났습니다. 이것은 꽤 비우호적인데, 그는 꽤 오래 동안 움직이지 않는 화면을 봤기 때문에 브라우저가 잠겨 있다고 생각하고, 어떻게 든 닫거나 인터넷 연결이 끊어지면 그는 다시 시작해야 할 것입니다.

동시에 여러 파일을 업로드하는 것은 까다로운 작업입니다. 고급 파일 선택 컨트롤과 AJAX를 사용하여 여러 동시 업로드 세션을 열면 긴 시간이 걸릴 수 있지만 같은 문제가 남아 있습니다. 이상한 파일 이름, 디스크가 가득 차거나 연결이 끊어져서 실패하면 클라이언트는 다시 시작해야하지만 이미 서버에 파일이 엉망이 될 것입니다. 사용자 친화적 인 이력서 솔루션을 코딩하는 것은 쉬운 일이 아닙니다. 클라이언트에게 ZIP 파일을 업로드하고 대량으로 업로드 할 것을 권합니다.

이것은 일회성이므로 나만의 솔루션을 작성하고 이미 사용 가능한 도구를 사용하지 마시기 바랍니다. 클라이언트가 FTP를 사용하도록 하시겠습니까? 예를 들어 the MAC version of FileZilla? 또는 DropBox? 아니면 최근에 최대 100MB의 파일을 업로드하고 공유 할 수 있으므로 Google Docs에 파일을 업로드하도록 허용 하시겠습니까?

+0

+1 내가 너무 조회 및 붙여 넣기에 게으름이 유용한 정보와 함께 상세한 답변을 위해 –

+0

그냥 정보가 준비가 우연의 일치 ... 나는 지난 며칠을 보냈습니다 내가 일하는 웹 사이트에 대한 모든 것들을 찾고 :) – thomaspaulb

0

Flash 및 Javascript 라이브러리 인 SWFUpload (http://code.google.com/p/swfupload/)를 사용하면 훨씬 쉽게 업로드 할 수 있습니다. 그것은 PHP와 .Net 지원을 기본적으로 제공하므로 사용자의 요구에 잘 맞을 것입니다.

단일 업로드 세션에서 최대 1,000 개의 이미지에 사용했습니다.