これは、私が解決策に取り組むときに使用しているコードです。
public function indexAction()
{
//id3 options
$options = array("version" => 3.0, "encoding" => Zend_Media_Id3_Encoding::ISO88591, "compat" => true);
//path to collection
$path = APPLICATION_PATH . '/../public/Media/Music/';//Currently Approx 2000 files
//inner iterator
$dir = new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::SKIP_DOTS);
//iterator
$iterator = new RecursiveIteratorIterator($dir, RecursiveIteratorIterator::SELF_FIRST);
foreach ($iterator as $file) {
if (!$file->isDir() && $file->getExtension() === 'mp3') {
//real path to mp3 file
$filePath = $file->getRealPath();
Zend_Debug::dump($filePath);//current results: accepted path no errors
$id3 = new Zend_Media_Id3v2($filePath, $options);
foreach ($id3->getFramesByIdentifier("T*") as $frame) {
$data[$frame->identifier] = $frame->text;
}
Zend_Debug::dump($data);//currently can scan the whole collection without timing out, but APIC data not being processed.
}
}
}
問題:複数のディレクトリにあるmp3ファイルのファイルシステムを処理します。id3タグデータをデータベース(3つのテーブル)に抽出し、カバー画像をタグから別のファイルに抽出します。
実際の抽出とデータ処理を処理できます。私の問題は出力にあります。
Zend Framework 1.xが出力バッファリングを処理する方法では、ファイルが処理されていることを示すインジケーターを出力することは困難です。古いスタイルのPHPスクリプトでは、出力バッファリングを使用せずに、ループを繰り返すたびにHTMLを少し出力して、進行状況を示すことができます。
各アルバムのディレクトリを処理し、結果を出力してから、次のアルバムのディレクトリに進むことができるようにしたいと思います。特定のエラーに対してのみユーザーの介入が必要です。
どんな助けでもいただければ幸いです。
Javascriptは私が探しているソリューションではありません。これは、PHPとZF1MVCの構成内で可能になるはずだと思います。
私は主に私自身の啓蒙のためにこれを行っています、それはいくつかの重要な概念を学ぶための非常に良い方法のようです。
[編集]
わかりました。これを小さなチャンクに分割する方法についてのアイデアはどうですか。1つのチャンクを処理し、コミットし、次のチャンクを処理します。ZFの内外。
[編集]
私が達成しようとしていることに問題が見られ始めています。出力バッファリングはZFで発生しているだけでなく、ZFからブラウザに至るまであらゆる場所で発生しているようです。うーん...