todas - ¿Cómo ver un archivo escribir en PHP?
todas las etiquetas de php (6)
A continuación es lo que he adaptado desde arriba. Llámelo periódicamente con una llamada ajax y adjúntelo a su ''titular'' (textarea) ... Espero que esto le ayude ... ¡gracias a todos ustedes que contribuyen al stackoverflow y otros foros similares!
/* Used by the programming module to output debug.txt */
session_start();
$_SESSION[''tailSize''] = filesize("./debugLog.txt");
if($_SESSION[''tailPrevSize''] == '''' || $_SESSION[''tailPrevSize''] > $_SESSION[''tailSize''])
{
$_SESSION[''tailPrevSize''] = $_SESSION[''tailSize''];
}
$tailDiff = $_SESSION[''tailSize''] - $_SESSION[''tailPrevSize''];
$_SESSION[''tailPrevSize''] = $_SESSION[''tailSize''];
/* Include your own security checks (valid user, etc) if required here */
if(!$valid_user) {
echo "Invalid system mode for this page.";
}
$handle = popen("tail -c ".$tailDiff." ./debugLog.txt 2>&1", ''r'');
while(!feof($handle)) {
$buffer = fgets($handle);
echo "$buffer";
flush();
}
pclose($handle);
Quiero realizar movimientos como el comando tail con PHP, pero ¿cómo puedo verlos adjuntar al archivo?
Checkout code.google.com/p/php-tail . Es una implementación de 2 archivos con PHP y Javascript y tiene muy poca sobrecarga en mis pruebas.
Incluso admite el filtrado con una palabra clave grep (útil para ffmpeg que escupe velocidad de fotogramas, etc., cada segundo).
No creo que haya alguna forma mágica de hacerlo. Solo tiene que sondear continuamente el tamaño del archivo y generar cualquier dato nuevo. En realidad, esto es bastante fácil, y lo único que se debe tener en cuenta es que el tamaño de los archivos y otros datos estadísticos se almacenan en caché en PHP. La solución a esto es llamar a clearstatcache()
antes de enviar cualquier dato.
Aquí hay una muestra rápida, que no incluye ningún manejo de errores:
function follow($file)
{
$size = 0;
while (true) {
clearstatcache();
$currentSize = filesize($file);
if ($size == $currentSize) {
usleep(100);
continue;
}
$fh = fopen($file, "r");
fseek($fh, $size);
while ($d = fgets($fh)) {
echo $d;
}
fclose($fh);
$size = $currentSize;
}
}
follow("file.txt");
$handle = popen("tail -f /var/log/your_file.log 2>&1", ''r'');
while(!feof($handle)) {
$buffer = fgets($handle);
echo "$buffer/n";
flush();
}
pclose($handle);
$handler = fopen(''somefile.txt'', ''r'');
// move you at the end of file
fseek($handler, filesize( ));
// move you at the begining of file
fseek($handler, 0);
Y probablemente querrá considerar un uso de stream_get_line