veo a la gente usando rebaño como esta:php rebaño y fread y fwrite
if (!$fp = fopen($file_name, 'wb'))
{
return FALSE;
}
if (flock($fp, LOCK_EX))
{
fwrite($fp, serialize($data));
flock($fp, LOCK_UN);
}
también esto:
if (!$fp = @fopen($file_name, 'rb'))
{
return FALSE;
}
flock($fp, LOCK_SH);
$data = '';
if (filesize($file_name) > 0)
{
$data = unserialize(fread($fp, filesize($file_name)));
}
¿Pero no hay una posibilidad de que alguien más va a editar el archivo entre el fopen
llamada y la llamada flock
? y la misma pregunta para fread
EDIT:
para aclarar por qué estoy haciendo esta ... Estoy basando mi pregunta sobre el código here, En una situación de almacenamiento en caché de MySQL, lo que está a tope 20 personas de todos pueden acceder al archivo al mismo tiempo si todos pueden entrar entre el fopen y el rebaño?
¿Es ese código infalible?
En caso de que el caché sea utilizado solo por ese script en particular, no pasará nada. Si alguien va a golpear el archivo de, digamos, shell - seguro, sucederán cosas malas. – favoretti
Sí, pero no es el caso que LOCK_EX, por ejemplo, fuerce de alguna manera 'fread' a" no devolver nada ", como decía otro comentario. – pilcrow
Si lee los comentarios en el sitio de PHP a flock(), realmente lo hace, a pesar de que el bloqueo es de advertencia. Dicho esto, el bloqueo obligatorio, por ejemplo, de Linux solo se puede lograr mientras se trabaja con sistemas de archivos que explícitamente lo soportan y se montan como tales. – favoretti