0

PHP5.4 提供会话上传进度指示。我注意到它有效,但前提session.save_handler是设置为files,并且session.name未修改。一旦我修改了这些值,超全局$_SESSION['upload_progress_<key>']就为空/未设置。

是否可以提供会话上传进度指示,但使用自定义会话处理?即使保存处理程序memcache也不起作用......

4

2 回答 2

2

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

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

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_set("session.save_handler", "memcache")代码指定这些设置,因为执行得太晚了。

于 2013-01-16T16:52:22.700 回答
0

虽然 session.upload_progress 只有在 session.save_handler 设置为文件时才会起作用,但仍然可以对其进行管理。在您检查上传进度的 ajax 调用中,只需避免使用用户 session.save_handler。上传完成后,您可以删除不需要的 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');
于 2015-03-26T11:33:49.983 回答