Stavo pensando di fare una richiesta principale con cURL, mi chiedevo se questa fosse la strada da percorrere?Il modo più semplice per acquisire file di file remoto in PHP?
risposta
Sì. Poiché il file è remoto, sei completamente dipendente dal valore dell'intestazione Content-Length
(a meno che non desideri scaricare l'intero file). Ti consigliamo di curl_setopt($ch, CURLOPT_NOBODY, true)
e curl_setopt($ch, CURLOPT_HEADER, true)
.
Sto indovinando l'uso di arricciatura per inviare una richiesta HEAD è una buona possibilità; qualcosa di simile sarebbe probabilmente fare:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://sstatic.net/so/img/logo.png');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_exec($ch);
$size = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD);
var_dump($size);
E si arriva:
float 3438
In questo modo, si sta utilizzando una richiesta HEAD, e non scaricare l'intero file - ancora, si dipendono dal il server remoto invia un'intestazione Content-Length corretta.
Un'altra opzione si potrebbe pensare a sarebbe quella di utilizzare filesize
... Ma questo fallirà: la documentazione afferma (citando):
partire da PHP 5.0.0, questo la funzione può anche essere utilizzata con alcuni wrapper di URL. Fare riferimento a List of Supported Protocols/Wrappers per un elenco di cui i wrapper supportano la famiglia di funzionalità stat() .
E, purtroppo, con HTTP and HTTPS wrappers, stat()
non è supportata ...
Se si tenta, si otterrà un errore, in questo modo:
Warning: filesize() [function.filesize]: stat failed
for http://sstatic.net/so/img/logo.png
Peccato :-(
L'utilizzo di una richiesta HEAD e il controllo di Content-Length
è il metodo standard per farlo, ma non è possibile fare affidamento su di esso in generale, poiché il server potrebbe non supportarlo. L'intestazioneè facoltativa e inoltre il server potrebbe non implementare nemmeno il metodo HEAD. Se si conosce il server che si sta sondando, è possibile verificare se funziona, ma come soluzione generale non è a prova di proiettile.
Se non avete bisogno di una soluzione a prova di proiettile si può solo fare:
strlen(file_get_contents($url));
Funzionerà, ma scaricherà anche il file per primo. Presumibilmente, vuole conoscere la dimensione prima di caricarlo sulla rete. – troelskn
La soluzione migliore che segue il principio KISS
$head = array_change_key_case(get_headers("http://example.com/file.ext", TRUE));
$filesize = $head['content-length'];
Di gran lunga la migliore risposta. Ben fatto. –
Questo comando non restituisce una chiave 'content-length' per me, ecco la matrice restituisce: ''connection' => string 'close' (length = 5) 'date' => string 'Tue, 03 giu 2014 20:55:55 GMT '(lunghezza = 29) ' server '=> stringa' Microsoft-IIS/6.0 '(lunghezza = 17) ' x-powered-by '=> stringa' ASP.NET '(lunghezza = 7) ' x-aspnet-version '=> stringa' 4.0.30319 '(lunghezza = 9) ' cache-control '=> stringa' private '(lunghezza = 7) ' tipo-contenuto '=> string' image/gif'' –
Domanda veloce, perché ha bisogno di array_change_key_case? – mario
- 1. Il modo più semplice per scambiare due file in bash
- 2. Il modo più semplice per generare file di localizzazione
- 3. Il modo più semplice di scrivere NSData in un file
- 4. Il modo più semplice per scaricare un file?
- 5. Il modo più semplice per incrementare una data in PHP?
- 6. Il modo più semplice per disegnare un'immagine?
- 7. incluso un file remoto in PHP
- 8. qual è il modo più semplice per proteggere con password il database mongodb per l'utente remoto?
- 9. Qual è il modo più semplice per rinominare il file che stai modificando in Vim?
- 10. Caricamento file server remoto tramite PHP
- 11. Qual è il modo più semplice per esporre sottofunzioni del file M per il test dell'unità?
- 12. Il modo migliore/più semplice per analizzare i parametri di configurazione in Sh/Bash e php
- 13. Il modo più semplice per mantenere una struttura dati in un file in python?
- 14. modo più semplice per programmare un file system virtuale in Windows con Python
- 15. System.Runtime.RemotingException in modo semplice file XAML
- 16. PHP: il modo più semplice per eliminare una cartella (incluso il suo contenuto)
- 17. Qual è il modo più semplice per utilizzare il comando HEAD di HTTP in PHP?
- 18. Qual è il modo più semplice per avvolgere un file .aac grezzo in un contenitore .m4a
- 19. Il modo più semplice per inserire semplici dati in un file Excel da .Net
- 20. Il modo più semplice per confrontare due file Excel in Java?
- 21. Il modo più semplice per ricaricare un file CSS in Webpack utilizzando Webpack Dev Middleware
- 22. Il modo più semplice per aprire file con codifica e readLine() in Java?
- 23. file PHP messa in vendita di più estensioni di file
- 24. Il modo più semplice per copiare DB di SQL Server per testare il DB?
- 25. Principianti di Scala - il modo più semplice per contare le parole nel file
- 26. Il modo corretto per eliminare tutti i file più vecchi di 2 giorni in PHP
- 27. Il modo più semplice per aggiungere barra di avanzamento caricamento file (graffetta) Apache/Paperclip/Rails
- 28. Qual'è il miglior e più semplice uploader di file Ajax?
- 29. il modo più semplice per incorporare Perl in html
- 30. C'è un modo semplice per convertire il file .xls in un file .csv? (Excel)
sì, con questo: http: // php. net/manual/it/function.get-headers.php – Merlinox