2010-03-03 52 views
2

我的文件表單元素很簡單:文件 - > getMimeType()總是返回應用程序/八位字節流與Zend框架

$this->archivo = new Zend_Form_Element_File('archivo'); 
$this->archivo->setLabel('Archivo:') 
     ->setRequired(true) 
     ->setDestination(UPLOAD_PATH) 
     ->addValidator('Count', false, 1) 
     ->addValidator('Size', false, MAX_FILE_SIZE) 
     ->addValidator('Extension', false, Application_Form_Multimedia_SubirArchivo::EXTENSIONES_PERMITIDAS); 
$this->addElement($this->archivo); 

,但是,上傳文件(上傳OK)時,我嘗試獲取MIME類型,而每個文件是相同的:

$form->archivo->getMimeType() 

它總是返回應用程序/八位字節流,不管我試圖上傳什麼樣的文件。

爲什麼會發生這種情況,我錯過了某種方式嗎?謝謝

回答

4

這個最可能的原因是,如果沒有我們的FileInfo或mime_magic擴展名是在你的PHP安裝使用,您使用的基本方法將還原到默認的MIME類型:

if (empty($result[$key])) { 
    $result[$key] = 'application/octet-stream'; 
} 

推薦您可以查看Zend_File_Transfer_Adapter_Abstract中的getMimeType()方法(該代碼段來自Zend_Form_Element_File :: getMimeType()中並從該方法中調用)以獲取詳細信息,然後檢查已安裝的擴展並正確糾正。

+0

FINFO是要走的路。 – 2011-04-01 06:15:47

0

Octet-Stream通常是任何必須在另一個應用程序中打開的文件。參見:

http://kb.iu.edu/data/agtj.html

MIME附件與內容 類型 「application /八位字節流」 是 二進制文件。通常,這將是一個 應用程序或文檔,必須在應用程序中打開 ,例如 電子表格或文字處理程序。如果 附件的文件擴展名爲 與之關聯,則可以通過 告訴它是什麼類型的文件。例如,擴展名爲.exe 表示它 是Windows或DOS程序 (可執行文件),而以 .doc結尾的文件可能打算在 Microsoft Word中打開。

3

今天Zend Framework是1.11.10,並且這個問題的解決方案沒有從ZF2反向移植。這裏是bug report

here is the patch。補丁的想法是在php5.3中,mimefile包含在php中,我們不再需要外部文件。

也利用這一修復你應該增加驗證這樣的:

$upload->addValidator('IsImage', false, array('magicfile'=>false)); 
+0

很好的答案。我的問題肯定是過時的ZF1'Zend_Validate_File_MimeType'。愛刪除代碼行來解決問題。 – ficuscr 2017-07-21 16:44:48

相關問題