2010-12-28 40 views

Respuesta

0

Pruébalo

$handle = @fopen("/path/to/file.bin", "r"); 
if ($handle) { 
    while (!feof($handle)) { 
     $buffer[] = fgets($handle, 400); 
    } 
    fclose($handle); 
    $buffer[0][0] = chr(hexdec("FF")); // set the first byte to 0xFF 
} 
// convert array to string 
+5

¿por qué establecer el primer byte en 0xFF? –

+0

En Windows, este código tratará los archivos como texto sin formato y posiblemente corromperá el contenido que lea. –

+1

Gracias a Shakti Singh y Álvaro G. Vicario –

14

Está buscando la función fread.

fread - archivo binario seguro leer

Ejemplo:

$filename = "c:\\files\\somepic.gif"; 
$handle = fopen($filename, "rb"); 
$contents = fread($handle, filesize($filename)); 
fclose($handle); 

Nota:

En los sistemas que diferencian entre binaria y archivos de texto (es decir Windows) el archivo se debe abrir con 'b' incluido en el parámetro de modo fopen().

+1

El bit importante aquí es el indicador 'b' en fopen(). –

9

file_get_contents es lo suficientemente bueno. Parece que lee archivos en modo binario. He hecho un pequeño script PHP para verificar esto. No se produjeron mensajes MISMATCH.

<?php 

foreach (glob('/usr/bin/*') as $binary) { 
    $php = md5(file_get_contents($binary)); 
    $shell = shell_exec("md5sum $binary"); 
    if ($php != preg_replace('/ .*/s', '', $shell)) { 
     echo 'MISMATCH', PHP_EOL; 
    } 
    else { 
     echo 'MATCH', PHP_EOL; 
    } 
    echo $php, ' ', $binary, PHP_EOL; 
    echo $shell, PHP_EOL; 
} 

La siguiente nota es de manual:

Nota: Esta función es binario seguro.

Cuestiones relacionadas