【问题标题】:PHP Session Upload Progress "Undefined index: upload_progress_" WordpressPHP 会话上传进度“未定义索引:upload_progress_”Wordpress
【发布时间】:2017-03-13 02:41:50
【问题描述】:

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

关联表单 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 注意:*未定义索引:upload_progress_1468284727 in D:*****\wordpress\*****\functions.php on line 581*

“14682284727”是一个动态值(通过 time() 生成)以确保没有竞争条件,因此每次上传都是唯一的 - 希望这也可以消除任何缓存问题。我已经回显了表格中给出的时间,以及传递给进度函数和错误日志的相同变量,它们完全相同。 我没有通过 FastCGI 运行 PHP。

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

我已经对此进行了大量的调试,但没有任何进展。我被困在这一点上。 progress 函数返回 1 以打印 $_SESSION 数组,而返回空数组的大小。 没有基于闪存的解决方案。我只想知道我错过了什么,我做错了什么,我可以做得更好?

任何想法/建议将不胜感激。

【问题讨论】:

  • 你能不能把你的输入回显改成@9​​87654324@你写的方式超级不可读,而且容易出现意外的额外引号。它伤害了我的眼睛xD
  • 对不起,我完成了同意,我发布了我的最新版本。我尝试了几种不同的格式。我个人更喜欢:
  • 任何一种方式都可以。转义的引号是“戳”我眼睛的东西;)

标签: php jquery wordpress session file-upload


【解决方案1】:

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

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

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

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

contentType: false,
processData: false,

更多信息jQuery.ajax() API documentation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-06
    • 2017-02-02
    • 2016-08-20
    • 1970-01-01
    • 2016-06-07
    • 2012-08-02
    • 2019-07-04
    相关资源
    最近更新 更多