2

这些finfo_*函数返回有关文件的信息;最有趣的功能是

string finfo_file(resource $finfo, string $file_name = NULL [, int $options = FILEINFO_NONE [, resource $context = NULL ]])

第一个参数是一个资源,它只是你想要返回的关于文件的信息;就我而言,我想要FILEINFO_MIME_TYPE,所以我使用以下finfo_open()功能:

resource finfo_open([int $options = FILEINFO_NONE [, string $magic_file = NULL ]])

最后得到

$a = finfo_open(FILEINFO_MIME_TYPE)
echo finfo_file($a,$fileatt['tmp_name']); 

获取我上传文件的 mime 类型,一切正常

但是,有两个问题:

  • 的第三个(可选)参数finfo_fileint $options = FILEINFO_NONE,但这与 的第一个选项相同finfo_open;既然它是的第一个参数中资源finfo_file的一部分,为什么它也是int同一函数中的可选 () 参数?

  • 其次,术语资源和函数名称finfo_open似乎相当混乱;在mysql_*函数中,资源是查询的结果,我可以理解为一个相当复杂的对象;然而,这里的资源只是一个字符串,那么为什么 PHP 让它看起来比看起来更复杂呢?类似地,通常在任何地方正在操作文件并且需要使用的功能之一在其名称中带有open一词最初(对我来说,无论如何)暗示这是打开/启动文件流的功能,而在这里它用于指定您想要从文件中获取的信息。这些术语在这里有什么奇怪的历史原因吗?

4

1 回答 1

1

术语资源和函数名称 finfo_open 似乎相当混乱;在 mysql_* 函数中,资源是查询的结果,我可以理解为一个相当复杂的对象;但是,这里的资源只是一个字符串

不,结果finfo_open资源。资源可以是任何东西,通常是外部程序的标识符。对于 MySQL,MySQL 资源是由较低级别的 mysql 客户端库打开的连接的标识符。MySQL 结果资源是通过特定连接打开的结果的标识符。

在 的情况下finfo_open,将打开一个“魔术文件”。这个魔法文件包含 MIME 类型信息。您可以指定一个特定的魔术文件用作第二个参数finfo_open

resource finfo_open([int $options = FILEINFO_NONE [, string $magic_file = NULL ]])

所以这里的外部资源就是打开的魔法文件的文件句柄。如果您正在执行多个 finfo 查询,您希望保持此文件处于打开状态,因此已将其抽象为一个资源。

的第三个(可选)参数finfo_fileint $options = FILEINFO_NONE,但这与第一个选项相同finfo_open

这确实是一个好问题,我不知道这背后的想法是什么。也许如果您一遍又一遍地执行相同类型的 finfo 查询,您可以将其指定为参数一次finfo_open,而不是每次调用finfo_file.

于 2012-04-27T01:16:14.807 回答