即使

2014-07-07 21 views
0

PHP系統()仍然保持回顯所以我需要找出是否從用戶上傳的圖像/視頻和什麼類型。我目前使用即使

"filetype"=>system("file -i -b ".$_FILES['file']['tmp_name']) 

它通過這個

$s3file='http://'.$bucket.'.s3.amazonaws.com/'.$actual_image_name; 
$collection = static::db()->media; 
$datetime = time(); 
$mediaupload = array("owner"=>$_SESSION['user_information'][0]['_id'],"filelink"=>$s3file,"filetype"=>system("file -i -b ".$_FILES['file']['tmp_name']),"filesize"=>$size,"uploadtime"=>$datetime,"ownerid"=>$_SESSION["user_information"][0]['_id']); 
$collection->insert($mediaupload); 
$media = $collection->findOne($mediaupload); 

但是什麼我注意到是回聲的結果出來到PHP頁面插入我的MongoDB的集合 - 這是不是我需要它做。我知道這是系統功能,因爲當我刪除該功能時,它不會將上傳的文件類型回顯到php代碼中。

我想知道爲什麼我仍然可以運行該系統文件-i -b函數,並讓它包含到MongoDB數據庫中,但不會將結果回顯到公共PHP頁面返回。

回答

0

試着這麼做(多線輸出)

exec("file -i -b ".$_FILES['file']['tmp_name'], $output); 
array("filetype"=>$output); 

它可能看起來有點非正統的,但exec使用其第二個輸入參數作爲將輸出信息傳回給您的方式 - file的輸出將作爲數組存儲到$output中。

From the docs

如果輸出參數存在,則該指定的數組將 填充來自指令輸出的每一行。尾數 空格(例如\ n)未包含在此數組中。請注意,如果 數組已包含某些元素,則exec()將追加到數組的末尾 。如果您不希望函數追加元素, 在將數組傳遞給exec()之前會調用unset()方法。

如果您只是想從輸出的第一行,用簡單的版本:

array("filetype"=>exec("file -i -b ".$_FILES['file']['tmp_name'])); 
0

我已經切換系統exec()和似乎固定我的問題