누구든지 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/
- 무료 (BSD 라이선스)
- 국제화 가능
- 크로스 브라우저 호환
- APC를 설치할지 여부를 선택할 수 있습니다 (진행률 표시 줄을 낮추거나 진행률 표시 줄을 결정).
- dojo 템플릿 메커니즘을 사용하므로 사용자 정의 가능한 모양입니다. CSS에 따라 te 템플릿에 클래스 / ID를 추가 할 수 있습니다.
재미있게
답변
HTML5가 소개 파일 업로드 API를 사용하면 파일 업로드의 진행 상황을 모니터링 할 수 있지만 이전 버전의 브라우저를 위해 거기 plupload 특히 모니터 파일 업로드 및 그들에 대한주고 정보를 제작하는 프레임 워크입니다. 또한 모든 브라우저에서 작동 할 수 있도록 많은 콜백이 있습니다.