Tôi đang sử dụng hàm bên dưới để tính hàm băm opensubtitles.org cho tệp phim. Nó hoạt động chủ yếu nhưng với các tập tin lớn tôi nhận được lỗi sau.Chức năng băm phụ đề không thành công đối với các tệp lớn
Tôi không thực sự hiểu nó vì luôn có dữ liệu có sẵn.
Có thể anyonep hướng tôi đi đúng hướng không?
PHP Warning: giải nén(): Loại v: không đủ đầu vào, cần 2, có 0 trong file.php trên đường dây 169
function OpenSubtitlesHash($file)
{
$handle = fopen($file, "rb");
$fsize = filesize($file);
$hash = array(3 => 0,
2 => 0,
1 => ($fsize >> 16) & 0xFFFF,
0 => $fsize & 0xFFFF);
for ($i = 0; $i < 8192; $i++)
{
$tmp = ReadUINT64($handle);
$hash = AddUINT64($hash, $tmp);
}
$offset = $fsize - 65536;
fseek($handle, $offset > 0 ? $offset : 0, SEEK_SET);
for ($i = 0; $i < 8192; $i++)
{
$tmp = ReadUINT64($handle);
$hash = AddUINT64($hash, $tmp);
}
fclose($handle);
return UINT64FormatHex($hash);
}
function ReadUINT64($handle)
{
$u = unpack("va/vb/vc/vd", fread($handle, 8));
return array(0 => $u["a"], 1 => $u["b"], 2 => $u["c"], 3 => $u["d"]);
}
function AddUINT64($a, $b)
{
$o = array(0 => 0, 1 => 0, 2 => 0, 3 => 0);
$carry = 0;
for ($i = 0; $i < 4; $i++)
{
if (($a[$i] + $b[$i] + $carry) > 0xffff)
{
$o[$i] += ($a[$i] + $b[$i] + $carry) & 0xffff;
$carry = 1;
}
else
{
$o[$i] += ($a[$i] + $b[$i] + $carry);
$carry = 0;
}
}
return $o;
}
function UINT64FormatHex($n)
{
return sprintf("%04x%04x%04x%04x", $n[3], $n[2], $n[1], $n[0]);
}
Hãy chỉ cho chúng ta để dòng [email protected] – Justinas
trong '$ u = unpack (" va/vb/vc/vd ", fread ($ handle, 8));' nếu bạn làm '$ var = fread ($ handle, 8); var_dump ($ var);' cái gì là đầu ra? nó thực sự đọc dữ liệu? – Tschallacka