質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

540閲覧

phpバージョン切り替えによる表示不具合

enjoyannna

総合スコア4

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2024/04/03 01:53

編集2024/04/03 01:56

実現したいこと

ページの表示不具合を解消したい

発生している問題・分からないこと

phpを推奨バージョンである8.1.22に切り替えたところ、ページの上部に不要なメッセージが表示されてしまいました。
メッセージ自体が何を示しているのかはわかるのですが、修正方法が一切わかりません。

中身はコインランドリーの稼働状況がリアルタイムで確認出来る動的ページです。
上部の不要なメッセージ表示があるだけでページとしては問題なく閲覧・動作出来ています。

まず自身の知識として、htmlやcssであればある程度わかるのですがphpは習得前になります。
また、そもそもソースコードは提供されたものであり、提供元も「おそらくかなり昔のコードでいつの担当者が作成したものかわからないし中身がわかる者は現在いない」という特殊な状況でした。
その際も表示不具合はありましたがなんとか使用出来るように手探りで無理やり直しています。
そのため本来不要なコードが残っているかもしれませんが判別すらも出来ません。

以上、無知で大変申し訳ありませんがよろしくお願い致します。

エラーメッセージ

error

1Warning: Undefined variable $isMobile in /*URL*/ファイル名.php on line 66 2 3Warning: Undefined variable $isMobile in /*URL*/ファイル名.php on line 75 4 5Warning: Undefined variable $isMobile in /*URL*/ファイル名.php on line 95

該当のソースコード

php

1ファイル名や社名などの部分は*で囲んだ代替テキストで記載していますがほぼそのままです。 2 3<?php 4// ↓この行はユーザーごとに変更が必要です。 5 $Kadou_Filename ="*ファイル.dat*"; 6// ↑この行はユーザーごとに変更が必要です。 7?> 8<? 9// ↓以下の行は変更しないでください。 10function CsvData_Load_ALL( $Filename ){ 11 if( file_exists($Filename) == 1 && $Filename != ""){ 12 $fp = fopen( $Filename, "r" ); 13 if( $fp != NULL ){ 14 $cntLine = 0; 15 while( 1 ){ 16 $read_buff = fgets( $fp, 4096 ); 17 if( $read_buff == NULL ){ 18 break; 19 } 20 $read_buff = str_replace( "\n", "", $read_buff ); 21 $read_buff = str_replace( "\r", "", $read_buff ); 22 23// 20200129-CHG-[S] 24// $csv_array[$cntLine] = $read_buff; 25// 26 // 文字コード変換(SJIS -> UTF-8) 27 $csv_array[$cntLine] = mb_convert_encoding( $read_buff, "UTF-8", "SJIS" ); 28// 20200129-CHG-[E] 29 $cntLine++; 30 } 31 // 読み込んだCSVファイルを各カラムに分解 32 for( $iline= 0 ; $iline < sizeof($csv_array) ; $iline++ ){ 33 $csv_column_array = explode( ",", $csv_array[$iline]); 34 for ( $cntCsv = 0 ; $cntCsv < sizeof($csv_column_array) ; $cntCsv++ ){ 35 $csv_data[$iline][$cntCsv] = $csv_column_array[$cntCsv]; 36 } 37 } 38 fclose( $fp ); 39 } 40 } 41 return $csv_data; 42} 43 /*アクセス端末チェック*/ 44 $agent = ""; 45 $isMobile; 46 47?> 48<? 49 // CSVファイルを読みます。 50 $kado_status = CsvData_Load_ALL( $Kadou_Filename ); 51 /************************************/ 52 /*$kado_status[0][0] 送信日時 "201011101416" */ 53 /*$kado_status[1][0] 空白行 */ 54 /*$kado_status[2][0] 送信間隔 "定期送信 5分間隔" */ 55 /*$kado_status[3][0] 空白行 */ 56 /*$kado_status[4][0] 店舗名称 "コインランドリー伊豆の国店" */ 57 /*$kado_status[5][0] 空白行 */ 58 /************************************* ここまではヘッダーです。 */ 59 60 /************************************* ここからがテーブルの中身です。 */ 61 /*$kado_status[$i][0] 機械番号 "99" */ 62 /*$kado_status[$i][1] 号機名称 "1号機" */ 63 /*$kado_status[$i][2] 機種名 "洗濯乾燥機 SF-222C" */ 64 /*$kado_status[$i][3] 稼働状況日本語 "運転" */ 65 /*$kado_status[$i][4] 稼働状況コード "01" */ 66 /*$kado_status[$i][5] 残り時間 "99" */ 67 /************************************/ 68 if($isMobile == false) { 69 $send_time = "<span>&nbsp;".substr($kado_status[0][0],0,4)."/".substr($kado_status[0][0],4,2)."/".substr($kado_status[0][0],6,2)."&nbsp;".substr($kado_status[0][0],8,2).":".substr($kado_status[0][0],10,2)."&nbsp;</span>現在"; 70 } else { 71 $send_time = "&nbsp;".substr($kado_status[0][0],0,4)."/".substr($kado_status[0][0],4,2)."/".substr($kado_status[0][0],6,2)."&nbsp;".substr($kado_status[0][0],8,2).":".substr($kado_status[0][0],10,2)."&nbsp;現在"; 72 } 73?> 74<HTML> 75<HEAD> 76 <META HTTP-EQUIV="Content-Type" CONTENT="text/css; charset=Shift_JIS"> 77<? if($isMobile == false) { 78/*↓ここからはHEADER部のPC用テキストです。*/ ?> 79 <meta name="description" content="*メッセージ*" /> 80 <meta name="keywords" content="*キーワード*" /> 81 <meta name="copyright" content="*コピーライト*" /> 82 <title><?php echo $kado_status[4][0];?>空き情報</title> 83<?php 84 // 表の中のスタイルを定義しています。 85 include("*シート名.css*"); 86?> 87<? /*↑ここまではHEADER部のPC用テキストです。*/ 88 } else { 89/*↓ここからはHEADER部の携帯用テキストです。*/ ?> 90 <meta http-equiv="content-language" content="ja" /> 91 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 92 <title><?php echo $kado_status[4][0];?>空き情報</title> 93<? /*↑ここまではHEADER部の携帯用テキストです。*/ 94 } ?> 95</HEAD> 96<BODY> 97<? if($isMobile == false) { 98/*↓ここからはBODY部のPC用テキストです。*/ ?> 99<div id="container"> 100<div id="head" STYLE=" width: 430px;"> 101 <img class="logo" src="LOGO.gif" alt="" /><span class="logotext">コインランドリー空き情報</span> 102</div> 103<div id="title" STYLE=" width: 430px;"> 104 <?php echo $kado_status[4][0];?><br><?php echo $send_time;?> 105</div> 106<br> 107<DIV id="table" STYLE=" width: 430px;"> 108 <TABLE CLASS="List" width=100% cellspacing="0" cellpadding="0" > 109 <TR CLASS="List" width=100%> 110 <TH CLASS="List" width=90px > 111 機械番号 112 </TH> 113 <TH CLASS="List" width=90px > 114 稼動状况 115 </TH> 116 <TH CLASS="List" width=90px > 117 残り<BR> 118 運転時間 119 </TH> 120 <TH CLASS="List" width=160px > 121 機種名 122 </TH> 123 </TR> 124 125<? 126// ここからループです。 127// 読み込んだデータファイルの6行以降をテーブルに表示します。 128 $size_Kado = sizeof( $kado_status ) ; 129 $i = 6; 130 while( $i < $size_Kado){ 131 if((int)$kado_status[(int)$i][0] +0 == 0) break; 132?> 133 <TR CLASS="List"> 134 <TD CLASS="List" STYLE="text-align: left; padding: 0px 0px 0px 6px;"> 135 <?php 136 if( $kado_status[$i][0] < 10 ){ 137 echo "&nbsp;"; 138 } 139 echo $kado_status[$i][0]."号機"; 140 ?> 141 </TD> 142 <TD CLASS= 143 <?php 144 switch ($kado_status[$i][4]) { // 稼働状況コード 01-0x 145 case 0: 146 echo "List_Stop"; 147 break; 148 case 1: 149 echo "List_Run"; 150 break; 151 case 2: 152 echo "List_Err"; 153 break; 154 case 3: 155 echo "List_Stop"; 156 break; 157 case 4: 158 echo "List_Stop"; 159 break; 160 case 5: 161 echo "List_Check"; 162 break; 163 case 9: 164 echo "List_Err"; 165 break; 166 default: 167 echo "List_Run"; 168 } 169 ?> 170 > 171 <?php 172 if($kado_status[$i][4] == 3) 173 echo "--"; 174 else 175 echo $kado_status[$i][3]; // 稼働状況日本語 176 ?> 177 </TD> 178 <TD CLASS="List" STYLE="text-align: right; padding: 0px 6px 0px 6px;"> 179 <?php 180 // 残り運転時間 181 echo ( ($kado_status[$i][5]== 0 and $kado_status[$i][4] == 3) ? "-- 分" : $kado_status[$i][5]." 分" ); 182 ?> 183 </TD> 184 <TD CLASS="List" STYLE="text-align: left; padding: 0px 0px 0px 6px;"> 185 <?php 186 echo $kado_status[$i][2]; // 機種名称 187 ?> 188 </TD> 189 </TR> 190 <?php 191 $i++; 192 } // ループ終了。 193 ?> 194 </TABLE> 195</DIV> 196<br> 197<div class="coi_copyright"> 198 <p id="copyright"><img src="copyright.gif" alt="Copyright" /></p> 199</div> 200</div> 201<? /*↑ここまではBODY部のPC用テキストです。*/ 202 } else { 203/*↓ここからはBODY部の携帯用テキストです。*/ ?> 204 <div align="center"> 205 <img class="logo" src="LOGO.gif" alt="" />空き情報 206 </div> 207 <div align="center"> 208 <?php echo $kado_status[4][0];?><br> 209 <font color="red">&nbsp;<?php echo $send_time;?>&nbsp;</font> 210 </div> 211 <hr> 212 <div> 213 <dl> 214<? // ここからループです。 215 $size_Kado = sizeof( $kado_status ) ; 216 $i = 6; 217 while( $i < $size_Kado){ 218 if($kado_status[$i][0] +0 == 0) break; 219 220 $disp = true; 221 $time = $kado_status[$i][5]."分"; 222 switch ($kado_status[$i][4]) { // 稼働状況コード 01-0x 223 case 0: 224 $font_color = ""; 225 $time = "00分"; 226 break; 227 case 1: 228 $font_color = "blue"; 229 break; 230 case 2: 231 $font_color = "red"; 232 $time = "--分"; 233 break; 234 case 3: 235 case 7: 236 $disp = false; 237 $font_color = ""; 238 $time = ""; 239 break; 240 default: 241 $font_color = "green"; 242 $time = "--分"; 243 break; 244 } 245 if($disp) { 246 echo "<dt>".$kado_status[$i][1]."</dt>"; 247 echo "<dd><font color =\"".$font_color."\">"; 248 echo $kado_status[$i][3]."</font>&nbsp;"; 249 echo $time."&nbsp;".$kado_status[$i][2]; 250 echo "</dd>\r"; 251 } 252 $i++; 253 } 254 // ここまでループです。?> 255 </dl> 256 </div> 257 <hr> 258 <div align="center"> 259 copyright&copy;2005-2020<br>*コピーライト* 260 </div> 261<? /*↑ここまではBODY部の携帯用テキストです。*/ 262 } ?> 263</BODY> 264</HTML> 265

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

同様の事例、解決策は見つけられませんでした。

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

$isMobile;

この状態では変数の型が確定していません。
PHP8ではこのような変数に対する参照・アクセスのエラーレベルが変わったようです。
https://qiita.com/rana_kualu/items/4815d52f9885917af1a8
※確定前の記事ですが、経緯なども参考になります。

PHPマニュアルのtopicsは以下。
下位互換性のない変更点]: https://www.php.net/manual/ja/migration80.incompatible.php

多くの notice が警告に変換されるようになりました:

  • 未定義の変数を読み取ろうとした場合

参照する形態にあわせ、初期値を入れてあげましょう。
( error_reporting()での表示制御はあくまで開発・学習段階にとどめるべきと思います )

投稿2024/04/03 02:06

編集2024/04/03 02:13
m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2024/04/03 02:18

蛇足なのでコメントに。 「不具合」ではなく、元々緩かった言語仕様の実装で表面化していなかった問題がより厳格な実装を求められる言語側の仕様変更があったことで顕在化しただけとなります。 PHP7以降、ようやく型についての整備や実装強化が進んできてるので倣いましょうということですね(おおよそ他の言語では考えられない実装が許容、もしくは緩く設定されていた)
enjoyannna

2024/04/03 02:48

なるほど、今までは本来エラーであるべきものもエラーとしてなぜか出てきていなかったのですね。 phpはこれから勉強していくため逆に整備されてきている方が覚えやすいかもしれません。 上記参考URLも今後の資料として非常に助かりました。補足含め改めて色々ご教示ありがとうございます!
m.ts10806

2024/04/03 04:46

> 今までは本来エラーであるべきものもエラーとしてなぜか出てきていなかったのですね。 いえ。PHP7までとPHP8以降では多くの項目でエラーレベルの扱いが変わったために出てきたものとなります。シートベルト着用が「努力義務」から「義務」に変わったようなイメージ。 ルールなどで「非推奨」から「禁止」に変わったようなイメージ。 これまで「気をつけようね」だったのが「明確にNoだ」という仕様になったわけですね。
enjoyannna

2024/04/03 08:15

わかりやすい例えでようやく理解致しました!重ねてありがとうございます!
m.ts10806

2024/04/03 08:22

あくまでイメージなので、今回に関してはエラーレベルが「NOTICE」から「WARNING」に変わったと正確に理解してもらえると良いかと思います。 エラーレベルの説明についてはこの辺ですね。 https://www.php.net/manual/ja/errorfunc.constants.php
guest

0

ベストアンサー

命題の45行目、多分ソース上は43行目?

PHP

1$isMobile; 2↓↓↓ 3$isMobile=false;

なんでしょうけど、モバイルかどうかのチェックは別途どこかでやるはずですし、デバッグ用の変数が残っていてそれを利用して分岐をしているなら、設計をみなおさないといけないかもしれません

追記

ちなみにただ単にWarningを表示させたくないだけであればphp.iniで

error_reporting=E_ALL & ~E_DEPRECATED & ~E_STRICT ↓↓↓ error_reporting=E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_WARNING

のような変更をするか、ソース内の先頭の方で

PHP

1error_reporting(E_ALL & !E_WARNING);

など宣言すればいけると思いますが、エラーを無理やりなかったことにするのはバグの温床になるのでおすすめできません

投稿2024/04/03 02:03

編集2024/04/03 02:12
yambejp

総合スコア114845

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

enjoyannna

2024/04/03 02:40

上記内容でコードを修正したら表示バグは解消されました! お早い回答非常に助かりました、ありがとうございます! (設計の見直しに関してはかなり大掛かりになると思われますので、諸々こちらで確認し必要の際は改めて質問を立て直そうと思います)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問