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如何管理会话信息.我尝试使用配置设置关闭加密,但这并没有什么区别. 我正在使用原生会话. 解决方法
会话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名称. 我的测试证明,使用本机会话驱动程序时,会话加密不会影响上载进度信息.这肯定是因为使用本机驱动程序时不使用加密来重新设置该设置. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |