使用自定义会话处理程序的PHP会话上载进度

使用自定义会话处理程序的PHP会话上载进度,php,session,Php,Session,PHP5.4提供了指示。我注意到它可以工作,但只有当session.save\u handler设置为files,并且session.name未被修改时,它才能工作。修改这些值后,超全局$\u会话['upload\u progress\u']即为空/未设置 是否可以提供会话上载进度指示,但需要自定义会话处理?甚至save handlermemcache也不起作用…正如@Marc指出的那样:在上传过程中,在控制权移交给用户的PHP代码之前,会话上传进度指示正在运行。因此,php上载处理程序使用.i

PHP5.4提供了指示。我注意到它可以工作,但只有当
session.save\u handler
设置为
files
,并且
session.name
未被修改时,它才能工作。修改这些值后,超全局
$\u会话['upload\u progress\u']
即为空/未设置


是否可以提供会话上载进度指示,但需要自定义会话处理?甚至save handler
memcache
也不起作用…

正如@Marc指出的那样:在上传过程中,在控制权移交给用户的PHP代码之前,会话上传进度指示正在运行。因此,php上载处理程序使用
.ini
文件中的配置数据集,并且只能使用当时可用的模块

只要在
.ini
文件中配置了所有内容,就可以使用
memcache
保存处理程序,或指定不同的会话名称:

session.save_handler = memcache
session.save_path = "tcp://198.51.100.1:11211?persistent=1&weight=1&timeout=1&retry_interval=15,tcp://198.51.100.2:11211?persistent=1&weight=1&timeout=1&retry_interval=15"
session.name = "myUploadProgressSession"

无法通过代码中的
ini\u集(“session.save\u handler”,“memcache”)
指定这些设置,因为这执行得太晚了。

虽然session.upload\u进度确实只有在session.save\u handler设置为文件时才起作用,但仍然可以对其进行管理。在检查上传进度的ajax调用中,只需避免使用user session.save_处理程序。上载完成后,您可以通过在用户会话设置中执行以下操作,删除不需要的sess_xxx文件,这些文件将保留在临时目录中:

//setup the garbage collection parameters which will be used by both the user and file session.save_handler

ini_set('session.gc_maxlifetime', $this->tempo);
ini_set('session.gc_probability', '1');
ini_set('session.gc_divisor', '100');

//destroy the sess_xxx files left from the file session.save_handler for *this* session 
//and let the GC remove any which are left over from the file save_handler for *other sessions*

ini_set('session.save_handler', 'files');
session_start();
session_unset();
session_destroy(); //this will remove the sess_xxx temp files

//now set the handler to user defined

ini_set('session.save_handler', 'user');

不可以。这样看-php必须能够加载会话文件,以使用上载进度更新会话密钥,并且完全独立于您的代码执行此操作。如果您使用的是自定义处理程序,PHP必须能够以某种方式完成处理程序所做的所有事情,但不需要知道您的代码!thxIn Fedora/Centos您必须小心,因为有一个apache文件conf.d/php.conf覆盖了php.ini设置。对我来说,最好的方法是在.htacess文件中进行设置,这样应用程序和进度上传程序都将使用相同的会话配置。