アシアル株式会社主催 開発者向け、一歩先をいくためのテクニカルセミナー

<< Excelファイルがオープンできない 質問一覧 フォームでの文字列チェックに関して... >>

  • 0P
Smarty講座の第1回の$smarty.nowで

PHP初心者で、当HPの講座を参考にしていますが、Smarty講座の第1回でいきなりつまずいてしまいました。
 
講座内容の通りに実行しているつもりですが、hello.phpを実行すると、
結果が以下のように表示されます。
  1. こんにちは、あなたの名前さん!! 今日は
  2. Warning: date_format() expects parameter 1 to be DateTime, integer given in
  3. C:\Apache2\smarty\templates_c\%%6D^6D7^6D7C5625%%test.tpl.php on line 7
  4. です。

template.tplの内容
  1. こんにちは、{$name}さん!!
  2. 今日は{$smarty.now|date_format:'%Y年%m月%d日'}です。

コンパイルしてできた%%6D^6D7^6D7C5625%%test.tpl.phpの内容は以下となっています。
  1. <?php /* Smarty version 2.6.19, created on 2008-06-04 17:36:42
  2.          compiled from test.tpl */ ?>
  3. <?php require_once(SMARTY_CORE_DIR . 'core.load_plugins.php');
  4. smarty_core_load_plugins(array('plugins' => array(array('modifier''date_format''test.tpl'2false),))$this)?>
  5. こんにちは、<?php echo $this->_tpl_vars['name']?>
  6. さん!!
  7. 今日は<?php echo ((is_array($_tmp=time())) ? $this->_run_mod_handler('date_format'true$_tmp'%Y年%m月%d日') : date_format($_tmp'%Y年%m月%d日'))?>
  8. です。

エラーレベルが厳しすぎるのかと思い、php.iniのerror_reportingの設定を 
E_ALLからE_STRICTに変更してみましたが、以下のように年月日が表示されません。
  1. こんにちは、あなたの名前さん!! 今日はです。

なお、PHP Version 5.2.3、Smarty Version 2.6.19を使用しています。

初歩的な質問で申し訳ありませんが、ご教授いただきたくよろしくお願いいたします。

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。

QSmarty講座の第1回の$smarty.nowで kinpira  [06月05日 17時09分] 
┗Re:Smarty講座の第1回の$smarty.nowで mgngmgng  [06月06日 16時16分] 
  ┗Re:Re:Smarty講座の第1回の$smarty.nowで kinpira  [06月09日 16時08分] 
    ┗参考になったRe:Re:Re:Smarty講座の第1回の$smarty.nowで mgngmgng  [06月10日 10時15分] 
      ┗Re:Re:Re:Re:Smarty講座の第1回の$smarty.nowで kinpira  [06月10日 14時40分] 

コメント一覧

並び替え( ツリー順 / 投稿順[降順] / 投稿順[昇順]

Re:Smarty講座の第1回の$smarty.nowで

SJISでファイル作成してるとparseエラー発生したような..気がします。
EUCかUTF-8で作成するとどうなりますか。

Re:Re:Smarty講座の第1回の$smarty.nowで

mgngmgng様、お返事ありがとうございます。

phpファイルとtplファイルをEUC及びUTF-8でそれぞれ保存しなおして
実行してみましたが、結果は同じでした。

ちなみにphp.iniは以下のように設定しなおしました。
default_charset EUC-JP 
mbstring.http_input auto 
mbstring.http_output EUC-JP  
mbstring.internal_encoding EUC-JP  
mbstring.language Japanese 

OSはWindowsXP SP2で、ORACLEをインストール済です。
ORACLEの影響もあるのでしょうか?

Re:Re:Re:Smarty講座の第1回の$smarty.nowで

mgngmgngです。

date_formatは文字化けするみたいです。
http://code.xenophy.com/?p=184
http://yossy.iimp.jp/wp/?p=54

smartyのマニュアルを見ると、
date_format は strftime のラッパーなので
strftimeの挙動を追ってみると何かわかるかもしれません。
http://www.smarty.net/manual/ja/language.modifier.date.format.php

strftimeは環境によって実装が異なるため
OSによっては使用できない変換指定子も存在するようです。
http://jp2.php.net/strftime

このあたりも参考になるかもしれません(ちょっと古いですが)
http://ml.php.gr.jp/pipermail/php-users/2003-September/018341.html


# 調べもせず適当なことかいてすみません

Re:Re:Re:Re:Smarty講座の第1回の$smarty.nowで

mgngmgng様、お返事ありがとうございました。

strftimeの動きを確認しようとしたところで、実はPHPのdate_format()が
動いていることに気づきました。

コンパイルして生成されたPHPが本来は
  1. 今日は<?php echo ((is_array($_tmp=time())) ? $this->_run_mod_handler('date_format'true$_tmp'%Y年%m月%d日') : smarty_modifier_date_format($_tmp'%Y年%m月%d日'))?>
  2. です。
となるべきところが、
  1. 今日は<?php echo ((is_array($_tmp=time())) ? $this->_run_mod_handler('date_format'true$_tmp'%Y年%m月%d日') : date_format($_tmp'%Y年%m月%d日'))?>です。
となっていて、Smartyのdate_format修飾子が動作していません。

いろいろ試したところ、Smarty.class.phpを相対パスでrequireするとPHPのdate_fomart()に
なってしまい、絶対パスでrequireするとSmartyの修飾子になるようです。
※SmartyはC:\PHP\includes\smarty配下に格納
 PHP.iniはinclude_path = ".;c:\php\includes;"と指定

テンプレートの読み込み等はうまくいっていたので気づきませんでした。
いろいろアドバイスいただいたおかげで解決できました。
ありがとうございました。
Excelファイルがオープンできない 質問一覧 フォームでの文字列チェックに関して...