我能找到的所有 Drupal 文档都有一个“转到浏览器并在那里继续安装”的步骤。
我如何从命令行执行这些步骤?
我正在尝试建立一个网站,可以在其中启动 AWS 实例并通过命令行安装 Drupal 等。
答案1
你想使用Drush 的供给脚本。
Drush 是 Drupal 的命令行 shell 和脚本界面,它是名副其实的瑞士军刀,旨在让我们这些花费大量工作时间在命令提示符下进行破解的人的生活变得更轻松。
答案2
由于安装脚本会进行各种不同的重定向,因此从 curl 安装 drupal 有点麻烦。您还需要在特定时刻读取和写入 cookie。但是:我已经编写了一个 curl 脚本,它将从命令行安装 drupal :) 注意:仅使用 drupal-6.x、php5 和 php curl 扩展进行了测试。
在执行此操作之前,请注意站点,您应该真正考虑使用 drush site-install 命令!
这是在 drupal-6.20 和 PHP 5.3 上测试的。据我所知,Druapl 7 需要启用 Javascript。因此无法从 curl 安装!您还应该注意,需要设置 settings.php 的正确文件和文件夹才能使其正常工作(否则我们会收到错误并且 curl 将无法完成!)
首先我们添加一个 curl 类。
<?php // class found on php.net // http://php.net/manual/en/book.curl.php class mycurl { protected $_useragent = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1'; protected $_url; protected $_followlocation; protected $_timeout; protected $_maxRedirects; protected $_cookieFileLocation = './cookie.txt'; protected $_post; protected $_postFields; protected $_referer ="http://www.google.com"; protected $_session; protected $_webpage; protected $_includeHeader; protected $_noBody; protected $_status; protected $_binaryTransfer; public $authentication = 0; public $auth_name = ''; public $auth_pass = ''; public function useAuth($use){ $this->authentication = 0; if($use == true) $this->authentication = 1; } public function setName($name){ $this->auth_name = $name; } public function setPass($pass){ $this->auth_pass = $pass; } public function __construct($url,$followlocation = true,$timeOut = 30,$maxRedirecs = 4,$binaryTransfer = false,$includeHeader = true,$noBody = false) { $this->_url = $url; $this->_followlocation = $followlocation; $this->_timeout = $timeOut; $this->_maxRedirects = $maxRedirecs; $this->_noBody = $noBody; $this->_includeHeader = $includeHeader; $this->_binaryTransfer = $binaryTransfer; $this->_cookieFileLocation = dirname(__FILE__).'/cookie.txt'; } public function setReferer($referer){ $this->_referer = $referer; } public function setCookiFileLocation($path) { $this->_cookieFileLocation = $path; } public function setPost ($postFields) { $this->_post = true; $this->_postFields = $postFields; } public function setUserAgent($userAgent) { $this->_useragent = $userAgent; } public function createCurl($url = 'nul') { if($url != 'nul'){ $this->_url = $url; } $s = curl_init(); curl_setopt($s,CURLOPT_URL,$this->_url); curl_setopt($s,CURLOPT_HTTPHEADER,array('Expect:')); curl_setopt($s,CURLOPT_TIMEOUT,$this->_timeout); curl_setopt($s,CURLOPT_MAXREDIRS,$this->_maxRedirects); curl_setopt($s,CURLOPT_RETURNTRANSFER,true); curl_setopt($s,CURLOPT_FOLLOWLOCATION,$this->_followlocation); curl_setopt($s,CURLOPT_COOKIEJAR,$this->_cookieFileLocation); curl_setopt($s,CURLOPT_COOKIEFILE,$this->_cookieFileLocation); if($this->authentication == 1){ curl_setopt($s, CURLOPT_USERPWD, $this->auth_name.':'.$this->auth_pass); } if($this->_post) { curl_setopt($s,CURLOPT_POST,true); curl_setopt($s,CURLOPT_POSTFIELDS,$this->_postFields); } if($this->_includeHeader) { curl_setopt($s,CURLOPT_HEADER,true); } if($this->_noBody) { curl_setopt($s,CURLOPT_NOBODY,true); } /* if($this->_binary) { curl_setopt($s,CURLOPT_BINARYTRANSFER,true); } */ curl_setopt($s,CURLOPT_USERAGENT,$this->_useragent); curl_setopt($s,CURLOPT_REFERER,$this->_referer); $this->_webpage = curl_exec($s); $this->_status = curl_getinfo($s,CURLINFO_HTTP_CODE); curl_close($s); } public function getHttpStatus() { return $this->_status; } public function __tostring(){ return $this->_webpage; } }
现在我们使用 curl 类创建脚本。
<?php include_once "curl.inc"; // your site $site_url = 'http://drupal'; // profile $profile = 'default'; // locale $locale = 'en'; // database $db_path = 'drupal'; // database user $db_user = 'root'; // database pass $db_pass = 'password'; // database host $db_host = 'localhost'; // name of site $site_name = 'site_name'; // site email $site_mail = '[email protected]'; // admin account name $account_name = 'admin'; // admin account email $account_mail = '[email protected]'; // admin account pass $account_pass = 'admin1234'; // date time zone $date_default_timezone = '-39600'; // use clean url. $clean_url = '1'; // update status module $update_status_module = '1'; // end of settings // create a url for curling db settings $url_str = "db_path=$db_path&"; $url_str.= "db_user=$db_user&"; $url_str.= "db_pass=$db_pass&"; $url_str.= "db_host=$db_host&"; $url_str.= "db_prefix=&"; $url_str.= "db_port=&"; $url_str.= "op=Save and continue" . "&"; $url_str.= "form_id=install_settings_form"; $url_str = urlencode($url_str); $url = "$site_url/install.php?profile=$profile"; $curl = new mycurl($url, true); $curl->createCurl(); echo $curl; $url = "$site_url/install.php?profile=$profile&locale=$locale"; $curl = new mycurl($url, true); $curl->setPost($url_str); $curl->createCurl(); echo $curl; $url = "$site_url/install.php?profile=$profile&locale=$locale&op=do_nojs&id=1"; $curl = new mycurl($url, true); $curl->setPost($url_str); $curl->createCurl(); echo $curl; $url = "$site_url/install.php?profile=$profile&locale=$locale&op=finished&id=1"; $curl = new mycurl($url, true); $curl->setPost($url_str); $curl->createCurl(); echo $curl; // set settings for loading database with site base settings $url_str = "site_name=$site_name&"; $url_str.= "site_mail=$site_mail&"; $url_str.= "account[name]=$account_name&"; $url_str.= "account[mail]=$account_mail&"; $url_str.= "account[pass][pass1]=$account_pass&"; $url_str.= "account[pass][pass2]=$account_pass&"; $url_str.= "date_default_timezone=$date_default_timezone&"; $url_str.= "clean_url=$clean_url&"; $url_str.= "form_id=install_configure_form&"; $url_str.= "update_status_module[1]=$update_status_module"; $url = "$site_url/install.php?profile=default&locale=en"; $curl = new mycurl($url, true); $curl->setPost($url_str); $curl->createCurl(); echo $curl; die(); ?>
答案3
您可以使用以下方式编写 URL 脚本卷曲。
答案4
请随意查看此处提供的 drush_site_install6 drush 模块: http://drupal.org/project/drush_site_install6