1

いくつかの mp3 の zip アーカイブを作成しようとしています。私が抱えている問題は、一部の mp3 ファイルが奇妙な方法で圧縮プロセスを壊してしまうことです。これらのファイルのいずれも含めなくても問題ありません。1つ入れると梨の形になります。

最終的には、人々がダウンロードできるようにサーバーに zip ファイルを配置し、php を使用してオンザフライで作成したいと考えています。問題のあるファイルをアーカイブに含めなければ、問題なく動作します。その場合、「500 内部サーバー エラー」が発生しますが、サーバー エラー ログには何も記録されません。プロセスのすべてのステップで独自のエラー ログを作成することで、zip->close を試みた時点で失敗しているように見えます。

一歩下がって、7zip を使用してローカルで zip アーカイブを作成してみました。問題のあるファイルを含める場合はこれを行うことができますが、この zip アーカイブをサーバーにアップロードしてからダウンロードすると、ダウンロードが破損します。問題ファイルを含めなくても問題ありません。同じことがwinzipでも起こります。

合計で約 100 個の mp3 があり、そのうち約 6 個がこの動作を引き起こします。それらはすべて同じ権限を持ち、すべて存在し、すべて同じディレクトリにあり、ほぼ同じサイズです。ソースの .wav ファイルからもう一度 mp3 を作成しようとしましたが、新しいバージョンでも同じことが起こりました。

私は完全に困惑しています。あちこち探しましたが、手がかりはまったく見つかりません。ヘルプ!!

4

1 に答える 1

0

いくつかの理由が考えられます (これらは同時に発生する可能性があります): (a) PHP zip 作成のバグのあるコード - コードまたは実際の圧縮を行うコードのいずれか、(b) ファイルのアップロードまたはダウンロードで使用されるテキスト モード。

ご覧のとおり、7zip を使用すると PHP zip の問題が解決されるため、圧縮コードに何らかのエラーがあるはずです。作成した ZIP を配置し、それらが壊れたものとしてダウンロードされる場合、これは、ファイルがテキスト モードを使用して提供されていることを意味する可能性があります。

自明でない理由の 1 つは、PHP で mbcs 関数のオーバーロードが有効になっていることです。オーバーロードが有効になっていると、strlen および同様の関数にバイナリ データが渡されると、予期しない結果が生成され始めます (これは、入力を UTF8 文字列として処理するためです)。

于 2013-10-06T06:33:19.663 に答える