【 PHP 】PHP8に入門してみた 140日目 PHPの基本 ( 組み込み関数 タブ区切りとか、テキスト読み込み another)

2023年1月8日

PHP8技術者認定初級試験 が始まるようなので 試験に向けて (できるだけ)勉強しようと思います! 使用する書籍は独習PHP 第4版(山田 祥寛)|翔泳社の本 (shoeisha.co.jp) となります。

組み込み関数

タブ区切りテキスト読み込み アナザー fgets関数

fgetsはテキストファイルから1行ずつデータを取得します。

fgetsvcsのように取得した1行のデータをさらに分割・・・といったことはしません。

ただシンプル故に自由度も高いです。

もちろんfgetscsvのようなタブ栗木テキストの読み込みも実現できます。

<!DOCTYPE html>

<html>

<head>
    <meta charset="UTF-8" />
    <title>アクセスログ</title>
    <!-- Bootstrapを有効化 -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" />
</head>

<body>
    <table class="table">
        <thead>
            <tr>
                <th>アクセス日時</th>
                <th>スクリプト名</th>
                <th>ユーザーエージェント</th>
                <th>リンク元のURL</th>
            </tr>
        </thead>
        <tbody>
            <?php
            // ファイルを読み取り専用でオープン
            $file = fopen('access.log', 'r');
            // ファイルを共有ロック
            flock($file, LOCK_SH);
            // 行単位でテキストを読み込み&タブ文字で分割
            while ($fline = fgets($file, 1024)) {
                // タブに分割を自身で実装!
                $line = explode("\t", trim($fline));

                print '<tr>';
                // 分割した結果を順に出力
                foreach ($line as $value) {
                    print '<td>' . $value . '</td>';
                }
                print '</td>';
            }
            // ロックの解除
            flock($file, LOCK_UN);

            // ファイルをクローズ
            fclose($file);
            ?>
        </tbody>
    </table>
</body>

</html>

タブ区切りテキスト読み込み アナザー file関数

file関数はテキストデータを配列として一気に読み込みます。

そう・・・ドカン(!!!)と読み込みドカン(!!!!)とメモリを逼迫します。注意しましょう。

<!DOCTYPE html>

<html>

<head>
    <meta charset="UTF-8" />
    <title>アクセスログ</title>
    <!-- Bootstrapを有効化 -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" />
</head>

<body>
    <table class="table">
        <thead>
            <tr>
                <th>アクセス日時</th>
                <th>スクリプト名</th>
                <th>ユーザーエージェント</th>
                <th>リンク元のURL</th>
            </tr>
        </thead>
        <tbody>
            <?php
            $file = FIle('access.log', FILE_IGNORE_NEW_LINES);
            foreach ($file as $fline) {
                $line = explode("\t", trim($fline));

                print '<tr>';
                // 分割した結果を順に出力
                foreach ($line as $value) {
                    print '<td>' . $value . '</td>';
                }
                print '</tr>';
            }
            ?>
        </tbody>
    </table>
</body>

</html>

 

メモ

ドカン!!!は注意です。

PHPPHP

Posted by raika@blog