SmartyのUndefined Index

このQ&Aのポイント
  • PHPで書かれたプログラムの内容については、開発に携わっていなかったので詳しいことは分からないのですが、ソースコードを見ると、確かに変数が初期化されないまま来ているので Undefined Index が表示されるのは当然という感じです。
  • 旧サーバでは、変数が初期化されていなくてもメッセージが表示されずに処理される設定になっているのではないかと思うのですが、どこをどう変えれば良いのかわからない状態です。
  • あと数週間は旧サーバも稼働していますので比較することは可能ですが、チェックすべきポイント等ありましたら教えていただければありがたいです。
回答を見る
  • ベストアンサー

Smarty の Undefined Index

CentOS5.5 のサーバ上にて、Apache + PHP + Smarty + Zend Framework で 構築されたサイトを、事情により異なるサーバへ引っ越すことになりました。 新しいサーバにも CentOS5.5 がインストールされたものを用意し、 Apache と PHP は旧サーバと同じバージョンのものをインストールし、 Smarty と Zend Framework は旧サーバから tar ball でまとめて コピーし展開しました。 その他ソースコードも tar ball でまとめて持ってきましたので、差異はないと 思っていたのですが、新しいサーバのページを表示させると、あちこちに 下記のようなエラーメッセージが表示されてしまいました。 [8] Undefined index: checked /file_path_to_smarty/templates_c/%%A6^A6C^A6C4B1AA%%index.tpl.php(143) PHPで書かれたプログラムの内容については、開発に携わっていなかったので 詳しいことは分からないのですが、ソースコードを見ると、確かに変数が 初期化されないまま来ているので Undefined Index が表示されるのは 当然という感じです。 error_reporting や display_errors の設定の問題かと思いましたが、 設定やソースコードを変えてもエラーが表示されてしまいました。 Smarty には default という修飾子がありますが、もともとのソースコードでは 書かれていないので旧サーバでは default 無しでもメッセージが表示されない ようです。 旧サーバでは、変数が初期化されていなくてもメッセージが表示されずに 処理される設定になっているのではないかと思うのですが、どこをどう変えれば 良いのかわからない状態です。 あと数週間は旧サーバも稼働していますので比較することは可能ですが、 チェックすべきポイント等ありましたら教えていただければありがたいです。 よろしくお願いします。

  • haru44
  • お礼率68% (153/223)
  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

error_reportingをE_ALL ^ E_NOTICEにしてもダメでしょうか?

haru44
質問者

お礼

早速ありがとうございます。 php.ini にて下記の設定を試しましたが、状況は変わりませんでした。 phpinfo() で反映されていることを確認しながら試しました。 error_reporting = E_ALL & ~E_NOTICE とすると、phpinfo() では 30711 と表示されましたが、状況は変わりませんでした。 error_reporting = E_ALL ^ E_NOTICE では 30719 ^ 8 と表示されましたが、 状況は変わりませんでした。 error_reporting = 0 としてみましたが、これも変わりませんでした。 E_NOTICE で表示される(通常の)Undefined Index エラーは下記の形式ですが、 Notice: Undefined Index ~~~ 今回は、先頭が [8] となっているので、もしかして違うところで表示されて いるのかも?とも思っています。 [8] Undefined Index ~~~

haru44
質問者

補足

どうも、ありがとうございました。 他の方法で対処することになりました。 中途半端になってしまい申し訳ありません。

関連するQ&A

  • Smarty で なぜか 「index.tpl」でなく「_index.tpl」が表示されてしまう

    Smarty で、 //SMARTY define('SMARTY_DIR', $_SERVER["DOCUMENT_ROOT"] . '/../include/smarty/'); require_once(SMARTY_DIR . 'Smarty.class.php'); $o_smarty = new Smarty(); $o_smarty->template_dir = SMARTY_DIR . "templates/"; $o_smarty->compile_dir = SMARTY_DIR . "templates_c/"; $o_smarty->config_dir = SMARTY_DIR . "configs/"; //$o_smarty->cache_dir = SMARTY_DIR . "cache/"; //$o_smarty->assign("name","world"); $o_smarty->display("index.tpl"); のように書いているにも関わらず、 どうしても、 SMARTY_DIR . "templates/_index.tpl" のファイルが表示されてしまいます。(アンダースオア付き) それに、そもそも、「_index.tpl」 なんでファイルをつくったおぼえはありません。 また、smarty関連ファイルを「_index.tpl」でgrepしても、ひっかかりませんでした。 どうすれば、この状況を打破できるのでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • Smartyに関しまして

    require_once("Smarty/Smarty.class.php"); $smarty = new Smarty(); $smarty->template_dir = "./templates"; $smarty->compile_dir = "./templates_c"; $smarty->assign("message", "こんばんは"); $a = array('hello','php','html'); $smarty->assign('a',$a); $smarty->display("index.tpl"); これでindex.tplで出力すると日本語部分が「?????」になってしまいます。 何か設定がいるんでしょうか??

    • ベストアンサー
    • PHP
  • SMARTYのエラーについて。について。

    今度業務でPHPをやる事になったので手始めにSmartyを使って簡単なアプリケーションを作ってみようと思ったのですが、最初の段階でいきなりつまづいてしましました。 具体的には、サンプルサイトからコピーした以下の様なphp&テンプレートを動かすと決まって次のエラーになります。 【/var/www/html/test/index.php】 <?php require_once('/var/www/smarty/libs/Smarty.class.php'); $smarty = new Smarty; $smarty->assign('name', 'test'); $smarty->display('index.tpl'); ?> 【/var/www/html/test/templates/index.tpl】 <html> <head> <title>User Info</title> </head> <body> 名前:{$name}<br> </body> 【エラー】 Warning: preg_match() [function.preg-match]: Compilation failed: repeated subpattern is too long at offset 18454 in /var/www/smarty/libs/Smarty_Compiler.class.php on line 454 ちなみに環境は以下の通りです。 OS:CentOS5.2 web:apache2.2.3 php:5.1.6 Smarty:2.6.21 同様の基本的なサンプルを他にもいくつか実行しましたが、結果は上記エラーと全く同一のものしか出力されません… 同じ症状が出て対応された方がいらっしゃいましたら回答の程よろしくお願い致します。

    • ベストアンサー
    • PHP
  • Smartyについて

    Smartyについて Smartyをインストールしました。 OS:ubuntu インストール先:/usr/local/lib/Smarty-2.6.26 php.ini[include_path]の設定:/usr/local/lib/Smarty-2.6.26/libs/を追加 /var/www/以下にtestフォルダ作成 /var/www/test/index.html | /test/index.php chmod 644 | /tempalates chmod 775 templates | / index.tpl chmod 644 /templates_c chmod 775 templates_c /configs chmod 775 configs /cache chmod 775 cache index.phpの内容 <?php require_once(”Smarty.class.php"); $o_smarty=new Smarty(); $o_smarty->template_dir="./templates/"; $o_smarty->compile_dir="./template_c/"; $o_smarty->assign("name","world"); $o_smarty->display("hello.tpl"); ?> index.tplの内容 <html> <head> <title>Hello,world</title> </head> <body> Hello,{$name}! </body> </html> http://web.domain/test/index.php を入力するとエラーは出ませんが、何も表示されません。 これだけで、原因を特定出来ないのかもしれませんが、何処が悪いのでしょうか? 御教示お願いいたします。

  • smartyの必要性について

    phpを用いて携帯サイトを作成しています。 phpのみを表記している「a.php」「b.php」「c.php」「d.php」「e.php」があります。 ------------a.php------------- <?php if(~~){ $a[0] = '~~'; }else(~~~~){ $a[0] = '~~~'; } $a[1] = '~~'; $a[2] = '~~~'; ・ ・ ・ $a[n-10] = <<< MESSAGE <h1>{$a[n-25}</h1> <p>テスト表示</p>     ・     ・ <p>{$a[n-15]}</p> MESSAGE; ・ ・ $a[n] = <<< MESSAGE <h1>{$a[n-50}</h1> <p>テスト表示</p>     ・     ・ <p>{$a[n-45]}</p> MESSAGE; ?> ----------------------------------- ------------b.php------------------ <?php if(~~){ $b[0] = '~~'; }else(~~~~){ $b[0] = '~~~'; } $b[1] = '~~'; $b[2] = '~~~'; ・ ・ ・ $b[n] = <<< MESSAGE <h1>{$b[0}</h1> <p>テスト表示</p>     ・     ・ <p>{$b[n-10]}</p> MESSAGE; ?> --------------------------------------- c.php以下の内容もだいたいおなじ内容になっております。 -----------index.php-------------------- <html> <head> <?php include_once 'a.php'; include_once 'b.php'; include_once 'c.php'; include_once 'd.php'; include_once 'e.php'; ?> </head> <body> <?php echo $a[0]; echo $a[n]; echo $b[n-60]; echo $c[n-30]; ?> </body> </html> ----------------------------------------- -----------index1.php------------------- <html> <head> <?php include_once 'a.php'; include_once 'b.php'; include_once 'c.php'; include_once 'd.php'; include_once 'e.php'; ?> </head> <body> <?php echo $a[0]; echo $a[n]; echo $b[n-80]; echo $c[n-3]; ?> </body> </html> ------------------------------------- このような感じでindex.php ~ index[n].phpを作成しております。 index.php ~ index[n].phpは、基本として修正は行なわず a.php ~ e.phpを修正することによって、すべてのページへ 瞬時に反映できるようにして作成しております。 現在、この方法で十分管理はできています。 つぎは、smartyを用いておなじような処理を考えてみました。 ######################## ### smarty使用 #### ######################## ------------index.php開始---------------- <?php require_once 'libs/Smarty.class.php'; $smarty = new Smarty; $smarty->compile_check = true; include_once 'a.php'; include_once 'b.php'; include_once 'c.php'; include_once 'd.php'; include_once 'e.php'; $smarty->assign("a", $a); $smarty->assign("b",$b); $smarty->assign("c",$c); $smarty->display('test.tpl'); ?> ------------------------------------------ ------------index.tpl--------------------- <html> <head> </head> <body> {$a[0]} {$a[n]} {$b[n-60]} {$c[n-30]} </body> </html> --------------------------------------- smartyを使っていないときよりも、smartyを使ったほうが 処理速度が速くなるようでしたらsmartyに乗り換えるのですが Smarty.class.phpを余分に読み込む分、処理速度が速くなって いるとも思えません。 また、index.html ~ index[n].htmlへの記述も大差ないので 可視性やデザイン面でもとくに違和感なく修正できます。 上記の作成方法で、smartyを用いるうえでの可視性の向上以外の利点は ありますでしょうか? また、改善点などございましたら、ご教授いただけると幸いです。

    • 締切済み
    • PHP
  • Smartyのテンプレートで未定義の変数がエラーになってしまいます。

    Smartyでテンプレートで、存在しない変数が書かれていてもUndefined indexのエラーを表示しないように したいのですが、Smartyの設定で可能でしょうか?

    • 締切済み
    • PHP
  • smartyのdifineについて

    表示するファイルにdefineにてパスを設定すると正常に 表示されるのですが管理が面倒なので別のファイルに defineにてパスを設定するとエラーになってしまいます。 具体的には以下のソースです。 ---Smarty/libs/path.php--- define ('SMARTY_LIBS_DIR', 'C:/Program Files/xampp/htdocs/Smarty/libs/'); ---Smarty/libs/MySmarty.class.php--- require_once dirname(__FILE__) . '/Smarty.class.php'; require_once dirname(__FILE__) . '/path.php'; ---Smarty/index.php--- require_once SMARTY_LIBS_DIR . 'MySmarty.class.php'; 調べてみたのですが表示するファイルに指定する方法しか みつからなかったのですが別ファイルから指定する事は 無理なのでしょうか?

    • 締切済み
    • PHP
  • Smartyの設置について教えてください。

    お名前.COMにて提供しているVPSサーバプランについてですが、どなたかSmartyを設置された方いらっしゃいますか? いつもの通りユーザ階層にSmartyフォルダを設置し、一通りの事を行って、いざアクセスするもページが真っ白で表示されません。 エラーログを見ても普通にSmarty.classには到達しているようで、何が原因なのかわかりません(泣) てすとで通常のPHPページを作成し、現在の日時を表示するよう書き込んでアップしてみましたところ、普通に表示されるので普通にPHPは使えるんだなって感じです。 では、なぜSmartyだけうまく表示できないのでしょうか? 恐らく私の基本的なミスが原因だと思いますが、一応どなたか設置経験のある方がいましたら、設置内容を改めて教えていただければと思います。 どうぞ、宜しくお願いします。 ちなみに設置階層は下記の通りです。 /httpdocs/Smarty/libs/Smarty.class.php /httpdocs/data/cache /httpdocs/data/configs /httpdocs/data/templates /httpdocs/data/templates_c また、トップにあたるindex.phpの中は以下の通りです。 <?php require_once('./Smarty/libs/Smarty.class.php'); $smarty = new Smarty(); $smarty->template_dir = './data/templates/'; $smarty->compile_dir = './data/templates_c/'; $smarty->config_dir = './data/configs/'; $smarty->cache_dir = './data/cache/'; $smarty->display('index.tpl'); ?> アドバイスで構いませんので宜しくお願いします。

    • 締切済み
    • PHP
  • smartyについて教えてください。

    smartyについて教えてください。 エラーメッセージ Parse error: syntax error, unexpected T_STRING in C:\xampp\htdocs\smarty\hello\index.php on line 8 の意味を教えていただけませんでしょうか? よろしくお願いいたします。

  • zendにsmarty3の組込で

    こちらのページを参考に表示にsmartyを入れてみました。 http://www.phppro.jp/school/smarty/vol12/2 ※smartyは3.0.6でzendは1.11.3です indexActionで格納した変数はtplで表示されているので組込は 成功しているかと思うのですが下記のようなエラーが表示されます。 Warning: include_once(Smarty\Internal\Data.php) Warning: include_once(Smarty\Internal\Template.php) ファイルを確認すると確かに該当データがありません。 smarty3なのでフォルダ名がInternalではなくsyspluginsに変わって いる事が原因かと思うのですがどのように対処すればいいでしょうか?

    • ベストアンサー
    • PHP