[英]How to check file type
我將在服務器端(PHP)上檢查文件是否為real。 txt
。 此刻我寫了:
if(substr($_FILES['tracklistFile']['name'], -3)=='txt')
但是我認為這不是最好的解決方案! 我該如何檢查?
為了可靠地獲取文件擴展名,請使用以下命令:
pathinfo($_FILES['tracklistFile']['name'], PATHINFO_EXTENSION);
但是,那只會給您-文件名的擴展部分。 它沒有說明文件的實際類型。
如果文件是服務器上的本地文件(而不是上傳),則可以調用大多數基於Unix的操作系統上可用的file命令。
嗯...例如,如果用戶將picture.jpg作為picture.txt調用,則此檢查將失敗,並且我的腳本可能會創建許多錯誤:)不會受到控制:)
好的,但是根據什么標准,除了有效的文本文件之外,您還會告訴無效的JPG嗎? 理論上,文本文件可以包含任何內容 。 它沒有任何定義的格式,僅由許多完全任意的字節組成。
@Sardine建議的MIME類型檢測將有相同的問題。 但是,它將能夠檢測到許多非文本文件的文件類型,因此您可以拒絕這些文件類型。 但是,它不是100%可靠的。
您將需要考慮一些規則,這些規則使您可以識別文本文件,具體取決於腳本對它們的處理方式。
如果只是為了確定它是否是文本文件,我將考慮完全不進行任何檢查。 您只需要確保在應用程序的每個步驟中將其視為文本文件即可(即,如果其中包含PHP,JavaScript或HTML代碼,則將不會執行該文件)。
如果可能,您可以檢查文件的MIME類型,該類型應為
text/plain
不幸的是,這是PHP中的一項棘手任務。 如果您使用的是PHP4,則可以使用以下代碼:
$mtype = mime_content_type($file_path);
如果您的PHP> = 5.3.0和PECL fileinfo> = 0.1.0,則可以使用以下代碼:
$finfo = finfo_open(FILEINFO_MIME);
$mtype = finfo_file($finfo, $file_path);
finfo_close($finfo);
如果以上兩種方法均無效,則建議至少使用其他答案中討論的方法來確保它不像圖片。 無法使用這些功能,您只能執行不幸的檢查文件名的方法來確定文件類型,這根本不可靠。
資料來源:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.