Drupal Stuff :: Install Drupal With Curl
| diversen | |
| 24-Feb-2010 01:44:44 |
0 Comments
As a site note before doing this, you should really consider using the drush site-install command!
This was tested on drupal-6.20 with PHP 5.3. Druapl 7 needs to have Javascript enabled as far as I can see. And therefor will not install from curl! You should also note that correct files for settings.php and the file folder needs to be set in order to make this work (otherwise we will get errors and curl will not compleate!)
First we add a curl class.
<?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; } }
And now we create the script with the curl class.
<?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 = 'site_mail@site.com'; // admin account name $account_name = 'admin'; // admin account email $account_mail = 'admin@admin.dk'; // 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();