kazpgmの日記

『プログラム自動作成@自動生成』作成の日記

「kaz_PHP自動作成◎自動生成お助けTOOL」をphp8に対応したので、VectorにUPした。

17:20
①「kaz_PHP自動作成◎自動生成お助けTOOL」をphp8.1.6用のXAMPP(xampp-windows-x64-8.1.6-0-VS16-installer.exe)で動く様にした。
 これから、Vectorに載せる。OKがきたらまた報告する予定。
www.vector.co.jp
 php7.2→php8.1.6は、こんなに修正しないと動かない。なかなか大変だ~。
Vectorに載せた修正履歴。(php7.2→php8.1.6バージョンアップ)

・202109191800
 php8.1.6用のXAMPP(xampp-windows-x64-8.1.6-0-VS16-installer.exe)で動く様にした。
 php7.2→php8.1.6VerUpに伴う以下のエラーなどに対応した。
    ★エラー:
        Fatal error: Uncaught ArgumentCountError: Too few arguments to function userErrorHandler(), 
        4 passed in C:\xampp\htdocs\kaz\index.php on line 11 and exactly 5 expected in C:\xampp\htdocs\.kazphp\common.php:75 
        Stack trace: #0 C:\xampp\htdocs\kaz\index.php(11): userErrorHandler(2, 'Undefined array...', 'C:\\xampp\\htdocs...', 11) #1 
        {main} thrown in C:\xampp\htdocs\.kazphp\common.php on line 75
    対処:php8では、引数$varsがなくなったので削除した。
    解決:
    function userErrorHandler ($errno, $errmsg, $filename, $linenum, $vars) {
        ↓
    function userErrorHandler ($errno, $errmsg, $filename, $linenum) {    

    ★エラー:
        Notice: Only variables should be assigned by reference in C:\xampp\htdocs\kaz\admin\index.php on line 8
    解決:&をなくした
        $o =& htmlspecialchars_r($_REQUEST); // output用(FORMからの入力値)
        ↓
        $o = htmlspecialchars_r($_REQUEST); // output用(FORMからの入力値)

    ★エラー:
        Warning: Undefined array key "mode" in C:\xampp\htdocs\kaz\admin\index.php on line 11
    解決:$_REQUEST['mode']のnullを考慮した。さらに、
    ★エラー:http://localhost:3000/kaz/admin/ 画面に
        Warning: Undefined array key "login" in C:\xampp\htdocs\.kazphp\view\admin\index.html on line 52
         表示された。配列に存在しない項目を参照するとワーニングになるらしい。
    解決:$o['loginid']のnullを考慮した。
        <?= $o['loginid']?>
            ↓
        <?= arryVal($o, 'loginid')?>

    手順:
        ①C:\xampp\htdocs\.kazphp\functions.phpに
        // 配列値取得
        function arryVal ($vars, $itemName) {
            return $vars[$itemName] ?? "";
        }
        を追加した。
        ②html(hinagata\View)、php(\hinagata\Library\index.txt,\hinagata\Library\index_user.txt)を以下のように置換する
        \$err\['([^]]+)\]
        ↓
        arryVal($err, $1)
        及びhtml(hinagata\View)
        \$o\[([^]]+)\]
        ↓
        arryVal($o, $1)
        及びphp(inagata\Model以下のphp、txtおよび作成先フォルダ\.システムphpBasePgm以下のphp)
        \$_REQUEST\[([^]]+)\]←値を入れている項目でないことを確認しながら
        但し
         ・unset($_REQUEST['KAZ_TOOL_token']);はこのままにしておく。
         ・isset( $_REQUEST['pageID'] )以外の、「$_REQUEST['pageID']」は「$_REQUEST['pageID']??0」にする。
        ↓
        arryVal($_REQUEST, $1)
        
        そのほか、表示された。配列に存在しない項目を参照する箇所は修正した。(絶対、値が入っている場所はそのままにした)
        補足:$_SERVERは現在のままでよい。(無いときはワーニングでよいので)

    ★エラー:”Non static method”エラー解消
    解決:function → static functionに修正した
        C:\xampp\htdocs\.kazphp\common\AppCheckUtil.phpのメソッド修正
        checkMoji
        checkDate
        checkDateFromTo
        checkStringCompareTo
        checkNumericCompareTo
        checkCodeValue
        checkNumeric
        checkDotNumeric
        typeOf
        getCharType
        getStringWidth
        checkPhoto
        checkIUPPhoto
        checkDateTime
        checkLrgCodeValue
        checkMidCodeValue
        checkSmlCodeValue

        C:\xampp\htdocs\.kazphp\common\TokenHandle.phpのメソッド修正
        getTokenHtml
        isTokenValid

        C:\xampp\htdocs\.kazphp\common\AppSrchUtil.phpのメソッド修正
        setSqlStrSub1
        setSrchChkBoxArray

        C:\xampp\htdocs\.kazphp\common\AppHtmlUtil.phpのメソッド修正
        getHTMLSelect
        getHTMLRadio
        getHTMLCheckBox
        getHTMLCheckBoxDispStr
        creJSvarCategory
        creJSvarAryLrgmidsmlAjaxKbn
        getHTMLSelectLrgPlus
        getHTMLSelectMidPlus
        getHTMLSelectSmlPlus

    ★エラー:C:\xampp\htdocs\.kazphp\common\AppCheckUtil.phpのエラー
                if( ($chartype & $type) == 0 ){で
    [{
        "resource": "/c:/xampp/htdocs/.kazphp/common/AppCheckUtil.php",
        "owner": "_generated_diagnostic_collection_name_#1",
        "code": "1006",
        "severity": 8,
        "message": "Expected type 'null|bool|int|float|string'. Found '文字種を表す定数'.",
        "source": "intelephense",
        "startLineNumber": 618,
        "startColumn": 9,
        "endLineNumber": 618,
        "endColumn": 18
    }]エラー
    解決:ビット演算は(int)が必要らしい。入れたらOKになったから。
                if( ($chartype & $type) == 0 ){で
    ↓
                if( ((int)$chartype & $type) == 0 ){で

    ★エラー:C:\xampp\htdocs\.kazphp\common\AppDbCdUtil.phpのエラー
            $this->smlTblNm, $this->smlTblAriasNm, $this->smlKey1Item, $this->smlKey2Item, $this->smlKey3Item, $this->smlNmItem, $this->smlEngNmItem, $smlDelItem);
    [{
        "resource": "/c:/xampp/htdocs/.kazphp/common/AppDbCdUtil.php",
        "owner": "_generated_diagnostic_collection_name_#1",
        "code": "1008",
        "severity": 8,
        "message": "Undefined variable '$smlDelItem'.",
        "source": "intelephense",
        "startLineNumber": 219,
        "startColumn": 147,
        "endLineNumber": 219,
        "endColumn": 158
    }]エラー
    解決: $smlDelItemを「$this->smlDelItem」に修正する
            $this->smlTblNm, $this->smlTblAriasNm, $this->smlKey1Item, $this->smlKey2Item, $this->smlKey3Item, $this->smlNmItem, $this->smlEngNmItem, $smlDelItem);
    ↓
            $this->smlTblNm, $this->smlTblAriasNm, $this->smlKey1Item, $this->smlKey2Item, $this->smlKey3Item, $this->smlNmItem, $this->smlEngNmItem, $this->smlDelItem);
    と、同様のエラー箇所
                    $this->smlTblNm, $this->smlTblAriasNm, $this->smlKey1Item, $this->smlKey2Item, $this->smlKey3Item, $this->smlNmItem, $this->smlEngNmItem, $smlDelItem);
    ↓
                    $this->smlTblNm, $this->smlTblAriasNm, $this->smlKey1Item, $this->smlKey2Item, $this->smlKey3Item, $this->smlNmItem, $this->smlEngNmItem, $this->smlDelItem);

    ★エラー:C:\xampp\htdocs\.kazphp\common\AppHtmlUtil.phpのエラー
        $str = $str . "<script language='JavaScript'>\n";で
    [{
        "resource": "/c:/xampp/htdocs/.kazphp/common/AppHtmlUtil.php",
        "owner": "_generated_diagnostic_collection_name_#1",
        "code": "1008",
        "severity": 8,
        "message": "Undefined variable '$str'.",
        "source": "intelephense",
        "startLineNumber": 162,
        "startColumn": 9,
        "endLineNumber": 162,
        "endColumn": 13
    }]エラー
    解決:$strを初期設定する。
    <<追加 start>>
        $str = '';
    <<追加 end>>
        $str = $str . "<script language='JavaScript'>\n";
    と、同様のエラー箇所

    ★エラー:C:\xampp\htdocs\.kazphp\view\admin\item\itemAAmendRegisterViewInc.htmlのエラー
    及び、C:\xampp\htdocs\.kazphp\view\admin\item\itemAListView.htmlのエラー
    <script>
    <!-- 
    var cal1_srch_item54_from = new JKL.Calendar("calid_srch_item54_from","frm","srch_item54_from");で
    [{
        "resource": "/c:/xampp/htdocs/.kazphp/view/admin/item/itemAAmendRegisterViewInc.html",
        "owner": "_generated_diagnostic_collection_name_#1",
        "severity": 8,
        "message": "Expression expected.",
        "source": "javascript",
        "startLineNumber": 24,
        "startColumn": 1,
        "endLineNumber": 24,
        "endColumn": 2
    }]エラー
    解決:カレンダー表示の箇所。「<!-- 」→「//<!-- 」に修正した
    <script>
    //<!-- 
    var cal1_srch_item54_from = new JKL.Calendar("calid_srch_item54_from","frm","srch_item54_from");で

    ★エラー:C:\xampp\htdocs\.kazphp\check_functions.phpのエラー
        $extStr = implode( $exts, ")|(" );
    と、
            $errorMessage = 'アップロード可能な画像拡張子は' . implode( $exts, ',' ) . 'です';
    [{
        "resource": "/c:/xampp/htdocs/.kazphp/check_functions.php",
        "owner": "_generated_diagnostic_collection_name_#1",
        "code": "1006",
        "severity": 8,
        "message": "Expected type 'null|array'. Found 'string'.",
        "source": "intelephense",
        "startLineNumber": 9,
        "startColumn": 28,
        "endLineNumber": 9,
        "endColumn": 33
    }]エラー
    解決:implodeの引数指定の順番が間違っていた。
        $extStr = implode( $exts, ")|(" );
    ↓
        $extStr = implode( ")|(",  $exts);
            $errorMessage = 'アップロード可能な画像拡張子は' . implode( $exts, ',' ) . 'です';
    ↓
            $errorMessage = 'アップロード可能な画像拡張子は' . implode( ',', $exts) . 'です';

    ★エラー:C:\xampp\htdocs\kaz\admin\item\itemA.phpのエラー
            $result = AppCheckUtil::checkCodeValue($vars, $errorMessages, $o["c_elements_idx"]=='0'?"有効/無効データ":"use/nouse data",  $result, "srch_deldt_flg", "YUKO_FLG", false,'0');
    [{
        "resource": "/c:/xampp/htdocs/kaz/admin/item/itemA.php",
        "owner": "_generated_diagnostic_collection_name_#1",
        "code": "1008",
        "severity": 8,
        "message": "Undefined variable '$o'.",
        "source": "intelephense",
        "startLineNumber": 760,
        "startColumn": 65,
        "endLineNumber": 760,
        "endColumn": 67
    }]エラー
    解決:    global $o;を追加した。
    // 検索条件入力値のチェック
    function srchValidCheck(&$vars) {
    <<追加 start>>
        global $o;
    <<追加 end>>

    ★エラー:C:\xampp\htdocs\kaz\admin\logininfo\logininfo.phpのエラー
        $pageNavi =new PageNavi(array(でPageNaviクラスのコンストラクタ(function PageNavi($options = array(), $eleIdx = '0'))が
        動かない。    
    解決:クラス名と同じ名前のコンストラクタは、PHP 5.3.3 以降はコンストラクタとみなされない。とあったが、PHP7.2までは動いた。
    C:\xampp\htdocs\.kazphp\PageNavi.class.phpを修正
    function PageNavi($options = array(), $eleIdx = '0')
    ↓
    function __construct($options = array(), $eleIdx = '0')

    ★エラー:C:\xampp\htdocs\.kazphp\functions.phpを修正
            $url = ($_SERVER['HTTPS'] == 'on' ? 'https' : 'http') . '://' . $_SERVER['SERVER_NAME'] . $string;で
            $_SERVER['HTTPS'] が存在しないときワーニングになる。
    解決:$_SERVER['HTTPS']は存在確認することにした。
            $url = ($_SERVER['HTTPS'] == 'on' ? 'https' : 'http') . '://' . $_SERVER['SERVER_NAME'] . $string;で
    ↓
            $url = (isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on') ? 'https' : 'http') . '://' . $_SERVER['SERVER_NAME'] . $string;
    同じよううに
            $url = ($_SERVER['HTTPS'] == 'on' ? 'https' : 'http') . '://' . $_SERVER['SERVER_NAME'] . dirname($_SERVER['PHP_SELF']). '/' . $string;
    ↓
            $url = (isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on') ? 'https' : 'http') . '://' . $_SERVER['SERVER_NAME'] . dirname($_SERVER['PHP_SELF']). '/' . $string;

    ★エラー:エラーログがうまく出ていない
    解決:C:\xampp\htdocs\.kazphp\common.php userErrorHandler関数などのログ出力をerror_log使用に変えた。
    function userErrorHandler ($errno, $errmsg, $filename, $linenum) {    
    ・・・
    <<修正前 start>>
        $fp = fopen(DIR_LOG . date('Ymd') . '_log.txt', 'a');
        flock($fp, LOCK_EX);
        fwrite($fp, 'Date: ' . date('Y/m/d H:i:s') . "\n");
        fwrite($fp, 'Errno: ' . $errno . "\n");
        fwrite($fp, 'Errortype: ' . $errortype[$errno] . "\n");
        fwrite($fp, 'Message: ' . $errmsg . "\n");
        fwrite($fp, 'Filename: ' . $filename . "\n");
        fwrite($fp, 'Linenum: ' . $linenum . "\n");
        fwrite($fp, "----------\n");
        flock($fp, LOCK_UN);
        fclose($fp);
    <<修正前 end>>
    <<修正後 start>>
        // $fp = fopen(DIR_LOG . date('Ymd') . '_log.txt', 'a');
        // flock($fp, LOCK_EX);
        // fwrite($fp, 'Date: ' . date('Y/m/d H:i:s') . "\n");
        // fwrite($fp, 'Errno: ' . $errno . "\n");
        // fwrite($fp, 'Errortype: ' . $errortype[$errno] . "\n");
        // fwrite($fp, 'Message: ' . $errmsg . "\n");
        // fwrite($fp, 'Filename: ' . $filename . "\n");
        // fwrite($fp, 'Linenum: ' . $linenum . "\n");
        // fwrite($fp, "----------\n");
        // flock($fp, LOCK_UN);
        // fclose($fp);
    <<修正後 end>>
    <<追加 start>>
        error_log('Date: ' . date('Y/m/d H:i:s') . "\n", 3, DIR_LOG . date('Ymd') . '_log.txt');
        error_log('Errno: ' . $errno . "\n", 3, DIR_LOG . date('Ymd') . '_log.txt');
        error_log('Errortype: ' . $errortype[$errno] . "\n", 3, DIR_LOG . date('Ymd') . '_log.txt');
        error_log('Message: ' . $errmsg . "\n, 3, DIR_LOG . date('Ymd') . '_log.txt'");
        error_log('Filename: ' . $filename . "\n", 3, DIR_LOG . date('Ymd') . '_log.txt');
        error_log('Linenum: ' . $linenum . "\n", 3, DIR_LOG . date('Ymd') . '_log.txt');
        error_log("----------\n", 3, DIR_LOG . date('Ymd') . '_log.txt');
    <<追加 end>>
        if (!empty($db)) {


    ★改善:PearのDB.phpをやめて、PDOに変更する。
    解決:以下など(以下以外にもある)のDB関連を修正
    C:\xampp\htdocs\.kazphp\db_functions.php
    C:\xampp\htdocs\.kazphp\functions.php
    C:\xampp\htdocs\kaz\admin\shohin\shohinA.php

    ★初期データアップロードのview呼出し関数のパラメータから「$result」を削除する。
     (理由:”Undefined variable $result”エラーになるので)
     例:「iUp■{PRG_NAME}■CsvView($o, $err, $result) {」→「iUp■{PRG_NAME}■CsvView($o, $err) {」
    そのほか、配列関係(CSVの項目数が少ない場合、存在しないINDEXを見にいくので落ちた)や、DB関係で修正した。

    ★phpの日付が日本になっていないので、config.phpを修正した。
    <<修正後>>
    // 日本にする
    //if (substr(PHP_OS, 0, 3) == 'WIN') { 
    //} else { 
    //    define('TIMEZONE', 'Asia/Tokyo');
    //    putenv('TZ=' . TIMEZONE);
    //}
    define('TIMEZONE', 'Asia/Tokyo');
    putenv('TZ=' . TIMEZONE);
    date_default_timezone_set(TIMEZONE);

    ★論理削除のとき「"削除してもよろしいですか?"」だとわかりづらいので
    「"削除(論理削除)してもよろしいですか?"」にした。
    
    ★秘密の画像(例:http://localhost/kaz01u/imageDsp.php?fname=item/A2209190001/item51.png&user=admin」が
    「Uncaught Error: Call to undefined function imagecreatefrompng()」エラーで表示できない。
    xammpのphp.iniの「;extension=gd」→「extension=gd.so」にした。
    なぜだか。PHP8対応のxammpのphp.iniではコメントアウトされているので。
    「PHP作成マクロ(お助けTOOL).xlsm」に追記した。

    ★テーブル項目一覧などの定義エクセルの「項目チェック内容」にあった
    「小数点なし及びカンマあり数値」「小数点なし及びカンマなし数値」「小数点あり及びカンマあり数値」を
    削除した。・・・チェックロジックを作ってなかった。これからつくるのも面倒なので。
    ハハハハハ、php8にするのに労力を使いはたしたって感じ。