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:
]]>
$_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 bilgi
Karşıya yükleme süreci için dizi yapılandırma örneği
" value="123" />
]]>
Oturumda saklanan veri şöyle görünür:
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", // alanındaki isim
// Aşağıdaki 3 eleman $_FILES içindekilerle aynıdır
"name" => "foo.avi",
"tmp_name" => "/tmp/phpxxxxxx",
"error" => 0,
"done" => true, // POST işleyici dosyayla işini bitirince true
"start_time" => 1234567890, // Dosyanın işleme alındığı zaman
"bytes_processed" => 57343250, // Dosya işlenirken alınan ve gönderilen bayt miktarı
),
// Aynı istekte, karşıya yüklenmesi tamamlanmamış başka bir dosya
1 => array(
"field_name" => "file2",
"name" => "bar.avi",
"tmp_name" => NULL,
"error" => 0,
"done" => false,
"start_time" => 1234567899,
"bytes_processed" => 54554,
),
)
);
]]>
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.
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.