【PHP】Webサーバー(Linux系)で使用できるフォントファイルを確認する方法
更新日:2023/08/28
サーバーにインストールされているフォントファイルを確認したいことがあります。
サーバーにログインできるなら簡単ですが、レンタルWebサーバーを使用していると難しいケースがあります。
そこで、ブラウザ経由で確認する方法をお伝えします。
fc-listコマンドを使用する
Linux系のサーバーはfc-listコマンドでインストールされているフォントファイルを確認できます。
$ fc-list
日本語に対応したフォントのみを探したいときは、次のように入力します。
$ fc-list :lang=ja
ターミナル等を使用できない時などにブラウザで確認するときは、次のようなPHPファイルを作成します。
$fc_list = exec('fc-list',$o);
echo implode('<br>',$o);
ブラウザ表示(html)なので、改行として<br>を使用するのがポイントですね。
ブラウザで作成したphpを呼び出すと、フォント一覧がフルパスで表示されました。
ImageMagickを使用する
サーバーにImageMagickのconvertコマンドがインストールされているなら、次のコマンドでもフォントを確認できます。
$ convert -list font
PHPで呼び出すコードは、次のようになります。
$fc_list = exec('convert -list font',$o);
echo '<pre>' . implode("\n",$o) .'</pre>';
出力結果にスペースでのインデントが含まれるので、preタグで囲っています。
ブラウザで呼び出すと、次のように表示されます。
fc-listよりも情報が多いですね。
しかしfc-listで表示されたフォントファイルの一部がconvertで表示されませんでした。
正確な情報が知りたいときは、両方のコマンドを試した方がいいかもしれません。
おまけ:フォント一覧イメージを描画する
fc-listの結果を元にして、文字列描画イメージをimgタグで返すコードを紹介します。
<?php
const sampleText = 'abc gjpq あいうえお #$& 123';
// フォント描画イメージをbase64変換して返す
function getIamgeBase64( $text , $fontFile , $size , $margin ){
$boundBox = imagettfbbox( $size , 0 , $fontFile , $text );
if( $boundBox === false ) return null;
$image = imagecreatetruecolor(abs($boundBox[2] - $boundBox[0]) + $margin * 2
,abs($boundBox[1] - $boundBox[7]) + $margin * 2);
imagesavealpha($image, true);
$bgColor = imagecolorallocatealpha($image, 0, 0, 0, 127);
imagefill($image, 0, 0, $bgColor);
$black = imagecolorallocate($image, 0, 0, 0);
ImageTTFText($image, $size, 0, $margin, $size+$margin, $black, $fontFile, $text);
imagecolordeallocate($image,$bgColor);
imagecolordeallocate($image,$black);
ob_start();
imagePng( $image );
$base64Text = base64_encode( ob_get_contents( ) );
ob_end_clean();
imagedestroy($image);
return $base64Text;
}
// fc-listの実行
exec('fc-list',$o);
// フォント名でソート
$o = array_filter( array_map( function($e){ return explode( ':' , $e ); } , $o )
, function($e){ return count($e) === 3 && trim( $e[2] ) !== '';} );
usort( $o , function( $a , $b ){ return strcmp($a[1],$b[1]);} );
// htmlタグを出力
foreach( $o as $e ){
echo "<p>{$e[1]}:{$e[2]}:{$e[0]}</p>";
$b64 = getIamgeBase64( sampleText , $e[0] , 30 , 10);
echo $b64 === null ? '<p> -描画できません</p>'
: "<p><img src=\"data:image/png;base64,{$b64}\"></p>";
}
ブラウザで実行すると、次のようになります。
日本語対応しているフォントがインストールされているかどうか確認できるので便利ですよ。
更新日:2023/08/28
関連記事
スポンサーリンク
記事の内容について
こんにちはけーちゃんです。
説明するのって難しいですね。
「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。
裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。
掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。
ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php
このサイトは、リンクフリーです。大歓迎です。