Smartyの Syntax Errorの原因はスペースかも
2014/06/26
Smartyのなかなか見つからない Syntax Errorの原因
半角スペースを入れていることでエラーに
Smartyを使っていて、ときどき意味が分からない Syntax Errorに出会うことがあります。
文法は間違っていないはずなのに....どんなに悩んでもエラーが消えない。
そんなあなた!
余計な半角スペースを入れていませんか?
プログラムの記述の仕方は人それぞれ違いますが、PHPのプログラムを書く方の場合は、PHPがスペースもタブも改行も単なるスペースとして処理されるため、スペースを入れて見やすく調整をする方は多いものです。
ですが、そのスペースが Smartyでは Syntax Errorの原因になってしまうために厄介なのです。
Smartyは PHPのテンプレートエンジンにもかかわらず、PHPで使い慣れたいくつかの法則が使えないのです。
その代表的なものがスペースで、下記のような IF文を書くとしましょう。
下記のような記述は問題ないのですが、
—————
{if $aaaa == "yes"}ああああ{/if}
—————
下記の 2行目の様に上下の文字の位置を合わせるために、「”no”」の後ろにスペースを入れたとします。そうすると、このスペースが Syntax Errorの原因になってしまうのです。
—————
{if $aaaa == "yes"}ああああ{/if}
{if $aaaa == "no" }いいいい{/if}
—————
同じように、単純に変数を表示させる際、下記のように変数名の前後にスペースを入れては行けません。下記は正しく表示されます。
{$aaaa}
ですが、下記の様に「$aaaa」の変数の前後にスペースを入れた場合、これでは表示されなくなってしまうのです。
{ $aaaa }
{ $aaaa}
上記の様に前にスペースを入れた場合は、変数として処理されず、「{ $aaaa}」がそのまま表示されます。
{$aaaa }
上記の様に後ろにスペースを入れた場合は、Syntax Errorになります。
私がそうなのですが、半角スペースを入れてソースコードの見やすさを調整している方はご注意ください。
header(“Location: $url”);を使う際もスペースの取り扱いに注意が必要
2014.04.02追記
同じように PHPでの開発においてスペースの取り扱いに注意が必要なものとして、header(“Location: $url”);があります。
こちらについて「PHP画面が真っ白 header(“Location: $url”);」に記事を書きましたので、併せてご覧ください。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
サーバ移転、PHPバージョンアップでPHPのソースコードが表示される・ショートタグのPHPが動かない
PHPでショートタグを使うのは危険。サーバ移転やバージョンアップで動かなくなる!ソースが丸見え、設定情報流出のリスクが!php.iniのshort_open_tagの設定を再確認。
-
-
カオナビAPI Ver.2.0のtokenを取得する PHP+cURLのサンプルプログラム
PHPのcURLを使用してカオナビAPIのアクセスに必要なtoken、シートの情報を取得するサンプルプログラムを作成。cURLの処理は関数化しているため他のAPIでも流用できる。
-
-
ECCUBE2.13.3で商品規格の在庫数が無制限から変更できないバグがある
2.13.3固有のバグである商品規格の在庫数の入力エリアがアクティブにならない不具合を解消する解説です。product_class.tplの2行を修正するだけの簡単対応です。
-
-
PHP画面が真っ白 header(“Location: $url”);
PHPの開発で header(“Location: $url”);を使うと画面が真っ白になる不具合が出る場合もあります。
-
-
フォルダを指定してファイルのパーミッションを変更するプログラム
フォームからフォルダ、パーミッションを指定しパーミッションを変更するサンプルプログラムの解説です。
-
-
PHPのデバッグで使う print_r、var_dump、var_exportの動作の違い
PHPのデバッグ等で変数や配列の中身を確認するために使用する関数print_r、var_dump、var_exportの動作の違い、仕様の違いについて確認した。var_exportがオススメ。
-
-
PHPで配列の値をダブルクオーテーションで囲んでimplodeでカンマ区切りにする方法
PHPで配列の値を、preg_replace関数でクォーテーションで囲み、implode関数で「,(カンマ)」で区切ってテキスト化する方法。この方法であれば配列が空でも分岐の処理は必要なし!
-
-
PHPで APIにアクセスする際などに使用する cURLのサンプルプログラム
PHPのcURLを使用して各種APIにアクセスするサンプルプログラムを作成し、その処理を解説。カオナビAPIのみならず、他の多くのAPIにアクセスする際にも使用できる。
-
-
ECCUBEの注文完了画面注文番号と商品情報を編集するCRITEO(クリテオ)タグを編集
ECCUBEの注文完了画面にクリテオのタグを編集する方法を紹介。標準機能では完了画面に注文IDや購入商品の情報を渡さないため改修が必要です。
-
-
CentOS6、7のPHPを5.3から5.6、7.0、7.1にバージョンアップする手順の解説
CentOS6系、7系のPHPバージョンを5.3から5.6、7.0、7.1にアップする作業手順と解説。yum updateコマンドを使い作業時間は約10分。コマンドの解説や引数の意味なども解説しているので役に立つはず。
Comment
参考になりました!ありがとうございます!