2013-01-07 54 views
2

我從一個流獲取文件內容與獲取文件類型/文件大小從流

$src_file = file_get_contents("php://input"); 

,但我需要知道該文件的文件類型和文件大小爲好。這不起作用:

$src_type = filetype("php://input"); 
$src_size = count($src_file); 

我想我可以寫文件,然後調用該文件類型/文件大小,但有一種方式來獲得一個變量的流或內容文件類型和文件大小?

+0

'filetype(「php:// input」)'返回什麼? –

+0

'警告:filetype():Lstat失敗,因爲php:// input'和'count($ src_file)'返回'1' – L84

+0

'返回文件的類型。可能的值是fifo,char,dir,block,link,file,socket和unknown.' – Musa

回答

-1

在流中,文件的'類型'沒有任何意義。流只是代表位的輸入。所以filetype調用將失敗,因爲PHP根本找不到該類型。但是php://input不是一個文件。這是給php的輸入。在Linux的例子,這將是能夠做到以下幾點:

ls | php file.php 

在這種情況下,輸入到PHP不是一個文件,而是另一個程序的輸出。

+1

那麼有沒有辦法讓文件類型/ MIME類型的東西不是文件,但具有文件的確切內容? – L84

+0

這可能是可能的,但我認爲將文件名作爲PHP的參數會更好,或者將它發送到輸入,而不是將它傳遞到您的程序中。 – kokx

1

要得到一個字符串的全長,使用strlen,這個必須的工作。 有沒有簡單的方法來嗅探流的文件類型,你不應該嘗試這樣做。

但是由於您處理php://input(可能來自PUT請求),客戶端通常應在Content-Type標頭中設置適當的mimetype。你可以從$_SERVER['CONTENT_TYPE']$_SERVER['HTTP_CONTENT_TYPE']得到這取決於sapi。