2012-03-06 8 views
0

私はビデオをアップロードし、それをzendフレームワークを使用してPHPで変換しようとしています。私は自分のロジックに少し問題があります。zend frameworkを使用してアップロードされたファイルのパスを設定する方法は?

私は、アップロードされたファイルを保持することが要求され、ローカルで、ディレクトリを持っている:私はそのディレクトリに移動し、ビデオを変換する必要があり

C:/xampp/htdocs/zend/videos/ 

拳を。このようなものを使用して変換イムについては

$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')); 

私はそのディレクトリにそれが行くファイルをアップロードするときだけで罰金:ここ

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

は私のフォームの一部です。

は、私はオリジナルのものを削除し、その後、tmpディレクトリ内のファイルを変換して、私の他の主なものにそれを移動する必要がありますか?

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

私はZend_File_Transfer_Adapter_Httpを使用しますが、少しはsetDestinationの間の違いとRenameフィルタからtargetあるものに混乱し、それを使用する必要がある場合イムするためにもしようとしています。

私は誰かこの問題にいくつかの光をもたらすかもしれない、多分いくつかのベストプラクティス。

おかげ

があれば、私はフィルタの名前を変更し Zend_File_Transfer_Adapter_Httpのインスタンスを使用しますが、 から間setDestinationの違いと 対象が何であるかのビット 混乱イムすることもしようとしています

答えて

0

それを使用する必要があります。

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が終了すると自動的に削除されます。

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

+0

'$ _FILES ['videofile'] ['tmp_name']'私のために働いた。 +1 – Sevenearths

関連する問題