1. 関数概要
tidy_get_release は、PHP の Tidy 拡張が使用している Tidy ライブラリ自体のリリース日付を文字列で返す関数です。PHP のバージョンではなく、背後で動作している libtidy のビルド日時を取得できるため、環境情報の記録・デバッグ・バージョン依存処理の切り替えなどに活用できます。
| 項目 | 内容 |
|---|---|
| 関数名 | tidy_get_release |
| 所属拡張 | Tidy |
| 戻り値の型 | string |
| 手続き型 / OOP | 手続き型(OOP 版: $tidy->getRelease()) |
| PHP バージョン | PHP 5 以降 |
| 公式ドキュメント | https://www.php.net/manual/ja/tidy.getrelease.php |
2. 構文
// 手続き型
tidy_get_release(): string
// オブジェクト指向型
$tidy->getRelease(): string
パラメータ
この関数はパラメータを取りません(手続き型・OOP 型ともに引数なし)。
戻り値
Tidy ライブラリ(libtidy)のリリース日付を表す文字列。形式は環境・ビルドによって異なりますが、多くの場合 "1st August 2023" のような英語の日付文字列が返ります。
3. 動作概念図
┌──────────────────────────────────────────────────────────┐
│ PHP スクリプト │
│ tidy_get_release() │
└─────────────────────┬────────────────────────────────────┘
│ Tidy 拡張経由で libtidy に問い合わせ
▼
┌──────────────────────────────────────────────────────────┐
│ libtidy(Tidy ライブラリ本体) │
│ ┌──────────────────────────────────────────────────┐ │
│ │ ビルド時に埋め込まれたリリース日付文字列 │ │
│ │ 例: "1st August 2023" │ │
│ └──────────────────────────────────────────────────┘ │
└─────────────────────┬────────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────┐
│ 戻り値: string │
│ "1st August 2023" │
└──────────────────────────────────────────────────────────┘
※ tidy オブジェクトの生成・HTML の解析は不要
(引数なしで任意のタイミングで呼び出せる)
4. 基本的な使い方
<?php
// 引数不要・オブジェクト生成不要でそのまま呼び出せる
$release = tidy_get_release();
echo "Tidy ライブラリのリリース日付: " . $release . PHP_EOL;
// 出力例: Tidy ライブラリのリリース日付: 1st August 2023
5. 実践的なコード例
例1: 環境情報をまとめて表示するクラス
<?php
class TidyEnvironmentInfo
{
public function getRelease(): string
{
return tidy_get_release();
}
public function getPhpTidyVersion(): string
{
return phpversion('tidy') ?: '不明';
}
public function printAll(): void
{
echo "=== Tidy 環境情報 ===" . PHP_EOL;
echo "libtidy リリース日付 : " . $this->getRelease() . PHP_EOL;
echo "PHP tidy 拡張バージョン: " . $this->getPhpTidyVersion() . PHP_EOL;
echo "PHP バージョン : " . PHP_VERSION . PHP_EOL;
echo "OS : " . PHP_OS . PHP_EOL;
}
}
$info = new TidyEnvironmentInfo();
$info->printAll();
出力例:
=== Tidy 環境情報 ===
libtidy リリース日付 : 1st August 2023
PHP tidy 拡張バージョン: 8.2.0
PHP バージョン : 8.2.10
OS : Linux
例2: OOP スタイルで getRelease() を使う
<?php
class TidyOopReleaseChecker
{
private tidy $tidy;
public function __construct()
{
$this->tidy = new tidy();
$this->tidy->parseString('<html><body></body></html>', [], 'UTF8');
}
public function getRelease(): string
{
return $this->tidy->getRelease();
}
public function describe(): void
{
echo "OOP スタイルで取得したリリース日付: " . $this->getRelease() . PHP_EOL;
}
}
$checker = new TidyOopReleaseChecker();
$checker->describe();
出力例:
OOP スタイルで取得したリリース日付: 1st August 2023
例3: リリース日付をパースして年・月・日に分解するクラス
<?php
class TidyReleaseDateParser
{
private string $raw;
public function __construct()
{
$this->raw = tidy_get_release();
}
public function getRaw(): string
{
return $this->raw;
}
public function toDateTime(): ?\DateTimeImmutable
{
// 例: "1st August 2023", "14th November 2022" などに対応
$normalized = preg_replace('/(\d+)(st|nd|rd|th)/', '$1', $this->raw);
if ($normalized === null) {
return null;
}
$dt = \DateTimeImmutable::createFromFormat('j F Y', trim($normalized));
return $dt ?: null;
}
public function getYear(): ?int
{
return $this->toDateTime()?->format('Y') !== null
? (int) $this->toDateTime()->format('Y')
: null;
}
public function describe(): void
{
$dt = $this->toDateTime();
echo "生のリリース文字列 : " . $this->raw . PHP_EOL;
if ($dt !== null) {
echo "年 : " . $dt->format('Y') . PHP_EOL;
echo "月 : " . $dt->format('F') . PHP_EOL;
echo "日 : " . $dt->format('j') . PHP_EOL;
echo "ISO 8601 形式 : " . $dt->format('Y-m-d') . PHP_EOL;
} else {
echo "日付のパースに失敗しました。" . PHP_EOL;
}
}
}
$parser = new TidyReleaseDateParser();
$parser->describe();
出力例:
生のリリース文字列 : 1st August 2023
年 : 2023
月 : August
日 : 1
ISO 8601 形式 : 2023-08-01
例4: リリース日付をログに記録するクラス
<?php
class TidyReleaseLogger
{
public function __construct(private readonly string $logFile) {}
public function log(): void
{
$release = tidy_get_release();
$line = sprintf(
"[%s] libtidy release: %s | PHP: %s | OS: %s\n",
date('Y-m-d H:i:s'),
$release,
PHP_VERSION,
PHP_OS
);
file_put_contents($this->logFile, $line, FILE_APPEND);
echo $line;
}
}
$logger = new TidyReleaseLogger('/tmp/tidy_release.log');
$logger->log();
出力例:
[2026-07-09 12:00:00] libtidy release: 1st August 2023 | PHP: 8.2.10 | OS: Linux
例5: リリース年が古すぎる場合に警告を出すクラス
<?php
class TidyVersionGuard
{
private const MINIMUM_YEAR = 2020;
private string $release;
public function __construct()
{
$this->release = tidy_get_release();
}
private function extractYear(): ?int
{
if (preg_match('/\d{4}/', $this->release, $m)) {
return (int) $m[0];
}
return null;
}
public function check(): void
{
$year = $this->extractYear();
echo "libtidy リリース: " . $this->release . PHP_EOL;
if ($year === null) {
echo "⚠️ リリース年を特定できませんでした。" . PHP_EOL;
return;
}
if ($year < self::MINIMUM_YEAR) {
echo "❌ libtidy が古い可能性があります({$year}年)。"
. self::MINIMUM_YEAR . "年以降のバージョンへの更新を推奨します。" . PHP_EOL;
} else {
echo "✅ libtidy のバージョンは問題ありません({$year}年)。" . PHP_EOL;
}
}
}
$guard = new TidyVersionGuard();
$guard->check();
出力例(最新環境):
libtidy リリース: 1st August 2023
✅ libtidy のバージョンは問題ありません(2023年)。
出力例(古い環境):
libtidy リリース: 25th March 2013
❌ libtidy が古い可能性があります(2013年)。2020年以降のバージョンへの更新を推奨します。
例6: 環境情報を JSON で出力するクラス
<?php
class TidyEnvJsonExporter
{
public function export(): string
{
$tidy = tidy_parse_string('<html><body></body></html>', [], 'UTF8');
tidy_clean_repair($tidy);
$data = [
'tidy' => [
'release' => tidy_get_release(),
'html_ver' => tidy_get_html_ver($tidy),
'status' => tidy_get_status($tidy),
'php_extension' => phpversion('tidy') ?: null,
],
'php' => [
'version' => PHP_VERSION,
'os' => PHP_OS,
'sapi' => PHP_SAPI,
],
'generated_at' => date('c'),
];
return json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
}
}
$exporter = new TidyEnvJsonExporter();
echo $exporter->export();
出力例:
{
"tidy": {
"release": "1st August 2023",
"html_ver": 0,
"status": 0,
"php_extension": "8.2.0"
},
"php": {
"version": "8.2.10",
"os": "Linux",
"sapi": "cli"
},
"generated_at": "2026-07-09T12:00:00+09:00"
}
例7: リリース日付に基づいて処理を切り替えるクラス
<?php
class TidyVersionAwareProcessor
{
private ?int $releaseYear;
public function __construct()
{
$release = tidy_get_release();
preg_match('/\d{4}/', $release, $m);
$this->releaseYear = isset($m[0]) ? (int) $m[0] : null;
}
public function process(string $html): string
{
$config = $this->buildConfig();
$tidy = tidy_parse_string($html, $config, 'UTF8');
tidy_clean_repair($tidy);
return tidy_get_output($tidy);
}
private function buildConfig(): array
{
// 2020年以降の libtidy では HTML5 doctype が安定してサポートされる
if ($this->releaseYear !== null && $this->releaseYear >= 2020) {
echo "✅ 新しい libtidy ({$this->releaseYear}年): HTML5 モードで処理します。" . PHP_EOL;
return ['indent' => true, 'doctype' => 'html5', 'wrap' => 80];
}
echo "⚠️ 古い libtidy: 互換モード(HTML 4.01)で処理します。" . PHP_EOL;
return ['indent' => true, 'doctype' => 'loose', 'wrap' => 80];
}
}
$processor = new TidyVersionAwareProcessor();
$output = $processor->process('<html><body><p>バージョン対応サンプル</p></body></html>');
echo $output;
出力例(新しい libtidy):
✅ 新しい libtidy(2023年): HTML5 モードで処理します。
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<p>バージョン対応サンプル</p>
</body>
</html>
6. 関連関数との比較
| 関数名 | 用途 | 戻り値 | 引数 |
|---|---|---|---|
tidy_get_release() | libtidy のリリース日付を取得 | string | なし |
tidy_get_html_ver() | 解析済み HTML のバージョン番号を取得 | int | tidy オブジェクト |
tidy_get_status() | 解析結果のステータスを取得 | int | tidy オブジェクト |
tidy_get_output() | 整形済み HTML を文字列で取得 | string | tidy オブジェクト |
tidy_get_error_buffer() | エラーバッファの内容を取得 | string|false | tidy オブジェクト |
tidy_get_opt_doc() | オプションの説明文字列を取得 | string|false | tidy オブジェクト, string |
phpversion('tidy') | PHP tidy 拡張のバージョンを取得 | string|false | string |
7. よくある落とし穴と注意点
① 返される文字列の形式は環境依存
tidy_get_release() の戻り値は libtidy のビルド時に埋め込まれた文字列であり、形式が統一されていません。"1st August 2023" のような英語序数形式が一般的ですが、環境によって異なる場合があります。パースする際は柔軟な正規表現を使いましょう。
// 年だけ抽出する(形式に依存しない安全な方法)
preg_match('/\d{4}/', tidy_get_release(), $m);
$year = (int) ($m[0] ?? 0);
② PHP の tidy 拡張バージョンとは別物
tidy_get_release() は libtidy ライブラリのリリース日付であり、PHP の tidy 拡張モジュールのバージョン(phpversion('tidy') で取得)とは異なります。混同しないよう注意してください。
echo tidy_get_release(); // libtidy のリリース日付(例: "1st August 2023")
echo phpversion('tidy'); // PHP tidy 拡張のバージョン(例: "8.2.0")
③ tidy オブジェクトの生成は不要
tidy_get_release() は手続き型では引数不要、OOP 版でも tidy インスタンスさえあれば HTML の解析前でも呼び出せます。tidy_parse_string() や tidy_clean_repair() を事前に実行する必要はありません。
// OK: オブジェクト生成直後に呼べる
$tidy = new tidy();
echo $tidy->getRelease(); // HTML 解析前でも動作する
// OK: 手続き型はオブジェクト不要
echo tidy_get_release();
④ Tidy 拡張が無効な環境では呼び出せない
他の Tidy 関数と同様、extension_loaded('tidy') で拡張の有無を確認してから使用してください。
if (!extension_loaded('tidy')) {
throw new \RuntimeException('Tidy 拡張が有効ではありません');
}
echo tidy_get_release();
8. まとめ
| 項目 | 内容 |
|---|---|
| 主な用途 | libtidy ライブラリのリリース日付を取得する |
| 戻り値 | string(例: "1st August 2023") |
| 引数 | なし(手続き型)/ tidy インスタンス(OOP 版) |
| OOP 版 | $tidy->getRelease() |
| HTML 解析の事前実行 | 不要 |
| 注意点 | 戻り値の形式は環境依存・PHP 拡張バージョンとは別物 |
| よく使う組み合わせ | phpversion('tidy'), tidy_get_html_ver(), tidy_get_status() |
tidy_get_release() は引数不要で手軽に呼び出せるシンプルな関数ですが、libtidy の世代を判定してバージョン依存の処理を切り替える用途や、環境情報のログ・エクスポートに実用的です。tidy_get_html_ver() や tidy_get_output() など他の Tidy 関数と組み合わせて、環境情報を一括管理するユーティリティクラスに組み込むと便利です。
