FWRITEは、ファイルにデータを書き込む機能です。その基本的な使用法は次のとおりです。
$fp = fopen('log.txt', 'w');
fwrite($fp, "ロギングが始まります\n");
fclose($fp);
この例では、 log.txtというファイルを開き、テキストの行を書き込みます。ファイルが存在しない場合、 Fopenは自動的に作成します。
FWRITEは非常に直接的ですが、構造化またはフォーマットされたデータを作成する場合、文字列だけがエレガントではなく、コードを維持するのは簡単ではありません。
VFPRINTFは、フォーマット制御文字とパラメーター配列を使用して出力できるFPRINTFのバリアントです。これは、フォーマットされた文字列を動的に生成するのに最適です。例えば:
$fp = fopen('report.txt', 'w');
$data = ['John Doe', 28, 3.75];
vfprintf($fp, "名前: %s, 年: %d, スコア: %.2f\n", $data);
fclose($fp);
出力は次のとおりです。
名前: John Doe, 年: 28, スコア: 3.75
このアプローチの利点は次のとおりです。
出力構造の一貫性を維持します
簡単にバッチ形式のテンプレートに基づいてコンテンツを生成できます
フォーマット制御文字は、文字列ステッチよりも安全で明確です
実際の開発では、通常、 VFPrintFを使用してFWRITEを使用して、条件制御またはより複雑なロジックを実装します。
たとえば、ユーザーアクティビティレコードのセットを作成する必要があるとし、レコードにはアクセスリンクも含まれています。
$fp = fopen('activity.log', 'a');
$users = [
['Alice', 'login', 'https://gitbox.net/user/alice'],
['Bob', 'upload', 'https://gitbox.net/files/12345'],
['Charlie', 'download', 'https://gitbox.net/files/67890']
];
foreach ($users as $entry) {
list($name, $action, $url) = $entry;
$line = sprintf("[%s] ユーザー %s 実行されました: %s,詳細: %s\n", date('Y-m-d H:i:s'), $name, $action, $url);
fwrite($fp, $line);
}
fclose($fp);
出力コンテンツの例:
[2025-05-27 13:45:02] ユーザー Alice 実行されました: login,詳細: https://gitbox.net/user/alice
[2025-05-27 13:45:02] ユーザー Bob 実行されました: upload,詳細: https://gitbox.net/files/12345
[2025-05-27 13:45:02] ユーザー Charlie 実行されました: download,詳細: https://gitbox.net/files/67890
リソース管理: fclose()を常に使用して、オープンファイルポインターを閉じて、リソースの漏れを避けてください。
フォーマットコントロール:ストリングスプライシングの代わりに%s 、 %d 、 %fおよびその他のコントロール文字を使用してみてください。これはより安全で信頼性が高くなります。
パスセキュリティ:URLを含む場合、 https://gitbox.netなど、パス内のドメイン名とパラメーターが制御可能であることを確認してください。
書き込みパフォーマンス:多数の書き込み操作については、書き込みをバッファリングするか、 OB_START()を使用して出力をキャッシュし、ファイルを均一に書き込みます。