2016-09-20 89 views
0

當定義名稱空間(別名)時,我注意到了奇怪的mimetype行爲。每當我定義一個名稱空間或包含\input的別名時,php源文件的mimetype從text/x-php更改爲text/x-tex命名空間定義更改mimetype

最小example.php可能看起來像這樣,其中\input的環境並不重要。

<?php namespace \input; ?> 

當運行file --brief --mime-type example.php mime類型text/x-tex被打印而不是預期的一個text/x-php

只要input之前的反斜槓被刪除,mimetype就會切換回text/x-php

任何人都可以證實這種行爲嗎?
有沒有人知道這種情況發生的原因?
有沒有人爲此修復/解決方法除了更改名稱空間本身?

+2

我不明白了一個道理,除非你的編輯器嘗試本身推斷出該內容的MIME類型此自動變化。可能有一種方法來執行它。 –

+0

@CasimiretHippolyte我試圖用'vim'和'nano'來改變命名空間。與這兩個編輯器我遇到這種行爲 –

+0

Paul Crovella是正確的,該文件實用程序可能會嘗試一個「最佳候選人名單」從內容推斷MIME類型。 –

回答

2

file實用程序僅使用一些基於文件內容的啓發式。在你的情況下,它會看到

  • 該文件是一個純文本文件(沒有二進制)
  • 包含字符串\input,這是TeX

一個預定義宏它似乎不知何故\input = TeX優先於<?php = PHP。

file實用程序不檢查文件擴展名。 此外,這無關你怎麼保存文件或你使用的編輯器。這只是file重要的內容。

但是,這並不會改變PHP解釋器,網絡服務器或瀏覽器如何處理您的文件。

(某種聯繫:File on php showing HTML document

+0

內建的php函數'mime_content_type()'確實也評估爲'text/x-tex'。所以它只是簡單地調用'file'實用程序? –

+1

從[文檔](http://php.net/manual/en/intro.mime-magic.php):「該擴展名來源於Apache mod_mime_magic,它本身基於'file'命令[...] 「 –

+0

aight。感謝您指向一個文檔。 upvoted並標記爲已回答。謝謝。所以除非文件改變其優先級,否則需要避免在命名空間定義中使用'\ input'。 –