バナー広告のプレートなどのように、画像に任意のテキストを埋め込んで、画像とテキストを一緒に表示する場合もあります。
<?php
header( "Content-Type: image/png" );
$image = imagecreate( 120, 120 );
$green = imagecolorallocate( $image, 131, 195, 28 );
$white = imagecolorallocate( $image, 255, 255, 255 );
$message = "PHP Beginner";
$start_x = 60 - ( strlen( $message ) * imagefontwidth( 5 ) / 2 );
$start_y = 60 - imagefontheight( 5 ) / 2;
imagestring( $image, 5, $start_x, $start_y, $message, $white );
imagepng( $image );
imagedestroy( $image );
?>
上記のスクリプトでは、imagecreate()関数で生成した画像に、指定されたテキスト「PHP Beginner」を、imagestring()関数で埋め込んでいます。
strlen()関数で文字列の長さを、imagefontwidth()関数でフォントの幅を、imagefontheight()関数でフォントの高さをそれぞれ取得します。

imagestring( image, font, x, y, string string, color );
strlen( string, $string );
imagefontwidth( int font );
imagefontheight( int font );
これまで学習した画像関数を使用して、画像の色や大きさ、形、テキストの色やフォントを変えて、いろいろな画像を描いてみてください。
アクセスカウンターとは、あるWebページに何回アクセスがあったかを数えるプログラムおよびその表示結果のことです。
アクセスカウンターを使用して、「あなたは○○人目のお客様です」のようにページ上に表示されているWebサイトも多々あります。高機能なものになると、アクセス記録を取って解析する機能を持ったものや、同一アドレスからの連続アクセスを除外する機能を持つものなどもあります。
今回はまず、「ファイル操作」の「ファイルを開く」でローカルディスク(C:)直下に作成したtemplateディレクトリに、「count.txt」というテキストファイルを作成します。「count.txt」には「0」とだけ入力します。
<?php
$fp = fopen( "c:\template\count.txt", "r+" );
$count = fread( $fp, 10 );
$count = $count + 1;
fseek( $fp, 0 );
fputs( $fp, $count );
fclose( $fp );
?>
<p>あなたは <?php echo $count; ?> 人目のお客様です。</p>
上記のスクリプトでは、あらかじめ作成しておいたアクセス数を記録するcount.txtファイルを、読み込みおよび書き込みができるように、fopen()関数の引数に「r+」を指定して開いています。
fseek()関数は、ファイルポインタの位置を移動します。引数に「0」を指定することで、ファイル内の先頭に移動するので、加算したアクセス数をfwrite()関数で書き込むことができます。
あなたは1人目のお客様です。
あなたは2人目のお客様です。
上記のスクリプトから、一回目にアクセスした場合は、「あなたは1人目のお客様です。」が表示され、2回目にアクセスした場合は「あなたは2人目のお客様です。」が表示されます。
あなたは1人目のお客様です。
あなたは2人目のお客様です。
| handle | ファイルポインタを指定します。 |
|---|---|
| offset | 移動数を指定します。移動数は基準点(始点)から何バイト移動するかをバイト数で示します。 |
| whence | 省略可能なオプション引数で、始点、つまり移動の開始位置を指定します。省略した場合にはファイルの最初におかれます。第3引数で指定できる値は、注)表1の「fseek()関数における始点」の通りです。 |
| whence | 説明 |
|---|---|
| SEEK_SET | 始点をファイルの最初に置く(デフォルト) |
| SEEK_CUR | 始点を現在のファイルポインタの位置に置く |
| SEEK_END | 始点をファイルの終端に置く |
<?php
$fp = fopen( "c:\template\count.txt", "r+" );
$count = fread( $fp, 10 );
$count = $count + 1;
header( "Content-Type: image/png" );
$image = imagecreate( 120, 120 );
$green = imagecolorallocate( $image, 131, 195, 28 );
$white = imagecolorallocate( $image, 255, 255, 255 );
$start_x = 60 - ( strlen( $count ) * imagefontwidth( 5 ) / 2 );
$start_y = 60 - imagefontheight( 5 ) / 2;
imagestring( $image, 5, $start_x, $start_y, $count, $white );
imagepng( $image );
imagedestroy( $image );
fseek( $fp, 0 );
fputs( $fp, $count );
fclose( $fp );
?>

一回目のアクセス時は「1」、二回目アクセス時は「2」となります。