2016-07-12 2 views
0

파일 업로드 진행률 표시 줄을 만들고있어 제대로 작동하지 않습니다. 상대 코드는 다음과 같습니다.PHP 세션 업로드 진행 "Undefined index : upload_progress_"Wordpress

사용 설명서의 내용을 숙지 양식 HTML에게 내가 포럼 수십 겪었어요

function uploadProgress(){ 

    $key = ini_get("session.upload_progress.prefix") . $_POST[ini_get("session.upload_progress.name")]; 
/*** error line ***/ echo print_r($_SESSION[$key]); 
    if(!empty($_SESSION[$key])) { 
     $current = $_SESSION[$key]["bytes_processed"]; 
     $total = $_SESSION[$key]["content_length"]; 
     echo $current < $total ? ceil($current/$total * 100) : 100; 
    }else { 
     echo 'empty'; 
    } 

    wp_die(); 
} 

<form action="" method="post" id="uploadForm" enctype="multipart/form-data"> 
      <div id="uploadFields"> 
       <?php 
        $val = time(); 
        echo '<input type="hidden" class="progress" name="'.ini_get('session.upload_progress.name').'" value="'.$val.'" required />"; 
       ?> 
       <label>Select file to upload:</label> 
        <input type="file" name="fileToUpload" id="fileToUpload" required><br><br> 

은 ajax.js

$(document).ready(function(){ 
$('#uploadForm').submit(function(){ 
/***I insert picture to upload page, this responds to my later AJAX request***/ 
    sendRequest(); 
}); 
}); 

function sendRequest() { 
var progress = $(".progress").val(); 
$.ajax({ 
    type: "POST", 
    url: ajaxurl, 
    data: { 
     PHP_SESSION_UPLOAD_PROGRESS: progress, 
     action: "uploadProgress" 
    }, 
    success:function(result){ 
     console.log(result); 
     handleResponse(result); 
    } 
}); 
} 

function handleResponse(result) { 
if (result < 100) { 
    $("#loading-gif").css("left", result + "%"); 
    setTimeout("sendRequest()", 1000); 
} 
} 

PHP 진행 기능과 관련 그리고 나 php.net에서 nstructions,이 일을하려고 다른 형태의 시도했지만 작동하지 않습니다. 특히, 위의 코드를 사용하면 오류 로그가 표시됩니다. PHP 알림 : * 정의되지 않은 색인 : D : ***** \ wordpress \ ***** \ function.php 581 행의 * upload_progress_1468284727 *

'14682284727'은 경쟁 조건이 없음을 보장하고 각 업로드가 고유하도록 동적 값 (시간())으로 작성됩니다. 캐싱 문제도 제거해야합니다. 주어진 시간을 폼에서 출력했고, 동일한 변수가 진행 함수와 오류 로그에 전달되었으며, 이들은 똑같습니다. FastCGI를 통해 PHP를 실행하지 않습니다.

나는 모든 session_upload_progress 관련 지침,에 중요한 session.upload_progress.enabled = php.ini 파일에서 설정 한 session.upload_progress.cleanup = 오프,이 날 배열을 인쇄 할 수 있도록해야한다 . 모든 파일/폴더에 대한 관리자 권한으로 PHP 5.4.5를 실행 중입니다. 다른 모든 세션 변수가 유지되고 있으며 페이지에서 페이지로 성공적으로 사용하고 있습니다.

어리석은 양의 디버깅을했지만 아무런 진전이 없었습니다. 나는이 시점에서 붙어있다. progress 함수는 $ _SESSION 배열을 인쇄 할 때 1을 반환하고 배열 크기만큼 비 웁니다. 플래시 기반 솔루션이 없습니다. 나는 내가 무엇을 놓쳤는 지, 내가 뭘 잘못하고 있는지, 내가 더 잘할 수 있는지 알고 싶다.

모든 아이디어/제안이 가장 만족 스러울 것입니다.

+0

jQuery.ajax() API documentation에 당신은 단지 '에코'<입력 유형 = "숨겨진"에 에코 입력을 변경할 수 있습니다

당신의 AJAX에서 또한

하면 사람들은이 false로 변경해야 전화 "value =" '. $ val.' "required /> ';'작성한 방법은 읽을 수없고 읽기 쉽습니다. 실수로 추가 인용문. 그리고 그것은 내 눈을 아프게 xD –

+0

죄송합니다, 나는 동의합니다, 나는 최신 버전을 게시했습니다. 몇 가지 다른 형식을 시도했습니다. 나는 개인적으로 선호한다 :

+0

어느 쪽이든 괜찮습니다. 이스케이프 인용문은 눈에 나를 찔렀다.) –

답변

0

이전 질문이지만 문제 해결에 걸림돌이되는 사람에게 도움이됩니다.

세션을 사용하여 업로드 진행을 올바르게 수행하기위한 모든 요구 사항을 충족 시키려면 세션 파일을 수동으로 확인하여 문제 해결을 시작할 수 있습니다. 서버 구성에 따라 경로가 달라 지므로 session_save_path()으로 확인할 수 있습니다.

파일이 올바르게 생성 된 경우 개발자 도구를 통해 전송되는 내용과 순서를 수동으로 확인해야합니다.

contentType: false, 
processData: false, 

더 많은 정보