Supongo que tendrás que posicionar el puntero del fichero al byte 640 con
http://php.net/manual/es/function.fseek.php
Y luego escribir normalmente con un fwrite.
if ( !file_exists($cache) || @$this->params['named']['cache'] === 0){
$handle = fopen($filename, "r+b");
fseek($handle, 640);
fwrite($handle, $this->params['id'], 16);
fclose($handle);
FireCake::fb(" GENERADO (" . @$this->params['named']['cache'] . ")
$referer ($cache)");
}
Hace mucho que no hago estas cosas, puede que me equivoque pero tiene buena
pinta, no?
Te recomiendo que encapsules esto un poco más en vez que tirar directamente
de $this->params (estás dentro de un controlador???) y valides que todo
tiene el tamaño y la forma que debe. Si $this->params['id'] (que es un
parámetro por GET al fin y al cabo) tiene un valor raro puede corremper el
fichero.
Espero haber sido de ayuda.
Saludos.
El 26 de mayo de 2010 17:16, Manolet Gmail <[email protected]> escribió:
> Saludos, actualmente tengo una aplicacion que edita un archivo binario
> cambiando 16 bytes que estan en la misma posicion siempre (640 bytes
> despues
> del inicio del archivo), sin embargo lo que estoy haciendo es leer TODO el
> archivo para luego escribirlo usando la funcion pack, lo que siento que es
> bastante torpe y desconsiderado con la memoria ram (considerando que
> necesito hacer esto cientos de veces al instante). Este es el código que
> estoy utilizando.
>
> if ( !file_exists($cache) || @$this->params['named']['cache'] ===
> 0){
> $handle = fopen($filename, "r+b");
> $init = fread($handle, 640);
> fread($handle, 16); //esto debe ser exactamente igual
> a lo que se reemplaza.
> $full = fread($handle, filesize($filename)); // leemos el
> resto para escribirlo despues
> fclose($handle);
>
> //las concateno para que sea human readable
> $contents = pack('a640'.'A16'.'a*', $init, $this->params['id'],
> $full);
>
> $handle = fopen($cache, "w+b");
> fwrite($handle, $contents);
> fclose($handle);
> FireCake::fb(" GENERADO ("....@$this->params['named']['cache'].")
> $referer ($cache)");
> }
>
> Alguna idea de como hacerlo "mas eficiente"?
>
> Arnold
>
Check out the new CakePHP Questions site http://cakeqs.org and help others with
their CakePHP related questions.
You received this message because you are subscribed to the Google Groups
"CakePHP" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected] For more options, visit this group at
http://groups.google.com/group/cake-php?hl=en