PHPでプログラムを作っている | TheoryOfContraints official blog

PHPでプログラムを作っている

最近、PHPでプログラムをしている

 

スマホのゲームのサーバーは、まだ、golangではなく、PHPで出来ているそうなので、久々、PHPでプログラムを作って、少しサーバーのプログラムの作り方を覚え直そうと思ったので

 

まぁ、それほどPHPのプログラムの作り方変化はなかったので、どこまでしょぼく、と言うかスマートに作ろうと思ってたのですけど、データのバリテーションの部分は、(バグが残っているかも知れない)仮組みの状態で

 

<?php

class STR {    
    // 全角トリム
    function mbTrim($str) {
        $str = self::toUtf8($str);
        $str = preg_replace('/[\r\n]/u', '', $str);
        return preg_replace('/\A[\p{C}\p{Z}]++|[\p{C}\p{Z}]++\z/u', '', $str);
    }
    
    // UTF変換
    function toUtf8($str) {
        return mb_convert_encoding($str, "UTF-8", "auto");
    }
    
    // <br>変換
    function toBr($str) {
        $str = preg_replace('/\n\r/u', '\r\n', $str);
        $str = preg_replace('/\r\n/u', '\r', $str);
        $str = preg_replace('/\n/u', '\r', $str);
        $str = preg_replace('/\r/u', '<br>', $str);
        return $str;
    }
    
    function toRn($str) {
        $str = preg_replace('/<br>/u', '\r\n', $str);
        return $str;
    }

    function len($str) {
        return mb_strlen($str);
    }
    
    function empty($str) {
        if ($str == "") {
            return true;
        }
        return false;
    }
    
    function htmlConvert($str) {
        return htmlspecialchars($str, ENT_QUOTES);
    }

    function url($str) {
        return preg_match('/\Ahttps?(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)\z/', $str);
    }

    function password($str) {
        return preg_match('/\A[a-zA-Z0-9]+\z/i', $str);
    }

    function number($str) {
        return preg_match('/\A[0-9]+\z/i', $str);
    }
    
    function mail($str) {
        // https://gist.github.com/felds/864067
        $regexp = '/^(?:[a-z0-9!#$%\'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&\'*+\/=?^_`{|}'.
                '~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\['.
                '\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-'.
                '9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-'.
                '9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?'.
                '|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-' .
                '\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])$/';
        return preg_match($regexp, $str);
    }
}

?>

 

って、クラスをネームスペース的に組んで、

 

        $str = STR::mbTrim($_POST['station']);
        $str = STR::htmlConvert($str);
        $data['station'] = $str;
        if (STR::empty($str)) {
            $error['error'] = 1;
            $error['station'] = "ポッドキャストの名前がありません";
        } elseif (STR::len($str) > 100) {
            $error['error'] = 1;
            $error['station'] = "ポッドキャストの名前が100文字以上です";
        }
 

って、elseifでバリデーションを羅列するプログラムの作り方をしているけど、

 

バリデーションの条件で使う、文字列データのチェックの関数があればelseifを使ってバリデーションをチェック出来るので、PHPの標準関数でバリデーション関数があれば、普通にBASICな作り方でウェブのアプリが作れるのでは?

 

って思った

 

標準のfilter関数は使えないんですよね。URLのチェックでスペースや<を調べてないので、正規表現で調べないといけない。それらのバリデーションが標準であれば、普通にウェブのプラグラムが作れるのに

 

ウェブのプログラムは基本、データは文字列変数で、php5では型も無く、基本、文字列変数なので、ウェブのプログラムはほとんど文字列変数の処理を作るのが仕事になるよなと思いながら作っていた

 

あ、unsetの処理は$hoge==""はやめて、empty()へ変更しておこう