我正在从流中获取文件内容
$src_file = file_get_contents("php://input");
但我还需要知道文件的文件类型和文件大小。这不起作用:
$src_type = filetype("php://input");
$src_size = count($src_file);
我想我可以编写文件,然后在其上调用 filetype/filesize,但是有没有办法从流或变量的内容中获取文件类型和文件大小?
我正在从流中获取文件内容
$src_file = file_get_contents("php://input");
但我还需要知道文件的文件类型和文件大小。这不起作用:
$src_type = filetype("php://input");
$src_size = count($src_file);
我想我可以编写文件,然后在其上调用 filetype/filesize,但是有没有办法从流或变量的内容中获取文件类型和文件大小?
要获取字符串的完整长度,请使用strlen
,这必须有效。没有简单的方法可以嗅探流的文件类型,您不应该尝试这样做。
但是由于您正在处理php://input
,可能来自PUT
请求,客户端通常应在标头中设置适当的 mimetype Content-Type
。您可以从sapi$_SERVER['CONTENT_TYPE']
或$_SERVER['HTTP_CONTENT_TYPE']
根据 sapi 获得此信息。
在流中,文件的“类型”没有任何意义。流仅表示位的输入。所以filetype
调用会失败,因为 PHP 根本找不到类型。但php://input
不是文件。它是给 php.ini 的输入。例如,在 linux 中,它将能够执行以下操作:
ls | php file.php
在这种情况下,PHP 的输入不是文件,而是另一个程序的输出。