1. <?php
  2. /**
  3. * Collects metrics of binary files for validation checks with limited memory usage.
  4. *
  5. * @param string $filePath The path to the binary file.
  6. * @return array An associative array containing file metrics. Returns an empty array on error.
  7. */
  8. function getBinaryFileMetrics(string $filePath): array
  9. {
  10. $metrics = [];
  11. if (!file_exists($filePath)) {
  12. error_log("File not found: $filePath"); // Log error
  13. return [];
  14. }
  15. $fileSize = filesize($filePath); // Get file size
  16. $metrics['file_size'] = $fileSize;
  17. $fileHandle = fopen($filePath, 'rb'); // Open file in binary read mode
  18. if ($fileHandle === false) {
  19. error_log("Failed to open file: $filePath"); // Log error
  20. return [];
  21. }
  22. $bufferSize = 4096; // Adjust buffer size for memory usage
  23. $buffer = fread($fileHandle, $bufferSize);
  24. while ($buffer !== false) {
  25. $metrics['bytes_read'] = $metrics['bytes_read'] ?? 0 + strlen($buffer);
  26. $buffer = fread($fileHandle, $bufferSize);
  27. }
  28. fclose($fileHandle); // Close file handle
  29. $metrics['bytes_read'] = $metrics['bytes_read'] ?? 0; // Ensure byte count is initialized if no data read
  30. $metrics['file_size'] = $fileSize;
  31. return $metrics;
  32. }
  33. // Example Usage:
  34. // $metrics = getBinaryFileMetrics('/path/to/your/binary_file.bin');
  35. // if (!empty($metrics)) {
  36. // print_r($metrics);
  37. // }
  38. ?>

Add your comment