Php 从流获取文件类型/文件大小

Php 从流获取文件类型/文件大小,php,Php,我正在从具有的流中获取文件内容 $src_file = file_get_contents("php://input"); 但我还需要知道文件的文件类型和文件大小。这不起作用: $src_type = filetype("php://input"); $src_size = count($src_file); 我想我可以编写文件,然后调用filetype/filesize,但是有没有办法从流或变量的内容中获取filetype和filesize?在流中,文件的“type”没有任何意义。流只表示

我正在从具有的流中获取文件内容

$src_file = file_get_contents("php://input");
但我还需要知道文件的文件类型和文件大小。这不起作用:

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

我想我可以编写文件,然后调用filetype/filesize,但是有没有办法从流或变量的内容中获取filetype和filesize?

在流中,文件的“type”没有任何意义。流只表示位的输入。因此,
filetype
调用将失败,因为PHP根本找不到该类型。但是
php://input
不是一个文件。它是给php的输入。例如,在linux中,它可以执行以下操作:

ls | php file.php

在这种情况下,PHP的输入不是文件,而是另一个程序的输出。

要获得字符串的完整长度,请使用strlen,这必须有效。 没有简单的方法可以嗅探流的文件类型,您不应该尝试这样做


但是因为您正在处理
php://input
,可能来自
PUT
请求,客户端通常应该在
内容类型
标题中设置适当的mimetype。您可以从
$\u服务器['CONTENT\u TYPE']
$\u服务器['HTTP\u CONTENT\u TYPE']
获取此信息,具体取决于sapi。

什么是
文件类型(“php://input“”
返回?
警告:filetype():Lstat失败php://input
count($src_file)
返回
1
返回文件的类型。可能的值有fifo、char、dir、block、link、file、socket和unknown。
谢谢,这就是它不起作用的原因。那么,在这种情况下,如何获取filetype/mimetype和filesize呢?您可以检查内容类型header。是否有方法获取文件类型/mime类型,而不是文件,而是文件的确切内容?这是可能的,但我认为您最好将filename作为参数提供给PHP,或者将其发送到输入,而不是通过管道将其发送到程序中。