Session Upload Progress 機能 ( http://php.net/manual/en/session.upload-progress.php ) を Kohana で動作させようとしています。次のコードを使用して、Kohana を使用せずにローカルで動作させることができました。
<?php
session_start();
if (isset($_GET['progress']))
{
// does key exist
$key = ini_get("session.upload_progress.prefix") . 'demo';
if ( !isset( $_SESSION[$key] ) ) exit( "uploading..." );
// workout percentage
$upload_progress = $_SESSION[$key];
$progress = round( ($upload_progress['bytes_processed'] / $upload_progress['content_length']) * 100, 2 );
exit( "Upload progress: $progress%" );
}
?>
<!doctype html>
<head>
</head>
<body>
<section>
<h1>Upload Form</h1>
<form action="" method="POST" enctype="multipart/form-data" target="upload-frame">
<input type="hidden" name="<?php echo ini_get("session.upload_progress.name"); ?>" value="<?php //echo $uid; ?>demo">
<p>
<label>File:</label>
<input type="file" name="file" required="required">
</p>
<p><input type="submit" name="submit" value="Upload"></p>
</form>
<iframe id="upload-frame" name="upload-frame" width="1280" height="600"></iframe>
<div id="file_upload_progress"></div>
</section>
<script src="jquery-1.7.1.min.js"></script>
<script>
$(document).ready(function() {
var uploading = false;
$('form').submit(function() {
uploading = true;
$('#upload-frame').one('load', function(){
uploading = false;
});
function update_file_upload_progress() {
$.get("?progress", function(data) {
$("#file_upload_progress").html(data);
if (uploading) {
setTimeout( update_file_upload_progress, 500 );
}
})
.error(function(jqXHR, error) {
alert(error);
});
}
// first call
update_file_upload_progress();
});
});
</script>
</body>
</html>
ただし、Kohana でこのコードを使用すると (もちろん、PHP をコントローラーに分離します) $_SESSION
、アップロードの進行状況を追跡するための変数は作成されません。
これは、Kohana でのセッションの仕組みに関係していると思います。session_start()
既に実行中の Kohana セッションと競合するため、スクリプトの開始時には使用できません。$_SESSION
またはコンテンツをダンプするとSession::instance()
、PHP Upload Progress 機能によって追加される変数がそこにありません。
では、セッション変数を Kohana で動作させるにはどうすればよいでしょうか?
アップデート
その後、この問題を絞り込むために、Kohana のクリーン インストールを作成しました。Kohana でクラスをインスタンス化しないことでSession
、上記のコードを使用でき、正常に動作することがわかりました。
ただしSession
、Web アプリケーションに必要なクラスがインスタンス化されると、動作が停止し、$_SESSION
アップロードの進行状況を含む変数が作成されなくなります。これは、Kohana がセッション情報を管理する方法のどこかに問題があると私に信じさせます。構成設定で暗号化をオフにしようとしましたが、違いはありませんでした。
ネイティブセッションを使用しています。