0

ビデオをアップロードして、zend フレームワークを使用して php に変換しようとしていますが、ロジックに少し問題があります。

アップロードされたファイルを保持する必要があるローカルのディレクトリがあります。

C:/xampp/htdocs/zend/videos/

最初にビデオを変換してから、そのディレクトリに移動する必要があります。

変換には、次のようなものを使用します。

exec("ffmpeg -i video.avi -ar 22050 -ab 32 -f flv -s 320x240 video.flv", $out);

ここに私のフォームの一部があります:

$file = new Zend_Form_Element_File('file');
    $file->setLabel('File')
        ->setRequired(true)
        //->setDestination('/var/www/tmp') use in real life
        ->setDestination('C:/xampp/htdocs/zend/tmp')
        ->addValidator('Size',
                false,
                array('min' => '10kB', 'max' => '100MB'));

ファイルをアップロードすると、そのディレクトリに問題なく移動します。

ディレクトリ内のファイルを変換しtmpてから、別のメイン ファイルに移動してから、元のファイルを削除する必要がありますか?

元のファイルが変換されるまで一時ディレクトリに一時的に保持し、その後自動的に削除する方法はありませんか?

私も使用しようとしていますが、フィルターとZend_File_Transfer_Adapter_Httpの違いと、 setDestinationそれを使用する必要があるかどうかについて少し混乱しています。targetRename

誰かがこの問題に光を当ててくれるかもしれません。おそらくいくつかのベストプラクティスです。

ありがとう

4

1 に答える 1

0

Zend_File_Transfer_Adapter_Httpも使用しようとしていますが、 setDestinationとRenameフィルターのターゲットの違いと、それを使用する必要があるかどうかについて少し混乱しています。

setDestination()は非推奨であり、Rename代わりにフィルターを使用する必要があります。Renameフィルタセットがある場合は、宛先が上書きされます。それ以外の場合、大きな違いはありません。主な違いは、Renameフィルターがファイルの名前を変更できることです。この場合setDestination、元のファイル名はユーザーのPCにあったままで、移動先にのみ移動します。これにより、既存のファイルに注意深く名前を付けないと、既存のファイルが上書きされたり、誰かが別のユーザーのファイルを壊したりする可能性があります。

tmpディレクトリ内のファイルを変換してから、他のメインファイルに移動してから、元のファイルを削除する必要がありますか?

個人的には、アップロード時にファイルを変換しようとはしません。多くの場合、変換は迅速ですが、比較的大きなビデオがアップロードされ、ビデオのエンコードにさらに4分かかる場合はどうなりますか?変換が行われている間、何が起こっているのか疑問に思って待っているユーザーを望まないでしょう。

ファイルをアップロードし、一時的な場所にコピーして変換してから、元の場所に移動します。もちろん、これにより複雑さが増します。

アップロードされたビデオをその場で変換したい場合は、Zend_File_Transfer_Adapter_Httpまったく使用しないかもしれません。代わりに、$_FILESスーパーグローバルを使用してそのファイルにアクセス$_FILES['videofile']['tmp_name']してffmpeg変換し、出力を最終的な宛先または一時的な宛先に書き込み、変換が完了したときにそれを移動します。PHPにアップロードされたmove_uploaded_fileファイルは、一時ファイルを永続的な場所に書き込むために呼び出すか手動で何かを行わない限り、要求が終了すると自動的に削除されます。

元のファイルを一時的に一時ディレクトリに保持して、変換されるまで一時的に保持してから、自動的に削除する方法はありませんか?

はい、なしで行く場合Zend_File_Transfer。アップロードされたファイルは、PHPリクエストが終了するまで自動的に一時ディレクトリにあります。その場で変換を行う場合、PHPが終了すると、元の一時ファイルは自動的に削除されます。

うまくいけば、それはあなたのために物事を少しクリアします。

于 2012-03-06T22:11:32.790 に答える