所以我需要知道用户上传的图片/视频是什么类型。我目前使用
"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页面返回。
答案 0 :(得分:0)
我已将系统切换到exec(),这似乎解决了我的问题
答案 1 :(得分:0)
尝试类似(用于多行输出)
exec("file -i -b ".$_FILES['file']['tmp_name'], $output);
array("filetype"=>$output);
它可能看起来有点不正统,但exec使用其第二个输入参数作为将输出信息传递给您的方式 - file
的输出将作为数组存储到$output
中。
如果输出参数存在,那么指定的数组将是 填充了命令的每一行输出。尾随 空格,例如\ n,不包含在此数组中。请注意,如果 数组已经包含一些元素,exec()会附加到 数组的结尾。如果您不希望该函数追加元素, 在将数组传递给exec()之前调用数组上的unset()。
如果您只想从输出中获取第一行,请使用更简单的版本:
array("filetype"=>exec("file -i -b ".$_FILES['file']['tmp_name']));