2010-04-12 35 views

risposta

10

È possibile leggere il file in una stringa come questa:

$data = file_get_contents("/tmp/some_file.txt"); 

si possono ottenere presso i singoli byte simile a come si farebbe in C:

for($i = 0; $i < strlen($data); ++$i) { 
    $char = $data[$i]; 
    echo "Byte $i: $char\n"; 
} 

Riferimenti:

+1

Penso che ci sia un errore di battitura. Deve essere: '$ char = $ data [$ i];' –

4

Vedi le PHP Manual on String access and modification by character

caratteri all'interno della stringa s può essere letta e modificata da specificando l'offset a base zero del carattere desiderato dopo la stringa usando le parentesi quadre, come in $str[42]. Pensa a una stringa come a una matrice di caratteri per questo scopo. Le funzioni substr() e substr_replace() possono essere utilizzate quando si desidera estrarre o sostituire più di 1 carattere.

Oppure, se dopo aver chiesto e leggere byte dal file, è possibile utilizzare un SplFileObject

$file = new SplFileObject('file.txt'); 
while (false !== ($char = $file->fgetc())) { 
    echo "$char\n"; 
} 

Questo non è un array di byte, però, ma l'iterazione di un handle di file. SplFileInfo implementa l'interfaccia SeekableIterator.

E su un sidenote, c'è anche

  • file - Restituisce il file in un array. Ogni elemento dell'array corrisponde a una linea nel file, con il newline ancora collegato. In caso di fallimento, file() restituisce FALSE.
2

troppo php>

$data = file_get_contents("/tmp/some_file.txt");

modo migliore di fare per (non consigliato a conteggio uso, sizeof, strlen o altre funzioni): $counter = strlen($data); for($i = 0; $i < $counter; ++$i) { $char = data[$i]; echo "Byte $i: $char\n"; }

+0

micro-ottimizzazione senza senso. e la tua risposta avrebbe dovuto essere un commento anche sotto la risposta. – Gordon

+0

Di tutte le micro ottimizzazioni, questo è il meno inutile se non del tutto. – raveren

+0

sì. ma in zend sertificate molto frequenti. – Mantas

Problemi correlati