php – 会话上传进度

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 会话上传进度脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试将会话上传进度功能( http://php.net/manual/en/session.upload-progress.php)用于Kohana.我已经设法使用以下代码在没有Kohana的情况下在本地工作:

<?PHP
    session_start();
    if (isset($_GET['PRogress']))
    {
        // does key exist
        $key = ini_get("session.upload_progress.prefix") . 'demo';
        if ( !isset( $_SESSION[$key] ) ) exIT( "uploading..." );

        // workout PErcentage
        $upload_progress = $_SESSION[$key];
        $progress = round( ($upload_progress['bytes_processed'] / $upload_progress['content_length']) * 100,2 );

        exit( "Upload progress: $progress%" );
    }
?>
<!doctype htML>
<head>
</head>
<body>
    <section>
        <h1>Upload Form</h1>
        <form action="" method="POST" enctype="multipart/form-data" target="upload-frame">
            <input type="hidden" name="<?PHP echo ini_get("session.upload_progress.name"); ?>" value="<?PHP //echo $uid; ?>demo">
            <p>
                <label>File:</label>
                <input type="file" name="file" required="required">
            </p>
            <p><input type="submit" name="submit" value="Upload"></p>
        </form>

        <iframe id="upload-frame" name="upload-frame" width="1280" height="600"></iframe>

        <div id="file_upload_progress"></div>
    </section>

    <script src="jquery-1.7.1.min.js"></script>
    <script>
        $(document).ready(function() {

            VAR uploading = false;
            $('form').submit(function() {

                uploading = true;
                $('#upload-frame').one('load',function(){
                    uploading = false;
                });

                function update_file_upload_progress() {
                    $.get("?progress",function(data) {
                        $("#file_upload_progress").html(data);
                        if (uploading) {
                            setTimeout( update_file_upload_progress,500 );
                        }
                    })
                    .error(function(jqXhr,error) { 
                        alert(error); 
                    });
                }

                // First call
                update_file_upload_progress();
            });
      });
    </script>
</body>
</html>

但是,当我在Kohana中使用此代码(当然将PHP分离为控制器)时,不会创建$_SESSION变量来跟踪上载的进度.

我相信这与Kohana会议的工作方式有关.我不能在脚本的开头有session_start(),因为它与已经运行的Kohana会话冲突.如果我转储$_SESSION或Session :: instance()内容,那么应该PHP Upload Progress功能添加的变量不存在.

那么如何让会话变量与Kohana一起使用?

UPDATE

我已经创建了一个干净的Kohana安装,以帮助缩小这个问题.我发现,通过不在Kohana实例化Session类,我可以使用上面的代码,它工作正常.

但是,当Session类被实例化时,它需要用于我的Web应用程序,它将停止工作,并且不再创建包含上载进度的$_SESSION变量.这让我相信问题在于Kohana如何管理会话信息.我尝试使用配置设置关闭加密,但这并没有什么区别.

我正在使用原生会话.

@L_360_18@

会话cookie名称必须与PHP config(session.name)中设置的名称完全相同,例如:

return array(
    'native' => array(
        'encrypted' => FALSE,'name'      => ini_get('session.name'),),);

如果您不想使用PHP认会话cookie名称,则不会通过在运行时设置该值来解决此问题,即这不起作用:

ini_set('session.name','my_kohana_session_name');

您可以通过设置.htaccess文件中的值来解决此问题:

PHP_flag session.name "my_kohana_session_name"

这样你可以保持PHP.ini不受影响,但你可以保留你的Kohana应用程序的自定义cookie名称.

我的测试证明,使用本机会话驱动程序时,会话加密不会影响上载进度信息.这肯定是因为使用本机驱动程序时不使用加密来重新设置该设置.

本图文内容来网友网络收集整理提供,作为学习参考使用,版权属于原作者。

脚本宝典总结

以上是脚本宝典为你收集整理的php – 会话上传进度全部内容,希望文章能够帮你解决php – 会话上传进度所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。