PHP'de POST istek gövdesinin boyutunu almanın bir yolu var mı?PHP'de POST isteğinin boyutunu alın
cevap
Tahminimce, $_SERVER['CONTENT_LENGTH']
adresinde.
Hata algılaması için buna ihtiyacınız varsa, $_FILES['filename']['error']
'a gidin.
Sana bir dosya yükleme, aşağıdaki bağlantıdan gösterildiği gibi işleme PHP dosyası hatası kullanılarak yapılmalıdır başarısız olup olmadığını anlamaya çalışıyorsanız siz $HTTP_RAW_POST_DATA
Hmm ... Ama boyutlarını bilmek için veriye ihtiyacınız yok, değil mi? –
Teşekkürler, ancak $ HTTP_RAW_POST_DATA enctype = "multipart/form-data" ile kullanılamaz. Dosyaları göndermek için multipart/form-data kullanmam gerekiyor. –
** Uyarı ** Bu özellik PHP 5.6.0'da DEPRECATED ve PHP 7.0.0'dan itibaren ÇIKARILDI. [PHP Link] (http://php.net/manual/en/reserved.variables.httprawpostdata.php) –
arıyoruz sanırım.
: Herhangi dosya yükleme olmadan bir POST isteği boyutunu gerekiyorsahttp://us3.php.net/manual/en/features.file-upload.errors.php
, böyle bir şey ile bunu mümkün olmalıdır: Bu dosya yükleme hatalarını tespit etmek için en güvenilir yoldur
$request = http_build_query($_POST);
$size = strlen($request);
aksi takdirde 'sadece' boyut istiyorsa, $ _FILES dizisini kullanarak bir dosya elde edebilirsiniz => $ _FILES ['nameoffile'] ['size'] – Jakub
Bu işe yarayabilecek:
$bytesInPostRequestBody = strlen(file_get_contents('php://input'));
// This does not count the bytes of the request's headers on its body.
PHP5.6'dan önce, bu eylem akışı yalnızca bir kez okumasına izin verdiği için temizleyebilir: [docs] (http://php.net/manual/en/wrappers .php.php). Yani uzunluğunu göreceksiniz ama boş olacak – vladkras
kadar basit olarak:
$size = (int) $_SERVER['CONTENT_LENGTH'];
$ _SERVER ['CONTENT_LENGTH'] öğesinin yalnızca POST yöntemiyle HTTP İsteklerinde ayarlandığını unutmayın. Bu, Content-Length başlığının ham değeridir. Bkz: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.13
dosya yükleme durumda, yüklenen dosyalar ait toplam boyutunu almak istiyorsanız, her $ dosyasını [ 'size'] Özetle $ _FILE elemanları üzerinde ilerlerken gerekir. Tam toplam boyut, POST verilerinin kodlama ek yükünden kaynaklanan ham İçerik Uzunluğu değeriyle eşleşmiyor.
Ayrıca, dosya hataları için, $ _FILES öğesinin $ dosya ['error'] kodunu kontrol etmelisiniz. Örneğin, kısmi yüklemeler UPLOAD_ERR_PARTIAL hatası verir ve boş yüklemeler UPLOAD_ERR_NO_FILE değerini döndürür. PHP el kitabındaki dosya yükleme hataları belgelerine bakın.
Büyük dosyaları başka alanlarla birlikte sunucuya yüklüyorum. Ancak iptal edersem, isteğin bir kısmı eksik olur, bu yüzden dosya yükleme işleminin iptal edilmediğinden emin olmak için, istek boyutunun gerçek boyutunu İçerik Uzunluğu başlığının değeriyle karşılaştırmam gerekir. –
'$ _SERVER ['CONTENT_LENGTH']' tabiki başlıktaki değeri içerir. Alınan gerçek verilere uyduğundan emin olmak PHP'nin sorumluluğundadır. Belki '$ _FILES ['dosya'] ['error']' bunun için bazı ipuçları var? –
Hatalı dosya yüklemelerini tespit etmeye çalışıyorsanız, bunu bayt saymadan değil, postamda gösterilme biçiminde yapmalısınız. –