携帯サイト制作でPHPを使う場合のXML宣言のエラー対処

携帯用サイト製作時にPHPを使うと、「Parse error: syntax error, unexpected T_STRING in ...」というエラーが出るか、画面に何も表示されない場合は、


<?xml version="1.0" encoding="Shift_JIS"?>


などのxml宣言の「 <? 」が、PHPの「 <?php 」の省略タグと解釈されて、そうなる場合がある。
PHPタグを使っていないXHTMLファイルの拡張子を「 .php 」に変えただけでも、同じ症状が出る場合は、ほぼ確実にこれ。


対処方法は次の通り。


A) サーバの「 php.ini 」の「 short_open_tag 」を「 Off 」にする。
※専用サーバではなくレンタルなどの共有サーバでは出来ない場合あり。


B) サーバでPHPファイルを使っているディレクトリに「php_flag short_open_tag Off」を記述した「 .htaccess 」を設置する。
※レンタルサーバなどでは、「 .htaccess 」が設置できないサーバもあり。


C) PHPファイルのxml宣言部分をPHPの「 echo 」や「 print 」で出力する。


D) PHPを利用しない。


E) xml宣言を外してPHPを利用する。


※A)かB)を行った場合は、「 <? 」がPHPの省略タグとして利用できなくなるので注意が必要。



詳しくは次の通り。


A)は、サーバ管理者にお願いしてください。


B)は、「 .htaccess 」が設置できるサーバであれば、次の内容を記述してPHPを使っているディレクトリにFTPでUPすればOK。


<IfModule mod_php4.c>
php_value mbstring.internal_encoding SJIS
php_flag short_open_tag Off
</IfModule>


※1) 「IfModule」はなくても動くっぽい。PHPがバージョン5の場合は「mod_php5.c」とする。
※2) 「php_value mbstring.internal_encoding SJIS」はなくてもOK。携帯用の文字コードが現在ほぼ「 Sift_JIS 」のため、一応入れておくと無難なため入れてある。もちろん、PHPファイルで別の文字コードを指定していれば、ここでもそれを指定する必要がある。


C) PHPファイルのxml 宣言部分をPHPの「 echo 」や「 print 」で出力する。
xml宣言部分を次のように記述する。


<?xml version="1.0" encoding="Shift_JIS"?>



<?php echo "<?xml version=\"1.0\" encoding=\"Shift_JIS\"?>\n"; ?>


D) PHPを利用しないで、XHTMLのみで制作する。


E) xml宣言を外してPHPを利用する。
いくつか見た感じでは最近の機種であれば、表示上や動作でおかしいところはなかったけど、出来るだけやらない方がいい。



■参考サイト


Q43. スキンを xhtml ファイルで自作したら、エラーが表示される or 何も表示されないのですが?
http://popilol.lolipop.jp/NiconicoPHP/faq/body.php?no=42


xhtml と php
http://www.tagindex.com/kakolog/q2bbs/601/810.html


xmlの宣言について
http://lolipoking.lolipop.jp/php/patio.cgi?mode=view&no=2690


「.htaccess」ファイルでの設定
http://www.shigeweb.jp/php/project_p/?section=setup&page=htaccess

人気blogランキング ブログランキング・にほんブログ村へ Blog Entry ランキングへ投票 ブログ王 ブログランキング くつろぐ
最近流行のブログのように、簡単にオンラインショップが構築できちゃう、
Color Me Shop! pro】は、オンラインショップ構築の容易さだけではなく、
商品管理や決済も簡単にできちゃう初心者でも安心の機能を標準装備!
無料提供のショップブログとも連携できて月額875円〜。この機会に是非!

トラックバック

このエントリーのトラックバックURL:

このエントリーへのトラックバック:

» PHPでのXML宣言エラー対処方 送信元 lotus position
携帯サイト制作(XHTML)でPHPを使用した場合、「Parse error:... [詳しくはこちら]

コメントする