Bug #63414 [Com]: built-in upload progress mechanism does not work with custom session handler
| From: | anton dot gudkov at flatstack dot com | Date: | Thu, 06 Dec 2012 15:53:21 +0000 |
| Subject: | Bug #63414 [Com]: built-in upload progress mechanism does not work with custom session handler | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-175168@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=63414&edit=1
ID: 63414
Comment by: anton dot gudkov at flatstack dot com
Reported by: xergin at gmail dot com
Summary: built-in upload progress mechanism does not work
with custom session handler
Status: Feedback
Type: Bug
Package: *General Issues
Operating System: ubuntu 12.04 x86_64
PHP Version: 5.4.8
Block user comment: N
Private report: N
New Comment:
Hi. Here is the script example which reproduces "upload progress doesn't work".
Sorry for the huge script, but it couldn't be more simplier. Here is it:
<?php
/* if you set any writeable/readable dir to store sessions
upload progress will not work. But if you comment this line,
it will work. */
session_save_path('/tmp');
session_start();
$uploadName = 'test'; //upload unique name
if (isset($_GET['ajax'])) {
if (isset($_SESSION["upload_progress_$uploadName"])) {
$progress = $_SESSION["upload_progress_$uploadName"];
$percent = round(100 * $progress['bytes_processed'] /
$progress['content_length']);
echo "Upload progress: $percent%<br /><pre>" . print_r($progress, 1) .
'</pre>';
} else {
echo 'no uploading';
}
exit;
} elseif (isset($_GET['frame'])) { ?>
<form action="" method="POST" enctype="multipart/form-data">
<input type="hidden"
name="<?=ini_get("session.upload_progress.name")?>"
value="<?=$uploadName?>" /><br />
<input type="file" name="file" /><br />
<input type="submit" />
</form>
<?php } else { ?>
<iframe src="?frame" height="100"
width="500"></iframe>
<script
src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script>
$(function() {
setInterval(function() {
$.get('?ajax', function(data) {
$('#ajax').html(data);
});
}, 500);
});
</script>
<div id="ajax"></div>
<?php }
Previous Comments:
------------------------------------------------------------------------
[2012-11-21 23:21:18] chad dot scott at gmail dot com
I haven't gone deep enough into the PHP source to identify what's going on, but it
appears that PHP writes the upload progress session data using the handler set in
"session.save_handler", ignoring any custom session handler. On Ubuntu 12.04 with
the default settings, this means the data is going into "/var/lib/php5/sess_<id>".
------------------------------------------------------------------------
[2012-11-02 02:57:44] laruence@php.net
Thank you for this bug report. To properly diagnose the problem, we
need a short but complete example script to be able to reproduce
this bug ourselves.
A proper reproducing script starts with <?php and ends with ?>,
is max. 10-20 lines long and does not require any external
resources such as databases, etc. If the script requires a
database to demonstrate the issue, please make sure it creates
all necessary tables, stored procedures etc.
Please avoid embedding huge scripts into the report.
could you make a simple test script to illustrate your point? thanks
------------------------------------------------------------------------
[2012-11-01 18:21:07] xergin at gmail dot com
Description:
------------
By default php stores sessions in files (default filepath is /var/lib/php5).
If we want to store sessions, for example, in database, upload progress info
doesn't appears there. Even If we change session_save_path to another directory we
will get the same problem.
P.S. script example you could get here:
https://github.com/ihabunek/php-upload-progress
and custom session handler example here:
http://durak.org/sean/pubs/software/php-5.4.6/function.session-set-save-
handler.html
Thanks,
Anton
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=63414&edit=1