Oturumu Karşıya Yükleme Süreci

session.upload_progress.enabled INI seçeneği etkin ise, PHP karşıya yüklenen bağımsız dosyaların karşıya yükleme sürecini izleyebilecektir. Bu bilgi, yükleme isteğinin kendisi için yararlı bir özellik değildir, ancak bir uygulama dosya yükleme sırasında, durumu denetim altında tutmak için ayrı bir uç noktaya (örneğin XHR aracılığıyla) bir POST isteği gönderebilir.

Karşıya yükleme süreci, bir yükleme devam ederken ve session.upload_progress.name INI ayarıyla aynı isme sahip bir değişken POST edilirken $_SESSION süper küreselinde kullanılabilir olacaktır. PHP bu tür POST isteklerini algıladığında, $_SESSION altında bir dizi oluşturur; burada anahtar, session.upload_progress.prefix ve session.upload_progress.name INI seçeneklerinin birleşiminden oluşur. Anahtar genellikle bu INI ayarlarından elde edilir. Örnek:

<?php
$key
= ini_get("session.upload_progress.prefix") . $_POST[ini_get("session.upload_progress.name")];
var_dump($_SESSION[$key]);
?>

$_SESSION[$key]["cancel_upload"] anahtarına true atayarak, sürmekte olan dosya yüklemesini iptal etmek de mümkündür. Aynı istekte birden fazla dosya yüklerken, bu yalnızca devam etmekte olan dosya yüklemesini ve bekleyen dosya yüklemelerini iptal eder, ancak başarıyla tamamlanmış yüklemeleri kaldırmaz. Bir yükleme bu şekilde iptal edildiğinde $_FILES dizisindeki error anahtarına UPLOAD_ERR_EXTENSION atanır.

session.upload_progress.freq ve session.upload_progress.min_freq INI seçenekleri, karşıya yükleme süreci bilgisinin ne sıklıkta yeniden hesaplanması gerektiğini denetler. Bu iki ayar için uygun bir miktar dışında, bu özelliğin getirdiği ek bir yük neredeyse yoktur.

Örnek 1 - Örnek bilgi

Karşıya yükleme süreci için dizi yapılandırma örneği

<form action="upload.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>

Oturumda saklanan veri şöyle görünür:

<?php
$_SESSION
["upload_progress_123"] = array(
"start_time" => 1234567890, // İstek zamanı
"content_length" => 57343257, // POST içeriğinin uzunluğu
"bytes_processed" => 453489, // Alınan ve işlenen bayt miktarı
"done" => false, // POST işleyici sonlanınca başarılı olsun olmasın true
"files" => array(
0 => array(
"field_name" => "file1", // <input/> alanındaki isim
Uyarı

Bunun düzgün çalışması için HTTP sunucusunun isteği tamponlama özelliği devre dışı bırakılmalıdır, aksi takdirde PHP dosya yüklemesini yalnızca dosya tam olarak yüklendikten sonra görebilir. Nginx gibi sunucuların oldukça büyük istekleri tamponladıkları bilinmektedir.

Dikkat

Karşıya yükleme süreci bilgisi, herhangi bir betik yürütülmeden önce oturuma yazılır. Bu nedenle oturum adını ini_set() veya session_name() yoluyla değiştirmek, içinde karşıya yükleme süreci bilgisi bulunmayan bir oturum verecektir.

To Top