0

この例外を引き起こすために何をしたのか本当にわかりませんが、この問題が発生しているのは、PHP スクリプトを含めているためだけだと推測しました。スローされているエラーは次のとおりです。

[Tue Jun 19 01:33:28 2012] [error] [client 127.0.0.1] PHP Fatal error:  Cannot redeclare sql_connect() (previously declared in core.php:6) in core.php on line 9

ここにあるsql_connect()

function sql_connect(){
    $a = mysql_connect("localhost", "user", "pass") or die(json_encode(array("failure"=>"SQL CON FAILURE: ".mysql_error()))); // Line 6
    mysql_select_db("whoSync", $a);
    return $a;
} //Line 9

背景:core.phpは実際にはコードを実行していません。関数を定義しているだけです。これが奇妙である理由は次のとおりです。これを含めるcore.phpと、home.php上記の例外がスローされます。core.php他のファイルにインクルードしてもエラーにはなりません。

私はPHPが得意ですが、何が起こっているのかわかりません。助けてくれてありがとう。

4

2 に答える 2

4

またはに変更includeします。include_oncerequire_once

問題は、関数を含むファイルを複数回呼び出す/含めることです。関数が 2 回定義されるのを防ぐために、致命的なエラーがスローされます。

説明:

*_once を使用すると、PHP はスクリプトの実行中に指定されたファイルを 1 回だけインクルードします。PHP は動的な性質のため、メソッドのオーバーロード (クラス スコープ外) をサポートしていません。Java のような言語は、メソッドのオーバーロード/オーバーライドをサポートしています。

home.php、about.php、sidebar.php というファイルがあるとします。3 つのファイルはすべて、dbhandler() という関数を持つ別のファイル database.php を呼び出します。

dbhandler() はすでに定義されています。home.php が呼び出され、それが sidebar.php を参照する場合、database.php が 2 回呼び出されます。include_once/require_once を使用すると、まだ呼び出されていない場合、database.php のみが含まれます。

お役に立てれば。

于 2012-06-19T01:45:23.133 に答える
1

これは、core.phpすでにロードされていることを意味します。たとえば、他のファイルにそれが含まれておりhome.php、そのファイルを含めるとこれが発生します。これを防ぐには、include_onceまたはrequire_onceを使用して、ファイルが 1 回だけ含まれるようにすることができます。または、ファイルを一度だけ含めるようにすることもできます。

于 2012-06-19T01:51:07.947 に答える