PHP系统()即使保持回声

时间:2014-07-07 00:40:18

标签: php image file system

所以我需要知道用户上传的图片/视频是什么类型。我目前使用

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

通过此

插入到我的MongoDB集合中
$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页面 - 这不是我需要它做的。我知道这是系统功能,因为当我删除该功能时,它不会将上传的文件类型回显到php代码。

我想知道为什么我仍然可以运行该系统文件-i -b函数并将其包含到MongoDB数据库中,但不将结果回显到公共php页面返回。

2 个答案:

答案 0 :(得分:0)

我已将系统切换到exec(),这似乎解决了我的问题

答案 1 :(得分: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']));