- - PR -
【PHP】Fatal error: Cannot redeclare
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-12-11 17:40
#連想配列の定義しかやっていないのに・・
4.4.1→4.4.2での修正箇所はこんな感じですけどねぇ・・ http://eth.jp/hiki.cgi?PHP-Changes-4.4.2 定義自体は16行目なんですよね。この定義時点でエラーになっているのですが、「前回の定義」は同じincファイルの18行目だった・・ということになってます(previously declared in /export/home/u/hoge-test.co.jp/public_html/agency/lib/config.inc:18)。このエラーメッセージ(incファイル名と行数)は間違いないですよね?(念のため確認) (追記) ひょっとして(ソースの改行位置が推測できないのですが)18行目は「"main" => "main_{{PAGE}}_01.tmpl",」でしょうか?そうすると「PAGE」というのが気になります。 #complexの二重括りは縁がないのでよくわからないですが(汗 [ メッセージ編集済み 編集者: shimix 編集日時 2006-12-11 18:01 ] | ||||||||||||
|
投稿日時: 2006-12-11 18:42
shimixさん、すいません。
コピペでソースを貼り付けたところ、@IT会議室の仕様なのか、下記「※」部分で改行されてしまいました。ですので、エラーの部分はやはり、「function configuration_data() {」になります。 1 <?php 2 /* *** Define *** */ 3 define(PAR_DIR, ROT_DIR."/agency"); 4 define(TMP_DIR, PAR_DIR."/template"); 5 define(INC_DIR, PAR_DIR."/include"); 6 define(AGC_NAM, preg_replace("/^.*\/([^\/]+)\/[^\/]*$/","$1",$_SERVER["REQUEST_URI"]));※ 7 define(AGC_DIR, ROT_DIR."/".AGC_NAM); 8 define(CMN_CSV, PAR_DIR."/csv/default.csv"); 9 define(AGC_CSV, AGC_DIR."/csv/config.csv"); 10 define(IMG_DIR, "../agency/img"); 11 define(BNR_DIR, "../agency/banner"); 12 /* *** /Define *** */ 13 ?> 14 <?php 15 /* *** Configuration *** */ 16 function configuration_data() { 17 $template_list = array( 18 "header" => "header_01.tmpl", 19 "main" => "main_{{PAGE}}_01.tmpl", 20 "sub" => "sub_01.tmpl", 21 "footer" => "footer_01.tmpl", 22 "fork" => "fork_01.tmpl", 23 "redirect" => "redirect_01.tmpl", 24 ); 25 return $template_list; 26 } 27 /* *** /Configuration *** */ 28 ?> 29 <?php 30 /* *** Include *** */ 31 require_once PAR_DIR."/lib/class.inc"; 32 /* *** /Include *** */ 33 ?>
はい、間違いないです。今ブラウザを叩いたら、同様のエラーが出ました。改行部分について、行番号をつけましたので、参考にして頂ければと。 [ メッセージ編集済み 編集者: kumapoo 編集日時 2006-12-11 19:01 ] [ メッセージ編集済み 編集者: kumapoo 編集日時 2006-12-11 19:01 ] | ||||||||||||
|
投稿日時: 2006-12-11 19:05
あ、いや16行目は(その前の改行がなかっただろうことは推測できたので)functionだとは認識しています。問題は18行目「(previously declared in /export/home/u/hoge-test.co.jp/public_html/agency/lib/config.inc:18)」という部分です。
この行が「以前の定義(宣言)」になっているので、アレ?と思ったのです。連想配列は重複しても問題ないハズなのですが、もし1行下の「PAGE」を使っているのが18行目なら何か潜んでいるのかなと。 #でもここは19行目なんですよね? (追記) あ、でもエラー行としてはどちらを表示するかなぁ・・。うーん、PAGEというのはどこかでdefineされてますかね。どういう内容でしょうか? [ メッセージ編集済み 編集者: shimix 編集日時 2006-12-11 19:14 ] | ||||||||||||
|
投稿日時: 2006-12-11 19:20
shimixさん、たびたび回答ありがとうございます。
ちょっと、ソースを終えない自分が情けないです。 grepしてみました。 $ grep -R PAGE * agency/lib/class.inc: $_file = preg_replace("/{{PAGE}}/",$this->page,$_file); agency/lib/config.inc: "main" => "main_{{PAGE}}_01.tmpl", $ grep -R define * agency/lib/config.inc:define(PAR_DIR, ROT_DIR."/agency"); agency/lib/config.inc:define(TMP_DIR, PAR_DIR."/template"); agency/lib/config.inc:define(INC_DIR, PAR_DIR."/include"); agency/lib/config.inc:define(AGC_NAM, preg_replace("/^.*\/([^\/]+)\/[^\/]*$/","$1",$_SERVER["REQUEST_URI"])); agency/lib/config.inc:define(AGC_DIR, ROT_DIR."/".AGC_NAM); agency/lib/config.inc:define(CMN_CSV, PAR_DIR."/csv/default.csv"); agency/lib/config.inc:define(AGC_CSV, AGC_DIR."/csv/config.csv"); agency/lib/config.inc:define(IMG_DIR, "../agency/img"); agency/lib/config.inc:define(BNR_DIR, "../agency/banner"); agency/lib/fork.php:define(ROT_DIR, $_SERVER["DOCUMENT_ROOT"]); agency/lib/lib.php:define(ROT_DIR, $_SERVER["DOCUMENT_ROOT"]); common/js/default.js:CheckString.prototype.objundef = function(obj) { return (typeof(obj) == "undefined"); }; common/js/default.js:function isUndefined(obj) { return chkstr1.objundef(obj); } | ||||||||||||
|
投稿日時: 2006-12-11 19:34
ひょっとしてclass.incでconfig.inc内の{{PAGE}}を$this->pageに置換しているんですかねぇ。そうなると
という定義を連想配列に入れようとしていると思うんですが、これって大丈夫なんだろうか(というかこれが4.4.2だとOKなんですかね・・)。ページごとのテンプレートをセットしたいようではあるんですが、
とかだとマズイんでしょうか? #ざくっと書いてるので未検証なのはあしからず・・ | ||||||||||||
|
投稿日時: 2006-12-11 21:23
shimixさん
ずいぶんお付き合い頂き申し訳ありません。 やはり、4.4.1と4.4.2では出来ることが違うのでしょうか??? ちなみに、PHP/4.1.2でも動いているとの情報を得ました。 shimixさんのご指摘通り、ソースを修正して、ブラウザから実行してみました。 ----- Parse error: parse error, unexpected '{' in /export/home/u/mitsui-direct-B-g/public_html/agency/lib/config.inc on line 17 ----- 代入の仕方が間違っているみたいです。 修正したソースを念のため貼り付けます。 1 <?php 2 /* *** Define *** */ 3 define(PAR_DIR, ROT_DIR."/agency"); 4 define(TMP_DIR, PAR_DIR."/template"); 5 define(INC_DIR, PAR_DIR."/include"); 6 define(AGC_NAM, preg_replace("/^.*\/([^\/]+)\/[^\/]*$/","$1",$_SERVER["REQUEST_URI"])); 7 define(AGC_DIR, ROT_DIR."/".AGC_NAM); 8 define(CMN_CSV, PAR_DIR."/csv/default.csv"); 9 define(AGC_CSV, AGC_DIR."/csv/config.csv"); 10 define(IMG_DIR, "../agency/img"); 11 define(BNR_DIR, "../agency/banner"); 12 /* *** /Define *** */ 13 ?> 14 <?php 15 /* *** Configuration *** */ 16 function configuration_data() { 17 $currentpage = {{PAGE}}; 18 $template_list = array( 19 "header" => "header_01.tmpl", 20 "main" => "main_$currentpage_01.tmpl", 21 "sub" => "sub_01.tmpl", 22 "footer" => "footer_01.tmpl", 23 "fork" => "fork_01.tmpl", 24 "redirect" => "redirect_01.tmpl", 25 ); 26 return $template_list; 27 } 28 /* *** /Configuration *** */ 29 ?> 30 <?php 31 /* *** Include *** */ 32 require_once PAR_DIR."/lib/class.inc"; 33 /* *** /Include *** */ 34 ?> | ||||||||||||
|
投稿日時: 2006-12-11 22:45
あ、すみません。class.incでの置換対象は"/{{PAGE}}/"ですね。そうなると{{PAGE}}というのが謎です。どういう値を期待しているのやら。
他に{{PAGE}}が出てくるソースはないですよね?うーん・・ひょっとして私の知らない設定があるのか(汗)。とりあえずphpinfo()の内容を動作している4.1.2/4.4.2のものと比較してみるのが早いかもしれません。configurationのあたりで動作している環境でenableになっているものが4.4.1環境で全部enableかどうかをチェックしてみてください。 | ||||||||||||
|
投稿日時: 2006-12-12 16:54
もしかして
auto_append_file auto_prepend_file が有効になっていたりしないですよね? |