누구든지 PHP에서 업로드 진행률 표시 줄을 얻는 방법을 알고 있습니까? 사진 앨범 업 로더 용 코드를 작성하려고합니다. 사진이 업로드되는 동안 진행률 표시 줄을 표시하고 싶습니다.
나는 PHP를 처음 접하기 때문에 그것에 대한 모든 것을 알지 못합니다.
답변:
이것은 지금까지 인터넷 검색 및 스크립트 시도 후 가장 간단하고 가장 좋은 업 로더입니다.
https://github.com/FineUploader/fine-uploader
APC 또는 기타 외부 PHP 라이브러리가 필요하지 않으며 공유 호스트에서 파일 진행 피드백을받을 수 있으며 html5 드래그 앤 드롭 (개인적으로 테스트되지 않은) 및 여러 파일 업로드를 지원한다고 주장합니다.
필자가 아는 한 순수한 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.enabled
을 On
in 으로 설정하여 업로드 진행 정보 수집을 활성화해야 합니다 .php.ini
.
그런 다음 다른 파일 입력 바로 앞에 숨겨진 입력을 HTML 업로드 양식에 추가합니다 . name
숨겨진 입력의 HTML 속성 은 session.upload_progress.name
from 지시문의 값과 같아야합니다 php.ini
(결국 앞에 session.upload_progress.prefix
). 그만큼value
속성은이 세션 키의 일부로 사용됩니다, 당신에게 달려 있습니다.
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 설명서를 참조하십시오 .
또 다른 업 로더 전체 JS : http://developers.sirika.com/mfu/
재미있게
HTML5가 소개 파일 업로드 API를 사용하면 파일 업로드의 진행 상황을 모니터링 할 수 있지만 이전 버전의 브라우저를 위해 거기 plupload 특히 모니터 파일 업로드 및 그들에 대한주고 정보를 제작하는 프레임 워크입니다. 또한 모든 브라우저에서 작동 할 수 있도록 많은 콜백이 있습니다.
Gears 및 HTML5에는 HttpRequest
AJAX를 통해 파일 업로드를 제출하기위한 진행 이벤트가 개체에 있습니다.
http://developer.mozilla.org/en/Using_files_from_web_applications
다른 사람들이 이미 답변 한 다른 옵션은 다음과 같습니다.
기술적으로 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은 종종 사용자 컴퓨터에 악성 데이터를 전송하는 데 사용되기 때문에 일부 브라우저 애드온에 의해 차단 될 수 있습니다.
가장 좋은 방법은 서버를 제어 할 수없는 경우 어떤 형태의 플래시 진행률 표시 줄을 사용하는 것입니다.