1

20 以上の WordPress サイトをホストするサーバー上の WordPress プラグインのすべてのインスタンスを更新するためのインターフェイスを作成しようとしています。ループがあるという事実を除いて、すべてが機能しています:

require_once($path.'/wp-load.php');
require_once($path.'/wp-admin/includes/admin.php');
require_once($path.'/wp-admin/includes/class-wp-upgrader.php');

ここで$path、ウェブサイトのディレクトリと同じです($pathループの繰り返しごとに変化します)。

このようにファイルを要求する必要がある理由wp-load.phpは、(とりわけ) というファイルが含まれているためですwp-config.php。これは、SQL データベースなどを定義するもので、Web サイトごとに異なります。

TL&DRと私の実際の質問を述べる:

次のコードのようなことを行う方法はありますか?

require_once("dir1/a.php"); // define("VAR","dir1");
echo VAR; // displays "dir1"
unrequire_once("dir1/a.php");

require_once("dir2/a.php"); // define("VAR","dir2");
echo VAR; // displays "dir2"
4

2 に答える 2

0

はい: プロセスをフォークします。次のようなことができます:

foreach ($pathlist as $path) {
    $pid = pcntl_fork();
    if(!$pid) {
        require_once($path.'/wp-load.php');
        require_once($path.'/wp-admin/includes/admin.php');
        break;
    }
}

これにより、リスト内の $path ごとにスクリプトのコピーが作成され、require_once の問題が回避されます。

子プロセスが個々の $path 設定に対してのみ実行され、ループ自体を続行しないようにするため、子プロセスの場合はループを「中断」する必要があります。

于 2013-10-30T12:59:03.373 に答える
0

これは社内ツールであると述べたので、runkit を使用して実行時に定数を削除し、後で再定義できるようにすることを検討できます: http://www.php.net/manual/en/function. runkit-constant-remove.php


define恐れる必要はありません。できたとしても、定数 ( ) は 1 回しか作成できず、残りの実行ではそのようになるため、探している動作は得られません。それらを削除したり、後で変更したりすることはできません。

残念ながら、スクリプトを再構築する必要があります (定数の代わりに変数を使用するなど)。

于 2013-09-06T22:56:03.390 に答える