2

getID3 ライブラリを使用して、リモート ビデオ ファイルの詳細を取得しています。ファイルの詳細を取得するためにファイルの一部を読み取ろうとしていますが、一部のビデオには最初に完全な詳細がありません。

これらのビデオについては、ビデオ全体をダウンロードしてから、関連情報を抽出しようとしています。ただし、ビデオが完全にダウンロードされた後でも、getID3->analyze($filename) は同じ誤ったファイル情報を返します。

しかし、ビデオをコピーし、コピーしたビデオに対して関数 analyze($filename.'copied.mp4') を実行すると、ファイルの内容が同じであっても正しい情報が返されます。おそらく getID3 はビデオを再度ロードしていませんが、ビデオをコピーせずにこの問題を解決するにはどうすればよいですか?

以下のコードを見つけてください。

if ($fp_remote = fopen($remotefilename, 'r')) {
    echo 'conn opened'; 
    $localtempfilename = tempnam('/home/xerox/abc', 'whateva').'.mp4';
    if ($fp_local = fopen($localtempfilename, 'wb')) {
        $count = 0;
        $countExpiry = 8;
        while ($buffer = fread($fp_remote, 8192)) {
            $count++;
            fwrite($fp_local, $buffer);
            if ($count >= $countExpiry) {
                fflush($fp_local);
                $getID3 = new getID3;
                $ThisFileInfo = $getID3->analyze($localtempfilename);
                if ($ThisFileInfo["error"]){
                    print "problem encouterd";
                    $countExpiry += 1000;
                } else {
                 break;}
            }
        }
        fclose($fp_local);
        $getID31 = new getID3;
        copy ( $localtempfilename, $localtempfilename.'_copied.mp4' );
        $ThisFileInfoz = $getID31->analyze($localtempfilename.'_copied.mp4');
        // Delete temporary file
        unlink($localtempfilename);
        fclose($fp_remote);
    var_dump($ThisFileInfoz);
    }

}
4

1 に答える 1

0

clearstatcacheを呼び出すと、問題が解決しました。

ファイルサイズのようなものへの繰り返しの呼び出しはファイルシステムによってキャッシュされ、getID3 はファイルの終わりを超えて読み取られないためです。

出典: getID3 の開発者 James Heinrich

于 2016-08-30T15:43:48.830 に答える