Tôi muốn thực hiện chuyển động như lệnh đuôi với PHP, nhưng làm thế nào có thể xem thêm vào tệp?Làm thế nào để xem một tập tin viết bằng PHP?
Trả lời
Tôi không tin rằng có một số cách kỳ diệu để làm điều đó. Bạn chỉ cần liên tục thăm dò ý kiến kích thước tệp và xuất bất kỳ dữ liệu mới nào. Điều này thực sự khá dễ dàng và điều thực sự duy nhất cần chú ý là kích thước tệp và dữ liệu thống kê khác được lưu trong php. Giải pháp cho việc này là gọi clearstatcache()
trước khi xuất bất kỳ dữ liệu nào.
Đây là một mẫu nhanh chóng, mà không bao gồm bất kỳ xử lý lỗi:
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");
Hi, giải pháp của bạn dường như được đốt cháy một nhiều CPU (+ -40% trên cấu hình thử nghiệm của tôi). Có bất kỳ con trỏ nào để xem thư mục hiệu quả hơn không? – Coyote
'usleep (100)' đang ngủ trong 100 phần nghìn giây, hoặc trong 0,0001 giây. Tăng giá trị này lên 'usleep (10000)' (0,01s) để sử dụng CPU thấp hơn trừ khi bạn cần độ trễ cực kỳ thấp. 'usleep (2000000)' hoặc 'sleep (2)' (2s) cho một cái gì đó mà bạn chỉ muốn một cách hợp lý mới khi bạn lướt qua nó. – ReactiveRaven
Tôi đã thử mã này, nhưng không thành công ... trình duyệt giữ tải ... và không lặp lại .. – 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);
Và có lẽ bạn sẽ muốn xem xét việc sử dụng của stream_get_line
Thay vì bỏ phiếu filesize bạn thường xuyên kiểm tra các tập tin thời gian chỉnh sửa: filemtime
Cả hai yêu cầu một stat() gọi bên dưới bề mặt, do đó, nó không thực sự quan trọng. –
Thanh toán php-tail on Google code. Đó là một tập tin thực hiện 2 với PHP và Javascript và nó có rất ít chi phí trong thử nghiệm của tôi.
Nó thậm chí còn hỗ trợ lọc bằng từ khóa grep (hữu ích cho ffmpeg, tốc độ khung hình sẽ xuất hiện mỗi giây).
$handle = popen("tail -f /var/log/your_file.log 2>&1", 'r');
while(!feof($handle)) {
$buffer = fgets($handle);
echo "$buffer\n";
flush();
}
pclose($handle);
Nó sụp đổ máy chủ apache .. Làm điều này chỉ với tôi? – dctremblay
Kiểm tra nhật ký lỗi của bạn để tìm manh mối, nhưng điều này sẽ không làm hỏng quá trình apache của bạn. –
Dưới đây là những gì tôi đã thích nghi từ trên cao. Gọi nó định kỳ với một cuộc gọi ajax và nối thêm vào 'chủ của bạn' (textarea) ... Hy vọng điều này sẽ giúp ... cảm ơn tất cả các bạn, những người đóng góp cho stackoverflow và các diễn đàn như vậy!
/* 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. Viết một tập tin .htaccess trong PHP?
- 2. Làm thế nào để viết văn bản vào một tập tin văn bản bằng Photoshop JavaScript?
- 3. Làm thế nào để viết một Mat phao vào một tập tin trong OpenCV
- 4. .htaccess viết lại tập tin ảnh để php script
- 5. Trong vim, làm thế nào để viết một phần dòng vào một tập tin?
- 6. Làm thế nào để làm cho capistrano viết một tập tin .rvmrc khi triển khai?
- 7. Làm thế nào để sao chép một tập tin PHP sử dụng PHP
- 8. Viết dòng vào một tập tin bằng C
- 9. Làm thế nào để vượt qua một đối số khi gọi một tập tin xem?
- 10. FFmpeg Làm thế nào để viết đoạn video vào một tập tin
- 11. Làm thế nào để viết một biến vào tập tin trong kiến?
- 12. Làm thế nào để viết các số nguyên vào một tập tin
- 13. Làm thế nào để viết trong một tập tin với nhiều chủ đề?
- 14. Làm thế nào để thêm một cột từ một tập tin vào một tập tin
- 15. Làm thế nào để mở một tập tin trong java
- 16. Làm thế nào để tải một tập tin xem magento (.phtml) từ một bộ điều khiển
- 17. Làm thế nào để chọn một tập tin trống?
- 18. Làm thế nào để làm cho tập lệnh php chạy một tập lệnh php khác
- 19. Viết một mảng NSData vào tập tin
- 20. Làm thế nào để kiểm tra xem System.IO.File.Delete xóa một tập tin thành công
- 21. Làm thế nào để nhúng một tập tin vào một tập tin HTML?
- 22. viết một tập tin rdata từ
- 23. Làm thế nào để mã hóa một tập tin văn bản bằng C?
- 24. Làm thế nào để sử dụng một lớp PHP từ tập tin khác
- 25. Làm thế nào để chạy mã php từ file_get_contents hoặc tập tin trong một chức năng
- 26. Làm thế nào để thêm vào một tập tin XML với PHP tốt hơn với SimpleXML
- 27. tạo tập tin ini, viết các giá trị trong PHP
- 28. Làm thế nào để kiểm tra xem một is_open tập tin và open_status trong python
- 29. Trong Mercurial, làm thế nào để xem lịch sử của một tập tin?
- 30. Unix: Làm thế nào để xóa các tập tin được liệt kê trong một tập tin
http://code.google.com/p/php-tail/ – Peeter
Khả dụng trên Packagist: https://packagist.org/packages/icyapril/tail – mjsa