回答:
バッチ操作はブラウザーに依存しているという事実のために、私はバッチAPIの使用を勧めません。なんらかの理由でブラウザがクラッシュしたり、サーバーとの接続が失われたりすると、バッチ処理が終了しないか、(さらに悪いことに)停止します。実際、PHPのタイムアウトを回避するために、バッチ操作により、ブラウザはバッチページに定期的にpingを送信します。これが、JavaScriptコードが関係するかどうかに関係なく行われます(後者の場合、Drupalは更新メタタグを使用します)。
これらの場合、Drushがおそらくより良い選択です。特定のDrushコマンドを実装するカスタムモジュールを作成するか、Drushがコマンドに使用するディレクトリにコマンドファイルを追加することができます。
また、カスタムPHP CLIスクリプトを使用することもできます。drupal 7の簡単な例を以下に示します。
#!/usr/bin/php
<?php
echo "Ubercart tasks\n===================\n";
$_SERVER['HTTP_HOST'] = 'default';
$_SERVER['PHP_SELF'] = '/index.php';
$_SERVER['REMOTE_ADDR'] = '127.0.0.1';
$_SERVER['SERVER_SOFTWARE'] = NULL;
$_SERVER['REQUEST_METHOD'] = 'GET';
$_SERVER['QUERY_STRING'] = '';
$_SERVER['PHP_SELF'] = $_SERVER['REQUEST_URI'] = '/';
$_SERVER['HTTP_USER_AGENT'] = 'console';
define('DRUPAL_ROOT', getcwd());
require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
//-------------------------------------------
// Place your code here
「自動生成されたデジタル製品」の重要なバックエンド処理を必要とするD6 Ubercartサイトがあります。私はこれを介してこれを処理します:
これは、Xioによって提案されたものと多少似ていますが、PHP CLIスクリプトを使用せず、DrupalでPHPによって呼び出されてバックグラウンドで実行されるBASHスクリプトを使用します。これらのBASHスクリプトはDrupalデータベースにアクセスし、Drupalがコンパイルして顧客に送信するすべての製品の「ステータス」値を進めます。さらに、Drupalはこれらのステータス値を確認し、「カスタム作成プロセス」で購入が現時点で発生している顧客に報告することができます。