<?php
/**
* Collects metrics of binary files for validation checks with limited memory usage.
*
* @param string $filePath The path to the binary file.
* @return array An associative array containing file metrics. Returns an empty array on error.
*/
function getBinaryFileMetrics(string $filePath): array
{
$metrics = [];
if (!file_exists($filePath)) {
error_log("File not found: $filePath"); // Log error
return [];
}
$fileSize = filesize($filePath); // Get file size
$metrics['file_size'] = $fileSize;
$fileHandle = fopen($filePath, 'rb'); // Open file in binary read mode
if ($fileHandle === false) {
error_log("Failed to open file: $filePath"); // Log error
return [];
}
$bufferSize = 4096; // Adjust buffer size for memory usage
$buffer = fread($fileHandle, $bufferSize);
while ($buffer !== false) {
$metrics['bytes_read'] = $metrics['bytes_read'] ?? 0 + strlen($buffer);
$buffer = fread($fileHandle, $bufferSize);
}
fclose($fileHandle); // Close file handle
$metrics['bytes_read'] = $metrics['bytes_read'] ?? 0; // Ensure byte count is initialized if no data read
$metrics['file_size'] = $fileSize;
return $metrics;
}
// Example Usage:
// $metrics = getBinaryFileMetrics('/path/to/your/binary_file.bin');
// if (!empty($metrics)) {
// print_r($metrics);
// }
?>
Add your comment