[PHP-users 30976] Re: Fatal error: Cannot redeclare

SevenBeat Saeki saeki @ seven-beat.co.jp
2006年 12月 12日 (火) 14:51:27 JST


kumapoo様

佐伯です。

> 開発者のPC(PHP4.4.2)では動作し、本番サーバ(php4.1.2)でも動作し、テス
> トサーバ(既出、PHP4.4.2)で標記の「再定義エラー」が出るのが気になってい
> ます。

php.iniのエラーレベルをE_ALLにするとどの環境でも出てくるかも知れません。
テスト環境のphp.iniの設定と、本番と開発のphp.iniをあわせてみてください。

以上
----- Original Message ----- 
From: "Kumapoo" <kumapoo @ zf7.so-net.ne.jp>
To: "PHP-users ML" <php-users @ php.gr.jp>
Sent: Tuesday, December 12, 2006 2:31 PM
Subject: [PHP-users 30974] Re: Fatal error: Cannot redeclare


> kumapooです。
>
> お世話になります。(文章長くってすいません。。。)
> config.inc出すことにしました。
>
> 昨日色々思考錯誤してみましたが、、、状況変わらずです。
> > そんなプログラマは解雇(後略
> 私が、ソースを追えないなため、そんなこと言えないデス。笑
>
> 開発者のPC(PHP4.4.2)では動作し、本番サーバ(php4.1.2)でも動作し、テス
> トサーバ(既出、PHP4.4.2)で標記の「再定義エラー」が出るのが気になってい
> ます。
> -----
> Fatal error: Cannot redeclare configuration_data() (previously declared
> in
> /export/home/u/hoge-test.imjp.co.jp/public_html/agency/lib/config.inc:18)
> in /export/home/u/hoge-test.imjp.co.jp/public_html/agency/lib/config.inc
> on line 16
> -----
>
> http://eth.jp/hiki.cgi?PHP-Changes-4.4.2
> は見てみたのですが、私には???でした。
>
> http://hoge-test.imjp.co.jp/sample2/
> httpd.confにこんな感じで書いてあり、実際はindex.phpが呼ばれ、標記のエラー
> が出ます。。
> DirectoryIndex index.php index.html index.htm index.shtml index.cgi
> index.phtml
>
> $ cat -n index.php
>      1  <?php include_once "../agency/lib/fork.php"; ?>
>
> config.inc+関係の有りそうなソースを出します。
> $ cat -n ../agency/lib/config.inc
>      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  ?>
>
> $ cat -n ../agency/lib/fork.php
>      1  <?php
>      2  header("Content-Type: text/html; charset=shift_jis;");
>      3  header("Pragma: no-cache");
>      4  header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
>      5  header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
>      6  header("Cache-Control: no-store, no-cache, must-revalidate");
>      7  header("Cache-Control: post-check=-1, pre-check=-1", false);
>      8  ?>
>      9  <?php
>     10  /* *** Define *** */
>     11  define(ROT_DIR, $_SERVER["DOCUMENT_ROOT"]);
>     12  /* *** /Define *** */
>     13  require_once ROT_DIR."/agency/lib/config.inc";
>     14  ?>
>     15  <?php
>     16  function output_content() {
>     17    $page = (isset($_GET["id"])) ? $_GET["id"] : "list";
>     18    $agency = new AGENCY(configuration_data(),$page,"FORK");
>     19    e($agency->output());
>     20  }
>     21  function e($str) { echo $str; }
>     22  output_content();
>     23  ?>
>
>
> > 伊東です
> >
> > > ただ、プログラマに聞いたところ、「二重定義は絶対にない」とのこと。
> > > また、プログラマの環境では動くそうです。
> >
> > そんなプログラマは解雇(後略
> >
> > > Fatal error: Cannot redeclare configuration_data() (previously
declared in
/export/home/u/hoge-test.imjp.co.jp/public_html/agency/lib/config.inc:18) in
/export/home/u/hoge-test.imjp.co.jp/public_html/agency/lib/config.inc on
line 16
> >
> > この config.inc を晒せばわかるでしょうね。
> > 晒せないなら、自己解決するしかありません。
> >
> > 2カ所に定義してるんじゃなくて、定義しているところを2回処理してるんで
しょ。たぶん
> > _______________________________________________
> > PHP-users mailing list  PHP-users @ php.gr.jp
> > http://ml.php.gr.jp/mailman/listinfo/php-users
> > PHP初心者のためのページ - 質問する前にはこちらをお読みください
> > http://www.php.gr.jp/php/novice.php3
>
>
> _______________________________________________
> PHP-users mailing list  PHP-users @ php.gr.jp
> http://ml.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://www.php.gr.jp/php/novice.php3



PHP-users メーリングリストの案内