webサーバー

【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を呼び出すと、フォント一覧がフルパスで表示されました。

fc-listの結果

 

ImageMagickを使用する

サーバーにImageMagickのconvertコマンドがインストールされているなら、次のコマンドでもフォントを確認できます。

$ convert -list font

PHPで呼び出すコードは、次のようになります。

$fc_list = exec('convert -list font',$o);
echo '<pre>' . implode("\n",$o) .'</pre>';

出力結果にスペースでのインデントが含まれるので、preタグで囲っています。

ブラウザで呼び出すと、次のように表示されます。

convert -list fontの結果

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

書いた人(管理人):けーちゃん

スポンサーリンク

記事の内容について

null

こんにちはけーちゃんです。
説明するのって難しいですね。

「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。

裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。

掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。

ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php

 

このサイトは、リンクフリーです。大歓迎です。