view bin/ed2k @ 744:8d3ad5ae1ce4 default tip

[ed2k] better? function organization and usage of argv
author nanaya <me@nanaya.net>
date Wed, 05 Feb 2025 17:14:38 +0900
parents bcdf320dabf4
children
line wrap: on
line source

#!/usr/bin/env php
<?php

function ed2k_hash(string $path): string
{
    // ed2k hash is an md4 hash of concatenated binary md4 hashes of 9500 KiB file chunks.
    static $bs = 9500 * 1024;
    $hash = '';
    $fp = fopen($path, 'rb');

    while (!feof($fp)) {
        $hash .= hash('md4', fread($fp, $bs), true);
    }
    fclose($fp);

    return hash('md4', $hash);
}

function main(): void
{
    $files = $_SERVER['argv'];
    array_shift($files);

    foreach ($files as $path) {
        $hash = ed2k_hash($path);
        $filename = basename($path);
        $filesize = filesize($path);

        echo "ed2k://|file|{$filename}|{$filesize}|{$hash}|", PHP_EOL;
    }
}

main();