2009-09-01 16 views

risposta

4

La mia ipotesi è, è nel $_SERVER['CONTENT_LENGTH'].

E se è necessario per il rilevamento degli errori, dare un'occhiata a $_FILES['filename']['error'].

+0

Sto caricando file di grandi dimensioni sul server insieme ad altri campi. Ma se lo abortisco mancherà una parte della richiesta, quindi devo confrontare la dimensione effettiva del corpo della richiesta con il valore dell'intestazione Content-Length per garantire che il caricamento dei file non sia stato interrotto. –

+0

'$ _SERVER ['CONTENT_LENGTH']' contiene ovviamente il valore dall'intestazione. Penso che sia responsabilità di PHP assicurarsi che sia conforme ai dati effettivi ricevuti. Forse '$ _FILES ['file'] ['error']' ha qualche suggerimento per questo? –

+0

Se stai cercando di rilevare i caricamenti di file falliti, dovresti farlo nel modo in cui viene mostrato nel mio post, senza contare i byte. –

0

Credo che si sta cercando $HTTP_RAW_POST_DATA

+0

Hmm ... Ma non hai bisogno dei dati per conoscerne le dimensioni, vero? –

+0

Grazie, ma $ HTTP_RAW_POST_DATA non è disponibile con enctype = "multipart/form-data". Ho bisogno di usare multipart/form-data per inviare file. –

+0

** Warning ** Questa funzione è stata DEPRECATED in PHP 5.6.0 e REMOVED a partire da PHP 7.0.0. [PHP Link] (http://php.net/manual/en/reserved.variables.httprawpostdata.php) –

4

Se stai cercando di capire se un upload di file non è riuscita, si dovrebbe utilizzare la gestione, come indicato al link qui sotto errore di file PHP. Questo è il modo più affidabile per rilevare gli errori di caricamento file:
http://us3.php.net/manual/en/features.file-upload.errors.php

Se avete bisogno delle dimensioni di una richiesta POST senza alcun upload di file, si dovrebbe essere in grado di farlo con qualcosa di simile:

$request = http_build_query($_POST); 
$size = strlen($request); 
+0

altrimenti se "solo" vuole la dimensione, puoi ottenerla per un file usando $ _FILES array => $ _FILES ['nameoffile'] ['size'] – Jakub

2

Questo potrebbe funzionare:

$bytesInPostRequestBody = strlen(file_get_contents('php://input')); 
// This does not count the bytes of the request's headers on its body. 
+0

Prima di PHP5.6 questa azione può cancellare il flusso perché è consentito leggerlo solo una volta: [docs] (http://php.net/manual/en/wrappers .php.php). Quindi vedrai la sua lunghezza ma poi sarà vuota – vladkras

30

semplice come:

$size = (int) $_SERVER['CONTENT_LENGTH']; 

Si noti che $ _SERVER ['CONTENT_LENGTH'] è impostato solo nelle richieste HTTP tramite il metodo POST. Questo è il valore grezzo dell'intestazione Content-Length. Vedere: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.13

Nel caso di upload di file, se si vuole ottenere la dimensione totale dei file caricati, si dovrebbe scorrere i $ _File elementi per riassumere ogni $ file [ 'size']. La dimensione totale esatta non corrisponde al valore di Contenuto-Lunghezza non elaborato a causa del sovraccarico di codifica dei dati POST.

Si noti inoltre che per gli errori di file , è necessario controllare il codice $ file ['errore'] di ciascun elemento $ _FILES. Ad esempio, i caricamenti parziali restituiranno l'errore UPLOAD_ERR_PARTIAL e i caricamenti vuoti restituiranno UPLOAD_ERR_NO_FILE. Vedere la documentazione sugli errori di caricamento del file nel manuale PHP.

+1

$ size = (int) $ _SERVER ['CONTENT_LENGTH']; Questo dà dimensione in unità di byte? – anujeet

+0

deprecato ... $ _SERVER ['argv'] – ina

Problemi correlati