2012-03-06 129 views
0

我想上傳一個視頻,並使用zend框架在PHP中進行轉換,並且我的邏輯有點問題。如何使用zend框架設置上傳文件的路徑?

我有一個目錄,本地,需要保存上傳的文件:

C:/xampp/htdocs/zend/videos/ 

拳頭,我需要轉換的視頻,然後在該目錄中移動。

對於使用這樣的轉換IM:

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過濾器,如果有需要使用它。

我家有人可以爲這個問題帶來一些亮點,也許一些最佳實踐。

感謝

回答

0

我想也使用Zend_File_Transfer_Adapter_Http,但即時通訊上就是從在setDestination之間的差異和 目標位 迷惑重命名過濾器,如果有需要使用它。

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 2018-02-22 16:26:55