मैं मूवी फ़ाइलों के लिए opensubtitles.org हैश की गणना करने के लिए नीचे दिए गए फ़ंक्शन का उपयोग कर रहा हूं। यह ज्यादातर काम करता है लेकिन बड़ी फ़ाइलों के साथ मुझे निम्न त्रुटि मिलती है।ओपनसबिटल्स हैश फ़ंक्शन बड़ी फ़ाइलों के लिए विफल रहता है
मैं वास्तव में इसे समझ नहीं पा रहा हूं क्योंकि हमेशा डेटा उपलब्ध होना चाहिए।
क्या कोई मुझे सही दिशा में इंगित कर सकता है?
पीएचपी चेतावनी: खोल(): प्रकार वी: नहीं पर्याप्त इनपुट, जरूरत 2, लाइन 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]);
}
, कृपया हमें बताएं में [email protected] – Justinas
लाइन आपका '$ u = अनपैक (" va/vb/vc/vd ", फ़्रेड ($ हैंडल, 8)); 'यदि आप' var var = fread ($ हैंडल, 8) करते हैं; var_dump ($ var);' क्या आउटपुट है? क्या यह वास्तव में डेटा पढ़ता है? – Tschallacka