Quiero hacer un movimiento como el comando tail con PHP, , pero ¿cómo se puede ver agregar al archivo?¿Cómo ver un archivo escribir en PHP?
Respuesta
No creo que hay alguna manera mágica para hacerlo. Solo tiene que sondear continuamente el tamaño del archivo y generar cualquier dato nuevo. Esto es realmente bastante fácil, y lo único importante a 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 al clearstatcache()
antes de enviar cualquier dato.
Aquí hay una muestra rápida, que no incluye ningún control 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");
Hola, Su solución parece ser la quema de una gran cantidad de CPU (+ -40% en mi configuración de prueba). ¿Hay algún indicador de una forma más eficiente de mirar carpetas? – Coyote
'usleep (100)' está durmiendo durante 100 millonésimas de segundo o durante 0,0001 segundos. Aumente esto a 'usleep (10000)' (0.01s) para reducir el uso de CPU a menos que necesite una latencia extremadamente baja. 'usleep (2000000)' o 'sleep (2)' (2s) para algo que solo quieres razonablemente fresco cuando lo miras. – ReactiveRaven
Probé este código, pero no tuve éxito ... el navegador sigue cargando ... y no hace eco ... – ihtus
$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 tendrá que considerar un uso de stream_get_line
En lugar de sondeo tamaño del archivo que regular de verificar el archivo de tiempo de modificación: filemtime
Ambos requieren una llamada stat() debajo de la superficie, por lo que realmente no importa. –
Pedido php-tail on Google code. Es una implementación de 2 archivos con PHP y Javascript y tiene muy poca carga en mi prueba.
Incluso es compatible con el filtrado con una palabra clave grep (útil para ffmpeg que escupe velocidad de cuadros, etc. cada segundo).
$handle = popen("tail -f /var/log/your_file.log 2>&1", 'r');
while(!feof($handle)) {
$buffer = fgets($handle);
echo "$buffer\n";
flush();
}
pclose($handle);
Se bloquea el servidor de Apache .. ¿Hacer esto solo a mí? – dctremblay
Revise los registros de errores en busca de pistas, pero esto no debería estar bloqueando su proceso de apache. –
A continuación se muestra lo que he adaptado desde arriba. Llámalo periódicamente con una llamada ajax y añádelo a tu 'titular' (textarea) ... Espero que esto ayude ... ¡gracias a todos los que contribuyen a 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);
- 1. ¿Cómo escribir en un archivo en PHP?
- 2. ¿Escribir un archivo .htaccess en PHP?
- 3. ¿Cómo escribir php + html en un archivo más bonito?
- 4. Permanentemente escribir variables en un archivo php con php
- 5. cómo escribir en un archivo en emacs
- 6. crear archivo ini, escribir valores en PHP
- 7. ¿Cómo escribir un flujo en un archivo?
- 8. Escribir datos de publicaciones en un archivo con PHP
- 9. Escribir una coma en un archivo CSV con PHP
- 10. Cómo escribir un cheque en python para ver si el archivo es válido UTF-8?
- 11. PHP - Cómo escribir el recurso de imagen en el archivo
- 12. Cómo escribir números enteros en un archivo
- 13. Cómo escribir cadenas unicode en un archivo?
- 14. Cómo escribir valores vectoriales en un archivo
- 15. ver un archivo docx en C# .NET
- 16. Escribir un archivo en iOS
- 17. ¿Cómo escribir una cadena en un archivo en C?
- 18. PHP para escribir caracteres de tabulación dentro de un archivo?
- 19. ¿Cómo funciona LOCK para escribir registros en un archivo plano?
- 20. ¿Escribir NSData en un archivo?
- 21. ¿Cómo puedo ver un archivo comprimido contenido
- 22. ¿Cómo crear un archivo temporal (para escribir en) en C#?
- 23. Escribir en un archivo en Monotouch
- 24. Crear un archivo zip utilizando PHP clase ZipArchive sin escribir el archivo en el disco?
- 25. escribir en un archivo en Perl
- 26. Cómo escribir en un archivo en la aplicación php grande (preguntas múltiples)
- 27. Intentando escribir un archivo en un directorio diferente usando fopen()
- 28. FFmpeg Cómo escribir vídeo a un archivo
- 29. Cómo escribir un archivo funcional "escáner"
- 30. Escribir en un archivo XML en Java
http://code.google.com/p/php-tail/ – Peeter
Disponible en Packagist: https://packagist.org/packages/icyapril/tail – mjsa