[PHP]エラー例
トップページへ
個人的メモです
Q. Parse error: Invalid numeric literal in ***(無効な数値リテラル)
A. 数字なのに先頭にゼロがあったため。文字列として代入することでエラーを回避
エラー
$w_no = 088;
正常
$w_no = ‘088’;
Q. HTML内でPHP(楽天市場で探す ・ amazonで探す)の変数を表示したいのに思い通りにならない
A.
・変数例:$w_link
・間違えやすい例
echoを忘れる
<a href=”<?php $w_link; ?>”>ページへ</a>
セミコロン(;)を忘れる(エラーにはなりませんが)
<a href=”<?php echo $w_link ?>”>ページへ</a>
・正式には
<a href=”<?php echo $w_link; ?>”>ページへ</a>
Q. Warning: count(): Parameter must be an array or an object that implements Countable in と表示された
A.原因 count($w_key_ar) しているのにも関わらず、
$w_key_ar = $value[2];
と通常の代入をしてしまった。
配列に代入するように
$w_key_ar[] = $value[2];
と修正したら直りました。
Q.契約しているレンタルサーバーのエラーログに mod_mime_magic: can’t read エラーが多数記録される。
A.
その1
対象PHPのパーミッションを600→604に変えたら消えました。
その2
あくまでもエックスサーバーの場合ですが、WAF(Webアプリケーションファイアーウォール)の設定を「強化」していたために、記録されていました。
PHPなど自作のプログラムを使用しない場合は関係ありませんが、使用する場合はエラーになることがあるようです。
解決策としてWAFの設定を変え、少し「セキュリティを甘く」したら記録されなくなりました。
Q. file_put_contentsで HTTP wrapper does not support writeable connections と表示された
A. httpから始まるパスを指定した場合のエラー。それ以外のパス指定を使用
Q. file_put_contentsで failed to open stream: Permission denied
A. 見てわかる通り、パーミッションエラー
Q. CSVファイルの読み込みで
Undefined offset: 1 inと表示された(その3)
A.CSVファイル内の項目を””や”で囲んでいない場合
[0] => Array ( [0] => 飲食店,20 [1] => )
[1] => Array ( [0] => 病院 [1] => 7 )
分割できなかったり、できたりするためで
分割できない時は[1]の値がないので
Undefined offset: 1 in となる
そこで”で囲めば
[0] => Array ( [0] => ‘飲食店’ [1] => 20 )
[1] => Array ( [0] => ‘病院’ [1] => 7 )
と分割ができる。
そして”が不要ならば転送前にtrimを使用すれば、
$koumoku = trim($data2[0], "'");
[0] => Array ( [0] => 飲食店 [1] => 20 )
[1] => Array ( [0] => 病院 [1] => 7 )
と”の除去が可能となる。
CSVファイルの読み込みでUndefined offset:が出る場合は、CSVファイル内の文字列を”で囲み、print_rやprintで中身を表示するのが解決法の1つ。
また、CSVファイルのデータ構造を変えて
A,100
B,50
・・・
という複数レコードを
A,100,B,50・・・
と単一レコードに変えて
list($kou_a, $kou_aa, $kou_b, $kou_bb・・・) = $value;
とlist関数を使うという方法もある。
Q. Undefined offset と表示された(その2)
Notice: Undefined offset: 1 in TEST.php on line 43
A. 読み込んだCSVファイル内に
1件目 ABC
2件目 ABC,DEF
と、項目数(レコード長)が異なるデータがあった時に発生。CSVファイルの出力処理の修正で対応しました。
Q. CSVファイルの読み込みで
Undefined offsetと表示された(その1)
Notice: Undefined offset: 1 in a1.php on line 40
Notice: Undefined offset: 2 in a1.php on line 40
Notice: Undefined offset: 3 in a1.php on line 40
…
A. 最終行に「改行のみ」の空白行があると、上記になりました。その場合、元データであるCSVファイル内の空白行を消して解決しました。
取り除く処理として
・ループ処理で改行文字を入れるタイミングをずらす
・ファイル末端(EOF)の改行文字を取り除く
などが考えられます。
Q. Undefined variable と表示された
Notice: Undefined variable: sv_kitai in a1s.php on line 43
A. 変数 sv_work を使用しているが中身が何かわからない、不安定な状態ですよ、という忠告・警告。
$sv_work = “”;
など空文字やゼロを代入し初期化すれば回避できます。
Q. 過去のPHPソースを実行したら
Fatal error: Uncaught Error: Cannot use string offset as an array
と表示された
A. 日本語訳は
「致命的なエラー:キャッチされないエラー:文字列オフセットを配列として使用できません」
例えば配列Dataの初期化
$this->Data = “”;
↓
$this->Data = array();
現在のPHPバージョンでは、配列の初期化は array() でしないといけないからだそうです。
エラーも直った理由も不明(2021/4/21)
37 foreach ($file as $value) {
38 list($clus_day, $jichi_cd) = $value;
Notice: Undefined offset: 6 in XXXXXXXXXXXXXX on line 38
38行目でエラーがあると表示されたものの、原因がわからない
そこで試しに「38行目で改行」してみたところ
37 foreach ($file as $value) {
38
39 list($clus_day, $jichi_cd) = $value;
エラーが直ったという、意味不明な現象がありました。
Q.imagettftextが動作しない
A.「環境によるかもしれませんが」
フォントファイルは「絶対パス」で指定しないといけない模様。
使用例
$text = ‘Testing…’;
$font = dirname(__FILE__) .’/ipaexg.ttf’;
imagettftext($im, 20, 0, 10, 20, $black, $font, $text);
→PHPメニューへ戻る