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タイプを取得すると、すべて正常に機能します

ただし、2つの質問:

  • の3番目の(オプションの)パラメーターfinfo_fileはですが、これは;int $options = FILEINFO_NONEの最初のオプションと同じです。の1番目のパラメーターのリソースfinfo_openの一部として必要なため、同じ関数のオプションの()パラメーターでもあるのはなぜですか?finfo_fileint

  • 第二に、リソースと関数名という用語はfinfo_openかなり紛らわしいようです。mysql_*関数では、リソースクエリの結果であり、かなり複雑なオブジェクトであると理解できます。ただし、ここでのリソースは単なる文字列です。なぜPHPは、見た目よりも複雑に見えるのでしょうか。同様に、通常、ファイルが操作されており、使用する必要のある関数の1つに名前にopenという単語が含まれている場所では、最初は(とにかく)これがファイルストリームを開いたり開始したりする関数であることを意味します。ここでは、ファイルから必要な情報を指定するために使用されます。ここでこれらの用語の奇妙な歴史的理由はありますか?

4

1 に答える 1

1

リソースという用語と関数名 finfo_open はかなり紛らわしいようです。mysql_* 関数では、リソースはクエリの結果であり、かなり複雑なオブジェクトであると理解できます。ただし、ここでのリソースは単なる文字列です

いいえ、の結果finfo_openリソースです。リソースは何でも構いませんが、通常は外部プログラムの識別子です。MySQL の場合、MySQL リソースは、下位レベルの mysql クライアント ライブラリによって開かれた接続の識別子です。MySQL 結果リソースは、特定の接続を介して開かれた結果の識別子です。

の場合、finfo_open開かれる「マジックファイル」があります。このマジック ファイルには、MIME タイプ情報が含まれています。の 2 番目のパラメータとして使用する特定のマジック ファイルを指定できますfinfo_open

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

したがって、ここでの外部リソースは、開かれたマジック ファイルのファイル ハンドルです。複数の finfo クエリを実行している場合、このファイルを開いたままにしておく必要があるため、これはリソースに抽象化されています。

の 3 番目 (オプション) のパラメーターfinfo_fileは ですint $options = FILEINFO_NONEが、これは の 1 番目のオプションと同じですfinfo_open

それは確かに良い質問です、私はこの背後にある考えが何であるか分かりません. おそらく、同じ種類の finfo クエリを何度も実行している場合は、finfo_openを呼び出すたびにパラメータとして指定するのではなく、 に1 回指定することができますfinfo_file

于 2012-04-27T01:16:14.807 に答える