PHP会话上传进度"未定义索引:upload_progress _" WordPress的

时间:2016-07-12 01:33:54

标签: php jquery wordpress session file-upload

我正在创建文件上传进度条,但我无法让它正常工作。相关代码如下。

关联表单HTML

<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进度函数

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();
}

我已经浏览了几十个论坛,阅读了php.net上的手册和说明,尝试了不同形式的尝试使其工作,但它无法正常工作。 具体来说,使用上面的代码,我得到错误日志: PHP注意: *未定义的索引:在第581行的D:***** \ wordpress \ ***** \ functions.php中的upload_progress_146828472 *

&#39; 14682284727&#39;是一个动态值(通过time())来确保没有竞争条件,并且每次上传都是唯一的 - 希望这也应该删除任何缓存问题。我已经回显了表单中给出的时间,以及传递给progress函数的相同变量,以及错误日志,它们完全相同。 我没有通过FastCGI运行PHP。

我在PHP.ini中设置了所有与session_upload_progress相关的指令,重要的是 session.upload_progress.enabled = On session.upload_progress.cleanup =关闭 ,这应该允许我打印出阵列。 我运行PHP 5.4.5,管理员访问所有文件/文件夹。保留所有其他会话变量,我在页面之间成功使用它们。

我做了一个荒谬的调试,但没有任何进展。我在这一点上陷入困​​境。 progress函数返回1以打印$ _SESSION数组,并为数组大小返回空。 没有闪存解决方案。我只是想知道我错过了什么,我做错了什么,我能做得更好?

任何想法/建议都会非常感激。

1 个答案:

答案 0 :(得分:0)

一个老问题,但也许这会帮助任何遇到同样问题的人进行故障排除。

如果您确定满足使用会话正确执行上载进度的所有要求,则可以通过手动检查会话文件来开始进行故障排除。根据您的服务器配置,其路径会有所不同,您可以使用session_save_path()进行检查。

如果文件生成正确,您应该使用开发人员的工具手动检查发送的内容和顺序。

同样在您的AJAX调用中,您必须将这两个更改为false:

contentType: false,
processData: false,

有关jQuery.ajax() API documentation

的更多信息