FINFOは、ファイルMIMEタイプを検出するPHPの拡張機能です。開発者がファイルの形式またはタイプを決定するのに役立ちます。一般的な関数は、 finfo_open()を介してファイル情報フローを開き、 finfo_file()を使用してファイルのmimeタイプまたはその他の情報を取得し、最後にfinfo_close()を呼び出して情報フローを閉じます。
PHPでは、ファイル処理は通常、システムリソースを取り上げます。 Finfo_open()を使用してファイル情報リソースを作成すると、このリソースは一定量のメモリを占有します。操作が完了した後にこれらのリソースをリリースしない場合、システムはこれらのリソースを維持し、メモリリークとプログラムのパフォーマンスに影響を与えます。
finfo_close()は、finfo_open()によって作成されたリソースを解放するために使用されます。ファイル情報フローが不要になったら、リソースのリリースを確保するためにFinfo_Close()を時間内に呼び出し、メモリリークを回避する必要があります。
finfo_open()とfinfo_close()を正しく使用する方法を示す簡単な例を次に示します。
<?php
// 作成するfinfo物体
$finfo = finfo_open(FILEINFO_MIME_TYPE);
// ファイルを確認してください MIME タイプ
$file = 'example.txt';
$mime_type = finfo_file($finfo, $file);
echo "The MIME type of {$file} is {$mime_type}\n";
// 閉鎖finfoリソース
finfo_close($finfo);
?>
上記のコードでは、最初にFINFO_OPEN()を介してファイル情報フロー$ finfoを作成し、次にFINFO_FILE()を介してファイルのMIMEタイプを取得します。最後に、 $ finfoリソースはfinfo_close()を介してリリースされます。
リソースをタイムリーにリリースし、漏れを避けることができるようにするために、いくつかのベストプラクティスを次に示します。
複雑なアプリケーションでは、複数の条件付きブランチまたは例外処理がある場合、各使用後にリソースが適切にリリースされるようにすることが特に重要です。 Try ...最終的に構造を使用して、何が起こってもリソースが解放されていることを確認できます。
<?php
$finfo = null;
try {
// 作成するfinfo物体
$finfo = finfo_open(FILEINFO_MIME_TYPE);
// 関連する操作を実行します
$file = 'example.txt';
$mime_type = finfo_file($finfo, $file);
echo "The MIME type of {$file} is {$mime_type}\n";
} finally {
// 确保リソース被释放
if ($finfo) {
finfo_close($finfo);
}
}
?>
コードの可読性とメンテナンスを改善するために、ファイル情報の操作を関数にカプセル化し、関数の最後にリソースがリリースされるようにすることができます。
<?php
function getFileMimeType($file) {
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime_type = finfo_file($finfo, $file);
finfo_close($finfo);
return $mime_type;
}
$file = 'example.txt';
echo "The MIME type of {$file} is " . getFileMimeType($file) . "\n";
?>
これにより、コードの複製を減らし、 FINFOを使用するたびにリソースが適切に解放されるようにします。
finfo_file()または他の関連する関数を呼び出すときにエラーが発生した場合、 finfo_close()が呼び出される前に、他のコードが漏れた部分に他のコードが実行されないことを確認してください。リソースリリースは、例外キャプチャなどのエラー処理メカニズムを通じて確保できます。
<?php
try {
$finfo = finfo_open(FILEINFO_MIME_TYPE);
if (!$finfo) {
throw new Exception("Failed to open file info");
}
$file = 'non_existent_file.txt';
$mime_type = finfo_file($finfo, $file);
echo "The MIME type of {$file} is {$mime_type}\n";
} catch (Exception $e) {
echo "Error: " . $e->getMessage();
} finally {
if ($finfo) {
finfo_close($finfo);
}
}
?>
このようにして、エラーが発生したとしても、リソースを正しくリリースできることを確認できます。