いつもはエラーが出ても、メモもしないで、検索してつつき回して解決しちゃっていますが。
今回は忘れずメモできたので、まとめてみます。
初歩的すぎる内容かもしれませんが・・・
もとのコード
登場するファイルは、次の4つです。
oyayubi-typing/expand/monthly03.php・・・メインのHTMLファイル
oyayubi-typing/ads/ad_month03.php・・・メインファイルに広告を置くためのPHPファイル
oyayubi-typing/ads/gads_728x90.html・・・貼り付ける広告
oyayubi-typing/menu-and-footer.php・・・フッターとサイドメニューのHTMLファイル
ちなみにサイトはこれです → 親指タイピング|無料の親指シフト入力練習サイト
コードは以下。さて、何が問題でしょう。
/* monthly03.phpのbody内 */
<div id="waku">
<div id="main" class="green">
<!-- 中略(メイン部分) -->
<?php include('../ads/ad_month03.php'); ?>
</div><!-- /main -->
<?php include('../menu-and-footer.php'); ?>
<!-- 中略(パンくずナビ) -->
</div><!-- /waku -->
/* ad_month03.php */
<?php
readfile 'gads_728x90.html';
?>
最初の表示
広告を読み込む部分でエラーが出ています。
また、この部分より後に書いてある、フッターとサイドメニューを読み込むPHPは、読み込まれていません。
エラー内容
こんなの。パスの前半は伏せてます。
Parse error: syntax error, unexpected “gads_728x90.html” (T_CONSTANT_ENCAPSED_STRING) in /パス/oyayubi-typing/ads/ad_month03.php on line 2
とりあえず、検索の助けも借りながら読みます。
Parse errorというのは、PHPの解析がうまくいかなかった、というエラーだそうです。プログラムの実行以前に、問題が起きてしまったようです。
内容としては、構文エラー(syntax error)であると。
具体的には、予期しない(unexpected)、”gads_728x90.html”っていう文字列(STRING)が、ad_month03.phpの2行目にありますよ、と。
そう主張していらっしゃるようなんですが、何がおかしいねん。
よくみたら、readfileにカッコ()が抜けていました。
なぜ書かなかった、自分。
コード修正
カッコを足しました。
/* ad_month03.php(旧) */
<?php
readfile 'gads_728x90.html';
?>
/* ad_month03.php(新) */
<?php
readfile ('gads_728x90.html');
?>
修正後の表示
PHPの解析が最後までできたようで、フッターとサイドメニューが表示されました。
しかし、まだエラーが出ています。
エラー内容2
今度は警告(Warning)だそうです。
Warning: readfile(gads_728x90.html): failed to open stream: No such file or directory in /パス/oyayubi-typing/ads/ad_month03.php on line 2
警告つまり、文法的には読めるけど、何か間違ってんじゃないの、と。
具体的には、readfileでファイルを開くのに失敗した(failed to open stream)、なぜならそんなファイルはない(No such file)と言ってます。
ちゃんとあるじゃん、adsフォルダに一緒に入ってるよ。
と思い、ファイル名の書き間違いを疑ったのですが、違うようです。
もしかすると、パスの書き方が違うのかもしれません。
ad_month03.phpから見たパスではなく、monthly03.phpから見たパスにしないといけないのでは。
コード修正2
パスを直しました。
/* ad_month03.php(新) */
<?php
readfile ('gads_728x90.html');
?>
/* ad_month03.php(再修正) */
<?php
readfile ('../ads/gads_728x90.html');
?>
再修正後の表示
まとめ
エラーはこうやって地道に直してます。なけなしの検索力と英単語力でぶん回してるうちに、知識や経験が蓄積されていく感じです。
プログラムは、脱力するほど単純な入力ミスで、エラーになります。
カッコの種類や付け忘れ・閉じ忘れ、文末のセミコロン忘れなんかには気をつけます。
これは今までも身に染みていること。
あとは、ファイルAの中で、includeを使ってファイルBを呼び出し、Bの中でさらにファイルCを呼び出す場合。
BやC内に書くファイルのパスは、大元のAを基準にします。(相対パスの場合)
これは、HTMLのパーツを貼り付ける場合も、PHPファイルを読み込む場合も、同じらしいと今回学びました。
ところで、文中では修正前後のファイルについて、「新」やら「再修正」と書きましたが、これは悪い例です。
これだと後で、どれがどれだか分からなくなっちゃうので。
実際には、日付+通し番号など、どれが新しいのか分かるような名前を付けましょう。
そんなところです。
参考
「Parse error: syntax error」とは? | PHPプログラミングの教科書 [php1st.com]
PHPのエラー・警告・注意の違いとは | PHPプログラミングの教科書 [php1st.com]
関連記事
コメント