「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にするのに労力を使いはたしたって感じ。