Answers:
我不建议仅使用批处理API,因为批处理操作取决于浏览器。如果由于某种原因浏览器崩溃或失去与服务器的连接,批处理操作将不会终止,或者(更糟糕的)它们将被挂起。实际上,为避免PHP超时,批处理操作会导致浏览器每隔一段时间ping通批处理页面。无论是否涉及JavaScript代码,都会发生这种情况(在以后的情况下,Drupal使用refresh meta标签)。
在这些情况下,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脚本,而是使用PHP在Drupal中调用的BASH脚本在后台运行。这些BASH脚本访问Drupal数据库并提高其正在编译并发送给客户的任何产品的“状态”值。另外,Drupal能够查看这些状态值,并向客户报告当前在“自定义创建过程”中他们所购买的位置。