Bug #63414 [Com]: built-in upload progress mechanism does not work with custom session handler

From: 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

« previous php.bugs (#175168) next »