0

ここに状況があります。

サーバー上で API を 2 回複製したいのですが、異なるデータベースを使用しています。私がやりたいことは、これらの API のいくつかの機能を使用することです。PHP では、これらすべての API ロケーションのループを実装している状況があります。

forach($apis as $api){
 include ($api->apiFiles);
 useAPIfunction();
}

問題は、API には同じ関数とクラスがあり、ループは 1 回実行されますが、2 回目は PHP Fatal error cannot redeclare function が発生します。

関数名の変更など、API を変更したくないので、スクリプトからすべてを行う必要があります。新しい API を含める唯一の方法であるため、最初の反復が完了した後に API ファイルを登録解除する状況はありますか?

助けてくれてありがとう。

4

2 に答える 2

1

同じ API を複数回含める必要はありません。一度だけ含めるだけです (include_onceコマンドを使用して、同じ API を複数回ロードすることを回避できます)。理想的には、API は、どのデータベースを使用するかを示すパラメーターを取得する必要があります。ただし、グローバル変数を使用する場合は、API 関数を呼び出す前に変数を設定します。2 番目の方法は、一度に 1 つのデータベースしか使用できないことを意味するため、パラメーターを使用するのが最適です。

于 2012-09-01T09:26:27.623 に答える
0

私はトリックをしました。最初のイテレーションにAPIファイルを含め、他のイテレーションでは、2番目のデータベースに接続するスクリプトを追加します。その逆も同様です。これで、APIは最初のAPIファイルを使用して一度接続されますが、データベースは新しい反復で変更されます。また、データベース情報を取得する方法が見つからなかったため、API構成ファイルから取得しました。

forach($apis as $api){
 if($count = 0){
  include ($api->apiFiles);
 }else{
  $theData = file_get_contents($api->path'\includes\config.php', NULL, NULL, 10, 600);
  $theData = str_replace('<?php','',$theData);
  $theData = explode("'",$theData);
  $apiHost = $theData[19];
  $apiDB = $theData[7];
  $apiDbUser = $theData[11];
  $apiDBPass = $theData[15];

  mysql_connect($apiHost,$apiUser,$apiPass);
  mysql_select_db($apiDB);
 }
 useAPIfunction();

}

于 2012-09-03T05:44:03.883 に答える