PHP에서 업로드 진행률 막대를 얻는 방법을 아는 사람이 있습니까? 사진 앨범 업 로더 용 코드를 작성하려고합니다. 사진을 업로드하는 동안 진행률 표시 줄을 표시하고 싶습니다.PHP의 진행률 막대 업로드
나는 php에 상당히 익숙하지 않기 때문에 그것에 대해 모든 것을 모른다.
PHP에서 업로드 진행률 막대를 얻는 방법을 아는 사람이 있습니까? 사진 앨범 업 로더 용 코드를 작성하려고합니다. 사진을 업로드하는 동안 진행률 표시 줄을 표시하고 싶습니다.PHP의 진행률 막대 업로드
나는 php에 상당히 익숙하지 않기 때문에 그것에 대해 모든 것을 모른다.
재미 그것은 APC 또는 기타 외부 PHP 라이브러리를 필요로하지 않습니다
https://github.com/FineUploader/fine-uploader
을 발견했습니다, 나는 공유 호스트 파일의 진행 상황 피드백을 얻을 수 있으며, HTML5의 드래그 앤 드롭 (개인적으로 테스트되지 않은) 및 다중를 지원하기 위해 주장 파일 업로드. 나를 위해 잘 작동 (5.2 이상) &없는 플래시 방법
당신은 이것을 믿고 싶습니다 : https://github.com/valums/file-uploader - 같은 저자. –
그리고 PHP가 제공하는 [Session Upload Progress] (http://www.php.net/manual/en/session.upload-progress.php)에서 파일 업로드를위한 진행 상황을 확인할 수 있습니다. – hakre
@hakre에서 언급 한 세션 업로드 진행 기능에는 아직 베타 버전 인 PHP 5.4가 필요합니다. 그러나 비슷한 기능이 PHP 5.2의 [Alternative PHP Cache] (http://us3.php.net/manual/en/ref.apc.php)에서 소개되었습니다. – arlomedia
순수한 PHP 업로드 진행률 표시 줄 또는 심지어 PHP/Javascript 업로드 진행률 표시 줄은 PHP 작동 방식 때문에 불가능하다고 말한 것이 유감입니다. 가장 좋은 방법은 어떤 형태의 플래시 업 로더를 사용하는 것입니다.
AFAIK 이것은 모든 슈퍼 글로블이 채워질 때까지 스크립트가 실행되지 않기 때문입니다. 여기에는 $ _FILES가 포함됩니다. PHP 스크립트가 호출 될 때까지 파일이 완전히 업로드됩니다.
편집 : 이것은 더 이상 적용되지 않습니다.
왜 세 downvotes? 사실이고 그들은 완전히 정당화되지 않았습니다. 나에게 네이티브 PHP에서 실행되는 진행 표시 줄을 보여줄 누군가를 감히하고 추가 확장/아파치 모듈/perl 스크립트/다른 것들을 필요로하지 않습니다. –
글쎄, 2011 년이고 HTML5 덕분에 가능해졌습니다. 첫 번째 응답을 참조하십시오. http://stackoverflow.com/questions/76976/how-to-get-progress-from-xmlhttprequest – Zarel
글쎄, 2012 년이며 XMLHttpRequest를 통한 HTML5의 파일 업로드는 모든 주요 브라우저에서 아직 사용할 수 없습니다. . –
진행률 표시 줄을 만들려면 Javascript를 사용해야합니다. 단순한 Google 검색을 통해이 기사에 도달했습니다 : WebAppers Simple Javascript Progress Bar with CSS.
Dojo File Upload Progress Bar Widget은 Dojo Javascript 프레임 워크를 사용하는 또 다른 옵션입니다.
편집 : 사진 앨범과 같은 다수의 이미지 업로드를 가정하고 PHP 스크립트에 게시하면 JavaScript를 사용하여 게시물에서 결과를 읽고 다시 업로드 된 이미지 수/총 이미지 수. 이것은 각 게시물이 완료된 후에 만 갱신하는 부작용이 있습니다. JS 게시 방법에 대한 정보는 here을 확인하십시오.
-1 Javascript 진행률 표시 줄은 좋지만 볼 수있는 한 파일 업로드와는 아무 관련이 없습니다. 그리고 Dojo 업로드 진행률 표시 줄은 PHP에 대한 인터페이스를 제공하지 않습니다. 내가 틀렸다면 저를 고쳐주세요. –
PHP/ajax 진행률 표시 줄을 수행 할 수 있습니다. (배에서 Html_Ajax 라이브러리를 확인하십시오.) 그러나 이것은 PHP에 사용자 정의 모듈을 설치해야합니다.
다른 방법을 사용하려면 파일의 양이 업로드 된 것을보기 위해 PHP를 통해 iframe을 사용해야합니다. 그러나 숨겨진 iframe은 종종 악의적 인 데이터를 사용자 컴퓨터로 보내는 데 사용되기 때문에이 숨겨진 iframe은 일부 브라우저 애드온에 의해 차단 될 수 있습니다.
가장 좋은 방법은 서버를 제어 할 수없는 경우 플래시 진행률 표시 줄을 사용하는 것입니다.
방금 업로드를 수행하고 진행률 표시 줄을 표시하는 메가 업로드 (http://www.raditha.com/php/progress.php)가 perl을 사용하는 것으로 나타났습니다.
APC이 설치되어있는 경우 업로드 진행을위한 콜백 훅이 있습니다.
Rasmus Lerdorf (PHP 작성자)는 YUI를 사용하여 sample (PHP source)을 사용하고 있습니다.
the documentation here을 참조하십시오.
플래시 업로드가 작업을 수행합니다. 원하는 파일을 업로드합니다. 그러나 저보다 더 많은 요구가 있습니다. 업로드가 완료되기 전에 파일 이름을 변경해야합니다. 이것은 FIXED 변수를 추가하는 경우에만 플래시 솔루션에서도 가능합니다. 내가 파일 이름에 사용자 ID를 추가해야하고 그것을 할 방법이 없습니다.
기어 및 HTML5는 AJAX를 통해 파일 업로드를 제출하는 HttpRequest
개체에 progress 이벤트가 있습니다.이미 다른 사람이 대답
http://developer.mozilla.org/en/Using_files_from_web_applications
귀하의 다른 옵션은 다음과 같습니다
은 기술적으로는 작은 조각으로 파일을 분할하고 개별적으로 각 청크를 업로드하는 모양을 사용할 수있는 기어 또는 HTML5와 유튜브 업로드 유사한 규정 옵션,있다. 각 청크가 완료되면 진행 상태를 업데이트 할 수 있습니다.
또 다른 업 로더 전체 JS : http://developers.sirika.com/mfu/
가지고 당신의 CSS에 따라 테 템플릿에서 클래스/ID를 추가 할 수 있습니다이에 의해 지금까지 설정하는 간단한과 나 '좋은 업 로더 (인터넷 검색 및 스크립트를 시도하는 시간 후)입니다
한 PHP 틱 :
먼저, "uploadprogress"연장까지하고 실행하는 방법을 설명 this 게시물을 참조하십시오.
<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을 만들
이제 폼에 숨겨진 iframe이 표시되어 "제출"을 클릭하여 파일 업로드를 시작하면 uploadprogress.php의 내용이 표시됩니다. $ upload_id는 양식의 숨겨진 필드 "UPLOAD_IDENTIFIER"값으로 사용중인 것과 동일해야합니다.
업로드 진행 중입니다.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> div 중첩 된 두 가지 색상). 업로드 진행 상태의 iframe은 자연스럽게 업로드가 진행되는 동안에 만 작동하며 양식이 제출되고 브라우저가 다음 페이지로 다시로드되면 표시 수명이 종료됩니다.
어떻게 PHP에서 $ _FILES없이 파일을 업로드 할 수 있습니까? –
HTML5는 파일 업로드 진행률을 모니터링 할 수 있지만 이전 브라우저의 경우 파일 업로드를 모니터링하고 해당 정보를 제공하는 프레임 워크가 plupload입니다. 게다가 모든 콜백에서 콜백이 가능하므로 모든 브라우저에서 작동 할 수 있습니다.
업로드 진행률 막대의 구현은 쉽고 추가 PHP 확장, JavaScript 또는 플래시가 필요하지 않습니다. 그러나 PHP 5.4 이상 필요합니다.
session.upload_progress.enabled
을 On
의 php.ini
으로 설정하여 업로드 진행 정보를 수집하도록 설정해야합니다.
그런 다음 HTML 업로드 양식에 숨겨진 입력을 앞에 추가하고 다른 파일 입력을 추가하십시오. 숨겨진 입력의 HTML 속성 name
은 session.upload_progress.name
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와 사용자에게 제공된 정보를 사용하여 주기적으로 호출 할 수 있습니다 (예 : 1 초마다).
$_SESSION[$key]['cancel_upload']
을 true
으로 설정하여 업로드를 취소 할 수도 있습니다.
자세한 내용은 추가 설정 및 사용자 의견은 PHP manual을 참조하십시오.
http : // stackoverflow.co.kr/questions/10477135/간단한 크로스 브라우저 - jquery - PHP와 함께 파일 업로드 - 진행률 표시 줄/10477249 # 10477249 –