簡體   English   中英

如何檢查文件類型

[英]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);

如果以上兩種方法均無效,則建議至少使用其他答案中討論的方法來確保它不像圖片。 無法使用這些功能,您只能執行不幸的檢查文件名的方法來確定文件類型,這根本不可靠。

資料來源:

http://www.php.net/manual/zh/book.fileinfo.php

http://forums.digitalpoint.com/showthread.php?t=522166

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM