【初学者奮闘録】訪問者数カウンターに関わる関数についての学習(PHP)


はじめに

この記事は、独学開始から約3ヶ月の実務未経験者が作成したものです。
よって、スキルは非常に未熟なため、決してこの記事の内容を鵜呑みにされないように、ご注意ください。
(未熟な私が本記事の作成に至った背景については、本文の最後にお伝えします。)
また本記事は、PHP言語の基礎理解を目的としております。
よって、Webアプリ開発におけるルーティングなどについては考慮できておりませんので、ご容赦ください。

参考にしたサイト記事

本記事を作成するために参照したのは、PHP公式マニュアルです。
https://www.php.net/

【訪問者カウンター】のコードレビュー

まず、今回レビューしていく完成コードは以下の通りです。

function set_count( $file_name = "counter.txt"){

//【ブロック①】
        if( file_exists($file_name) ){
            $count = (int)file_get_contents($file_name) + 1;
            file_put_contents($file_name, $count);      
//【ブロック②】
        }else{
            $handle = fopen($file_name , 'w+');
            $count = 1;     
            fwrite($handle, $count);
            fclose($handle);
    }

    return $count;
    }

私が設定したブロック毎にレビューしていきます。

【ブロック①】file_exists関数 ・ file_get_contents関数 ・ file_put_contents関数

//【ブロック①】
        if( file_exists($file_name) ){
            $count = (int)file_get_contents($file_name) + 1;
            file_put_contents($file_name, $count);
}

まずfile_exists関数は、【ファイルまたはディレクトリが存在するかどうかを調べる関数】です。
今回の場合、file_exists関数の引数内にある$file_nameに代入されている counter.txtというテキストファイルがディレクトリ内に存在しているかを確認しています。
$file_name(=counter.txt)がディレクトリ内に存在しなかった場合、後ほど解説するelse以下へ条件分岐します。

もし$file_name(=counter.txt)が存在した場合、file_get_contents関数が起動します。
file_get_contents関数は、【ファイルの内容を全て文字列に読み込む関数】です。
つまり、file_get_contents関数の第一引数にある$file_nameに書き込まれている文字を読み込んでいます。
もしも、$file_name(=counter.txt)に『整数1』のみが記載されていた場合、file_get_contentsは『1』となります。
後書きで『+1』とも記載さているため、1+1の合計値である『2』が$countに代入されます。

次に、file_put_contents関数が起動します。
file_put_contents関数は、【データをファイルに書き込む】関数です。
file_put_contents関数の第一引数には、データの書き込み先のファイルが定義されます。
この場合は、$file_name(=counter.txt)です。
そして、第二引数には、書き込まれるデータを定義します。
この場合、$countに代入されている『2』が書き込み先のファイルに上書きされます。
※余談ですが、以下のように記載すれば、データを上書きするのではなく、追記ができます。

file_put_contents($file_name, $count)FILE_APPEND

【ブロック②】fopen関数 ・ fwrite関数 ・ fclose関数

//【ブロック②】
        else{
            $handle = fopen($file_name , 'w+');
            $count = 1;     
            fwrite($handle, $count);
            fclose($handle);
}

次に、else以下のコードについて、レビューしていきます。

まず、fopen関数です。
fopen関数の挙動は引数のmodeによって異なります。
詳しくは、以下のURLを確認ください。
https://www.php.net/manual/ja/function.fopen.php
今回の例でのfopen関数の挙動は、以下の通りです。
①$file_name(=counter.txt)がディレクトリ内に存在しないことを確認する。
②fopen関数の第二引数のmodeであるw+が発動し、新規ファイルが作成される。
modeについては以下の公式マニュアルを参照ください。
fopen関数により、新規ファイルが作成され、且つそれに書き込み可能な状態となります。
その状態のまま、$handleに代入されます。

次に、fwrite関数です。
fwrite関数の第二引数で定義されているデータ($count)を、第一引数で定義されている『書き込み可能なファイル』に書き込まれます。

最後に、fclose関数によって、開かれた状態のファイルを閉じます。

最後に

上記でもお伝えいたしましたが、私は独学開始から約3ヶ月の実務未経験者です。
そんな未熟な私が記事を投稿しようと決意した理由は、以下の通りです。
・初学者の記事が多いほどに、プログラミングの学習を検討している方の背中を押せると考えたから(私自身、学習を開始するまでに初学者の記事を読み漁っておりました)
・周りに同じ境遇の仲間がいない、孤独な初学者さんの競争心を掻き立てられるのではと考えたから(学習効率を上げるためにはライバルの存在は重要)
・あるいは「自分のレベルはこいつよりも上」と優越感を与えられるのではと考えたから(学習効率を上げるためには自信を持つことも重要)

プロのエンジニア同様、初学者にもそれなりの努めがあると、私は思います。
今後も、下手くそながらも【初学者ページ】を上げ続けて参ります。

ありがとうございました。