这个问题被问了几百次,但是我在三天之后就遇到了这个问题,而且我总是很困惑。
我无法强制PHP在$ _SESSION(http://www.php.net/manual/en/session.upload-progress.php)中保存有关上传文件的详细信息。我所能获得的只是空会话。
我的代码最简单的例子:
的index.php
<?php
session_start();
$_SESSION['test'] = 'TEST';
?>
<form action="index.php" method="POST" enctype="multipart/form-data">
<input type="hidden" name="<?php echo ini_get("session.upload_progress.name"); ?>" value="123" />
<input type="file" name="file1" />
<input type="file" name="file2" />
<input type="submit" />
</form>
<?php
print_r($_SESSION);
?>
结果 - 点击提交后;)
Array ( [test] => TEST ) // nothing more...
php -i | grep upload_progress
session.upload_progress.cleanup => Off => Off
session.upload_progress.enabled => On => On
session.upload_progress.freq => 1% => 1%
session.upload_progress.min_freq => 1 => 1
session.upload_progress.name => PHP_SESSION_UPLOAD_PROGRESS => PHP_SESSION_UPLOAD_PROGRESS
session.upload_progress.prefix => upload_progress_ => upload_progress_
php -i | grep size
post_max_size => 2G => 2G
realpath_cache_size => 16K => 16K
upload_max_filesize => 2G => 2G
Command buffer size => 4096
Read buffer size => 32768
参考书目:
https://stackoverflow.com/a/21851657/1125465 - 据我所知,我的配置中每个都可以。
https://stackoverflow.com/a/13186859/1125465 - 尝试了所有脚本和所有版本。 SESSION superglobal对每一个都是空的。
https://stackoverflow.com/a/11485170/1125465 - 我评论这个答案......不是答案。
请帮忙!我开始放松心情了。最好的问候。
UPDATE phpinfo()结果截图:
值得注意的是,文件正在上传到tmp目录,没有任何麻烦。
答案 0 :(得分:2)
我认为你错过了documentation
中最重要的部分QUOTE
启用session.upload_progress.enabled INI选项后,PHP将能够跟踪正在上载的各个文件的上传进度。此信息对于实际上载请求本身并不特别有用,但在文件上载期间,应用程序可以将POST请求发送到单独的端点(例如,通过XHR)以检查状态。
这意味着会话信息仅在上传过程中可用。
因此,您必须在上传页面中编写一些javascript,以在服务器上触发另一个脚本来查询此信息并将其返回到javascript,以便您可以操纵滑块或用于显示的任何机制用户上传的进度。上传完成后,会话中的信息将被废弃。
答案 1 :(得分:2)
我有完全相同的问题。 解决方案是简单地将处理程序从FastCGI替换为PHP-FPM。 也适用于Mod PHP,但即使使用新的PHP,它也无法在FastCGI上运行。