PHP에서 진행률 표시줄 업로드
php로 업로드하는 프로그레스 바를 얻을 수 있는 방법을 아는 사람 있나요?사진첩 업로더의 코드를 작성하려고 합니다.사진 업로드 중에 진행 표시줄을 표시해 주셨으면 합니다.
저는 php에 대해 잘 모르기 때문에 모든 것을 알 수 없습니다.
이것은 지금까지 발견된 것 중 가장 셋업이 간단하고 가장 좋은 업로더입니다(몇 시간 동안 검색 및 스크립트 실행 후).
https://github.com/FineUploader/fine-uploader
APC나 다른 외부 PHP 라이브러리가 필요하지 않으며 공유 호스트에서 파일 진행률 피드백을 받을 수 있으며 html5 드래그 앤 드롭(개인적으로 테스트되지 않음) 및 여러 파일 업로드를 지원한다고 주장합니다.
APC가 설치되어 있는 경우 업로드 진행을 위한 콜백훅이 있습니다.
Rasmus Lerdorf(PHP의 크리에이터)는 YUI(아, 그리고 여기 PHP 소스)를 사용하여 샘플이 있습니다.
제가 아는 한 PHP 업로드 진행률 바 또는 PHP/Javascript 업로드 진행률 바는 PHP가 동작하기 때문에 불가능합니다.플래시 업로더를 사용하는 것이 가장 좋습니다.
AFAIK 이것은 $_FILES를 포함한 모든 슈퍼글로블이 채워질 때까지 스크립트가 실행되지 않기 때문입니다.PHP 스크립트가 호출될 때까지 파일은 완전히 업로드됩니다.
편집: 이것은 더 이상 사실이 아닙니다.2010년의 일입니다.
PHP와 같은(5.2+) 플래시를 사용하지 않는 방법 중 하나가 나에게 적합했습니다.
우선, 「업로드 프로그레스」확장을 기동해 실행하는 방법에 대해, 이 투고를 참조해 주세요.
그런 다음 파일을 업로드하는 폼이 포함된 페이지에서 다음 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);"
이제 양식에 숨겨진 iframe이 표시되며 업로드 진행 상황이 표시됩니다.php "Submit"을 클릭하여 파일 업로드를 시작합니다.$upload_id는 숨김 필드 "UPLOAD_"의 값으로 사용하는 것과 같아야 합니다.식별자"를 참조하십시오.
업로드 진행 상황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>
는 매초 자동 갱신됩니다.원하는 경우 여기에 아름다운 시각적 진행 표시줄을 추가할 수 있습니다(다른 색상으로 중첩된 2개의 <div> 등).업로드 진행이 있는 iframe은 업로드 진행 중에만 자동으로 작동하며 폼이 전송되고 브라우저가 다음 페이지로 새로고침되면 표시 수명이 종료됩니다.
업로드 진행률 표시줄의 구현은 쉽고 추가 PHP 확장, JavaScript 또는 Flash가 필요하지 않습니다.단, PHP 5.4 이후가 필요합니다.
지시어를 다음과 같이 설정하여 업로드 진행률 정보 수집을 활성화해야 합니다.On
php.ini
.
그런 다음 숨김 입력을 HTML 업로드 양식에 다른 파일 입력 바로 앞에 추가합니다.HTML 속성name
이 숨겨진 입력의 값은 다음 명령의 값과 같아야 합니다.php.ini
(결국 뒤에 가 붙습니다).그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 설치 여부는 사용자가 선택할 수 있습니다(프로그레스 바를 밑도는 종료 VS 판별 프로그레스 바).
- 도조 템플릿 메커니즘을 사용하여 커스터마이즈 가능.css에 따라 클래스/ID를 템플릿에 추가할 수 있습니다.
즐겁게 보내세요
HTML5는 파일 업로드의 진행 상황을 감시할 수 있는 파일 업로드 API를 도입했습니다만, 오래된 브라우저에서는 파일 업로드를 감시하고 그에 대한 정보를 제공하기 위해 특별히 만들어진 프레임워크를 업로드하고 있습니다.게다가 콜백이 풍부하기 때문에, 모든 브라우저로 동작할 수 있습니다.
Gears와 HTML5의 진행상황은HttpRequest
AJAX를 통해 파일 업로드를 제출하기 위한 개체입니다.
http://developer.mozilla.org/en/Using_files_from_web_applications
다른 사용자가 이미 응답한 다른 옵션은 다음과 같습니다.
- 플래시 기반 업로더
- 자바 기반 업로더
- 웹 서버에 대한 두 번째 Comet 스타일의 요청 또는 수신된 데이터의 크기를 보고하는 스크립트.Lighttpd와 같은 일부 웹 서버는 외부 스크립트 또는 프로세스를 호출하는 오버헤드를 줄이기 위해 이 작업을 수행하는 모듈을 제공합니다.
기술적으로는 YouTube 업로드와 유사한 네 번째 옵션이 있습니다. Gears 또는 HTML5에서는 BLOB을 사용하여 파일을 작은 덩어리로 분할하고 각 덩어리를 개별적으로 업로드할 수 있습니다.각 청크가 완료되면 진행 상태를 업데이트할 수 있습니다.
진행 표시줄을 만들려면 Javascript를 사용해야 합니다.간단한 구글 검색을 통해 다음 기사를 볼 수 있었습니다.WebAppers 심플 Javascript 프로그레스바(CSS 포함)
Dojo 파일 업로드 진행 표시줄 위젯은 Dojo Javascript 프레임워크를 사용하는 또 다른 옵션입니다.
편집: 다수의 이미지(사진앨범 등)를 업로드하여 PHP 스크립트에 POST한다고 가정하면 javascript를 사용하여 포스트에서 결과를 읽고 업로드된 이미지 수/총 이미지 수에 따라 진행 표시줄을 업데이트할 수 있습니다.이로 인해 각 투고가 완료된 후에만 업데이트가 되는 부작용이 있습니다.JS에서 게시하는 방법에 대한 자세한 내용은 여기를 참조하십시오.
php/ajax 진행 표시줄을 수행할 수 있습니다(Html_Ajax 라이브러리를 확인하십시오).단, 이를 위해서는 php에 커스텀모듈을 설치해야 합니다.
다른 방법에서는 iframe을 사용해야 하며, 이를 통해 php는 업로드된 파일의 양을 확인합니다.그러나 숨겨진 iframe은 사용자 컴퓨터에 악의적인 데이터를 보내는 데 사용되는 경우가 많기 때문에 일부 브라우저 추가 기능에 의해 차단될 수 있습니다.
서버를 제어할 수 없는 경우 어떤 형식의 플래시 진행 표시줄을 사용하는 것이 가장 좋습니다.
언급URL : https://stackoverflow.com/questions/849237/upload-progress-bar-in-php
'programing' 카테고리의 다른 글
$str[0] 문자열의 첫 번째 문자 가져오기 (0) | 2022.10.10 |
---|---|
Django에서 고정 장치를 로드할 때 내용 유형에 문제가 있습니다. (0) | 2022.10.10 |
Laravel 요구::all()을 스태틱하게 호출하지 말 것 (0) | 2022.10.10 |
Maria DB 도커 액세스가 사용자 'root'@'localhost'에 대해 거부되었습니다. (0) | 2022.10.10 |
심플한 Java 인메모리 캐시를 찾고 있다 (0) | 2022.10.10 |