即使

2014-07-07 20 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()和似乎固定我的问题