IT

PHP에서 진행률 표시 줄 업로드

lottoking 2020. 10. 10. 10:24

PHP에서 진행률 표시 줄 업로드


누구든지 PHP에서 진행률 표시 줄을 얻는 방법을 알고 있습니까? 사진 앨범 업 로더 용 코드를 작성합니다. 사진을 업로드하는 동안 진행률 표시 줄을 표시하고 싶습니다.

나는 PHP를 처음 접하기 때문에 모든 것을 알지 못합니다.


이것은 지금까지 인터넷 검색 및 시도 후 가장 간단하고 가장 좋은 업 로더입니다.

https://github.com/FineUploader/fine-uploader

APC 또는 다른 외부 PHP 라이브러리가 필요하지 않고 공유 호스트에서 파일을 진행할 수 있습니다. html5 드래그 앤 드롭 (개인적으로 테스트) 및 여러 파일 업로드를 지원하지 않습니다.


APC가 설치되어 있는 경우 업로드 진행을위한 후크가 있습니다.

Rasmus Lerdorf (PHP 창시자)는 YUI를 사용하여 샘플가지고 있습니다 (아, 여기에 PHP 소스가 있습니다 ).

여기에서 설명서를 참조 하십시오 .


필자가 아는 한 순수한 PHP 업로드 진행률 표시 줄 또는 PHP 작동 방식으로 인해 PHP / Javascript 업로드 진행률 표시 줄이 불가능한 점을 유감스럽게 생각합니다. 가장 좋은 방법은 어떤 형태의 플래시 업 로더를 사용하는 것입니다.

AFAIK $ _FILES를 포함하는 모든 슈퍼 글로벌이 없어 질 때까지 펼쳐지지 않습니다. PHP 펼쳐질 때까지 파일이 완전히 업로드됩니다.

편집 : 이것은 더 이상 사실이 아닙니다. 2010 년.


나에게 잘 작동하는 하나의 PHP-ish (5.2+) 및 no-Flash 방식 :

먼저 "uploadprogress"을 시작하고 확장 실행하는 방법을 설명하는 게시물을 참조하십시오 .

그런 다음 파일을 업로드하는 양식이 포함 된 페이지에서 다음 iframe을 만듭니다.

<iframe id="progress_iframe" src="" style="display:none;" scrolling="no" frameborder="0"></iframe>

다음으로 "제출"버튼 에이 코드를 추가합니다.

onclick="function set() { f=document.getElementById('progress_iframe'); f.style.display='block'; f.src='uploadprogress.php?id=<?=$upload_id?>';} setTimeout(set);"

이제 "제출"을 클릭하여 파일 업로드를 시작할 때 표시되고 uploadprogress.php의 내용을 양식에 숨겨진 iframe이 있습니다. $ upload_id는 양식에서 숨겨진 필드 "UPLOAD_IDENTIFIER"의 값으로 사용하는 것과 동일해야합니다.

uploadprogress.php 자체는 다음과 같습니다 (필요에 따라 수정 및 조정).

<html>
<head>
<META HTTP-EQUIV='REFRESH' CONTENT='1;URL=?id=<?=$_GET['id']?>'>
</head>
<body>
Upload progress:<br />
<?php
    if(!$_GET['id']) die;
    $info = uploadprogress_get_info($_GET['id']);
    $kbytes_total = round($info['bytes_total'] / 1024);
    $kbytes_uploaded = round($info['bytes_uploaded'] / 1024);
    echo $kbytes_uploaded.'/'.$kbytes_total.' KB';
?>
</body>
</html>

매초마다 자동으로 새로 고침됩니다. 원하는 경우에 멋진 진행률 표시 줄을 추가 할 수 있습니다 (예 : 다른 색상의 중첩 된 <div> 2 개). 업로드 진행률이있는 iframe은 업로드가 진행되는 동안에 만 자연스럽게 작동하며 양식이 변경되고 브라우저가 다음 페이지로 다시로드되면 표시되는 종료됩니다.


업로드 진행률 표시 줄의 구현은 간단하며 추가 PHP 확장, JavaScript 또는 Flash가 필요하지 않습니다. 하지만 PHP 5.4 이상이 필요합니다 .

이 지침은 당신을 설정하여 업로드 진행 정보의 수집 활성화해야 우리 에서 .session.upload_progress.enabledOnphp.ini

그런 다음 다른 파일 입력 바로 숨겨진 입력을 HTML 업로드 양식에 추가합니다 . name숨겨진 입력의 HTML 속성 에서 지시문의 값과 같아야합니다 (결국 앞에 ). 속성은이 세션 키의 일부로 사용됩니다.session.upload_progress.namephp.inisession.upload_progress.prefixvalue

HTML 양식은 다음과 가변합니다.

<form action="upload.php" method="POST" enctype="multipart/form-data">
   <input type="hidden" name="<?php echo ini_get('session.upload_progress.prefix').ini_get('session.upload_progress.name'); ?>" value="myupload" />
   <input type="file" name="file1" />
   <input type="submit" />
</form>

이 양식을 보낼 때 PHP는 $_SESSION업로드 상태 정보로 채워질 글로벌 구조 에 새 키를 보낼 때 슈퍼 합니다 . 는 연결 키 name되고 value숨겨진 입력 입력입니다.

PHP에서 업로드 정보를 볼 수 있습니다.

var_dump($_SESSION[
    ini_get('session.upload_progress.prefix')
   .ini_get('session.upload_progress.name')
   .'_myupload'
]);

출력은 다음과 유사합니다.

$_SESSION["upload_progress_myupload"] = array(
  "start_time" => 1234567890,   // The request time
  "content_length" => 57343257, // POST content length
  "bytes_processed" => 54321,   // Amount of bytes received and processed
  "done" => false,              // true when the POST handler has finished, successfully or not
  "files" => array(
    0 => array(
      "field_name" => "file1",    // Name of the <input /> field
      // The following 3 elements equals those in $_FILES
      "name" => "filename.ext",
      "tmp_name" => "/tmp/phpxxxxxx",
      "error" => 0,
      "done" => false,            // True when the POST handler has finished handling this file
      "start_time" => 1234567890, // When this file has started to be processed
      "bytes_processed" => 54321, // Number of bytes received and processed for this file
    )
  )
);

진행률 표시 줄을 만드는 데 필요한 모든 정보가 있습니다. 업로드가 아직 진행중인 경우 정보, 총 전송 될 바이트 수 및 이미 전송 된 바이트 수에 대한 정보가 있습니다.

사용자에게 업로드 진행 상황을 표시하려면 업로드하는 스크립트가 아닌 다른 PHP 스크립트를 작성하십시오. 예를 들어 세션의 업로드 정보 만보고 JSON 형식으로 반환합니다. 이 스크립트는 AJAX 및 사용자에게 제공되는 정보를 사용하여 예를 들어 매초 주기적으로 호출 할 수 있습니다.

당신도 설정하여 업로드를 취소 할 수 있습니다 $_SESSION[$key]['cancel_upload']에를 true.

자세한 정보, 추가 설정 및 사용자 의견은 PHP 설명서를 참조하십시오 .


방금 Perl을 사용하는 Mega Upload ( http://www.raditha.com/php/progress.php )가 업로드를 수행하고 진행률 표시 줄을 표시합니다.


또 다른 업 로더 전체 JS : http://developers.sirika.com/mfu/

  • 무료 (BSD 라이선스)
  • 국제화 가능
  • 크로스 브라우저 호환
  • APC를 설치할지 여부를 선택할 수 있습니다 (진행률 표시 줄을 낮추고 진행률 표시 줄을 결정하십시오).
  • dojo 템플릿 메커니즘을 사용하므로 사용자 정의 가능한 모양입니다. CSS에 따라 te 템플릿에 클래스 / ID를 추가 할 수 있습니다.

재미있게


HTML5가 소개 파일 업로드 API를 사용하면 파일 업로드의 진행 상황을 모니터링 할 수 있지만 이전 버전의 브라우저를 위해 거기 plupload 특히 모니터 파일 업로드 및 그들에 대한주고 정보를 제작하는 프레임 워크입니다. 또한 모든 브라우저에서 작동 할 수 있도록 많은 콜백이 있습니다.


Gears 및 HTML5에는 HttpRequestAJAX를 통해 파일 업로드를 제출하기위한 진행 이벤트가 개체에 있습니다.

http://developer.mozilla.org/en/Using_files_from_web_applications

다른 사람들이 이미 답변 한 다른 옵션은 다음과 같습니다.

  1. 플래시 기반 업 로더.
  2. 자바 기반 업 로더.
  3. 수신 된 데이터의 크기를보고하기 위해 웹 서버 또는 스크립트에 대한 두 번째 혜성 스타일 요청입니다. Lighttpd와 같은 일부 웹 서버는 외부 스크립트 또는 프로세스를 호출하는 오버 헤드를 줄이기 위해이 프로세스를 수행하는 모듈을 제공합니다.

기술적으로 YouTube 업로드와 유사한 네 번째 옵션이 있습니다. Gears 또는 HTML5에서는 blob을 사용하여 파일을 작은 청크로 분할하고 각 청크를 개별적으로 업로드 할 수 있습니다. 각 청크가 완료되면 진행 상태를 업데이트 할 수 있습니다.


진행률 표시 줄을 만들려면 Javascript를 사용해야합니다. 간단한 Google 검색을 통해 WebAppers Simple Javascript Progress Bar with CSS .

Dojo 파일 업로드 진행률 표시 줄 위젯 은 Dojo Javascript 프레임 워크를 사용하는 또 다른 옵션입니다.

편집 : 많은 수의 이미지 (예 : 사진 앨범)를 업로드하고 PHP 스크립트에 게시한다고 가정하면 javascript를 사용하여 게시물에서 결과를 다시 읽고 업로드 된 이미지 수에 따라 진행률 표시 줄을 업데이트 할 수 있습니다. / 총 이미지 수. 이것은 각 게시물이 완료된 후에 만 ​​업데이트하는 부작용이 있습니다. 여기 에서 JS로 게시하는 방법에 대한 정보를 확인 하세요 .


php / ajax 진행률 표시 줄을 수행 할 수 있습니다. (pear에서 Html_Ajax 라이브러리를 확인하십시오). 그러나 이것은 php에 사용자 정의 모듈을 설치해야합니다.

다른 방법은 iframe을 사용해야하며,이를 통해 php는 파일이 얼마나 업로드되었는지 확인합니다. 그러나 숨겨진 iframe은 종종 사용자 컴퓨터에 악성 데이터를 전송하는 데 사용되기 때문에 일부 브라우저 애드온에 의해 차단 될 수 있습니다.

가장 좋은 방법은 서버를 제어 할 수없는 경우 특정 형태의 플래시 진행률 표시 줄을 사용하는 것입니다.


플래시 업로드가 작업을 수행합니다. 원하는 곳에 파일을 업로드합니다. 그러나 나에게는 그것보다 더 많은 요구가 있습니다. 업로드가 완료되기 전에 파일 이름을 변경해야합니다. 이것은 플래시 솔루션에서도 가능하지만 FIXED 변수를 추가하는 경우에만 가능합니다. 파일 이름에 사용자 ID를 추가해야하는데 할 방법이 없습니다.

참고 URL : https://stackoverflow.com/questions/849237/upload-progress-bar-in-php