From 5c90d53a84ef0139c729396949a7857fae60436f Mon Sep 17 00:00:00 2001 From: Damian Mooyman Date: Thu, 22 Jun 2017 10:48:44 +1200 Subject: [PATCH] Update installer to not use global databaseConfig --- src/Dev/Install/InstallRequirements.php | 52 ++++++++++++++++-------- src/Dev/Install/Installer.php | 30 +++++--------- src/Dev/Install/client/images/logo.gif | Bin 0 -> 2097 bytes src/Dev/Install/config-form.html | 10 ++--- src/Dev/Install/install5.php | 40 ++++++++++++------ 5 files changed, 78 insertions(+), 54 deletions(-) create mode 100644 src/Dev/Install/client/images/logo.gif diff --git a/src/Dev/Install/InstallRequirements.php b/src/Dev/Install/InstallRequirements.php index b49d0e76b..889506338 100644 --- a/src/Dev/Install/InstallRequirements.php +++ b/src/Dev/Install/InstallRequirements.php @@ -16,7 +16,15 @@ use SilverStripe\Core\TempFolder; */ class InstallRequirements { - var $errors, $warnings, $tests; + protected $errors = []; + protected $warnings = []; + protected $tests = []; + + /** + * Backup of original ini settings + * @var array + */ + protected $originalIni = []; /** * Check the database configuration. These are done one after another @@ -172,7 +180,7 @@ class InstallRequirements */ public function check() { - $this->errors = null; + $this->errors = []; $isApache = $this->isApache(); $isIIS = $this->isIIS(); $webserver = $this->findWebserver(); @@ -376,7 +384,7 @@ class InstallRequirements 'PHP Configuration', 'date.timezone setting and validity', 'date.timezone option in php.ini must be set correctly.', - ini_get('date.timezone') + $this->getOriginalIni('date.timezone') )); $this->suggestClass('finfo', array( @@ -441,24 +449,33 @@ class InstallRequirements "PHP Configuration", "Memory allocation (PHP config option 'memory_limit')", "SilverStripe needs a minimum of 32M allocated to PHP, but recommends 64M.", - ini_get("memory_limit") + $this->getOriginalIni("memory_limit") )); return $this->errors; } + /** + * Get ini setting + * + * @param string $settingName + * @return mixed + */ + protected function getOriginalIni($settingName) + { + if (isset($this->originalIni[$settingName])) { + return $this->originalIni[$settingName]; + } + return ini_get($settingName); + } + public function suggestPHPSetting($settingName, $settingValues, $testDetails) { $this->testing($testDetails); // special case for display_errors, check the original value before // it was changed at the start of this script. - if ($settingName == 'display_errors') { - global $originalDisplayErrorsValue; - $val = $originalDisplayErrorsValue; - } else { - $val = ini_get($settingName); - } + $val = $this->getOriginalIni($settingName); if (!in_array($val, $settingValues) && $val != $settingValues) { $this->warning($testDetails, "$settingName is set to '$val' in php.ini. $testDetails[2]"); @@ -469,7 +486,7 @@ class InstallRequirements { $this->testing($testDetails); - $val = ini_get($settingName); + $val = $this->getOriginalIni($settingName); if (!in_array($val, $settingValues) && $val != $settingValues) { $this->error($testDetails, "$settingName is set to '$val' in php.ini. $testDetails[2]"); } @@ -496,8 +513,8 @@ class InstallRequirements public function requireDateTimezone($testDetails) { $this->testing($testDetails); - - $result = ini_get('date.timezone') && in_array(ini_get('date.timezone'), timezone_identifiers_list()); + $val = $this->getOriginalIni('date.timezone'); + $result = $val && in_array($val, timezone_identifiers_list()); if (!$result) { $this->error($testDetails); } @@ -508,20 +525,21 @@ class InstallRequirements $_SESSION['forcemem'] = false; $mem = $this->getPHPMemory(); + $memLimit = $this->getOriginalIni("memory_limit"); if ($mem < (64 * 1024 * 1024)) { ini_set('memory_limit', '64M'); $mem = $this->getPHPMemory(); - $testDetails[3] = ini_get("memory_limit"); + $testDetails[3] = $memLimit; } $this->testing($testDetails); if ($mem < $min && $mem > 0) { - $message = $testDetails[2] . " You only have " . ini_get("memory_limit") . " allocated"; + $message = $testDetails[2] . " You only have " . $memLimit . " allocated"; $this->error($testDetails, $message); return false; } elseif ($mem < $recommended && $mem > 0) { - $message = $testDetails[2] . " You only have " . ini_get("memory_limit") . " allocated"; + $message = $testDetails[2] . " You only have " . $memLimit . " allocated"; $this->warning($testDetails, $message); return false; } elseif ($mem == 0) { @@ -535,7 +553,7 @@ class InstallRequirements public function getPHPMemory() { - $memString = ini_get("memory_limit"); + $memString = $this->getOriginalIni("memory_limit"); switch (strtolower(substr($memString, -1))) { case "k": diff --git a/src/Dev/Install/Installer.php b/src/Dev/Install/Installer.php index 89ef1b915..f0fe2ca82 100644 --- a/src/Dev/Install/Installer.php +++ b/src/Dev/Install/Installer.php @@ -13,6 +13,10 @@ use SilverStripe\ORM\DatabaseAdmin; use SilverStripe\Security\DefaultAdminService; use SilverStripe\Security\Security; +/** + * SilverStripe CMS SilverStripe\Dev\Install\Installer + * This installer doesn't use any of the fancy SilverStripe stuff in case it's unsupported. + */ class Installer extends InstallRequirements { public function __construct() @@ -126,39 +130,25 @@ class Installer extends InstallRequirements global $usingEnv; if ($usingEnv) { $this->statusMessage("Setting up 'mysite/_config.php' for use with environment variables..."); - $this->writeToFile("mysite/_config.php", <<writeToFile("mysite/_config.php", "statusMessage("Setting up 'mysite/_config.php'..."); // Create databaseConfig $lines = array( - $lines[] = "\t'type' => '$type'" + $lines[] = " 'type' => '$type'" ); foreach ($dbConfig as $key => $value) { - $lines[] = "\t'{$key}' => '$value'"; + $lines[] = " '{$key}' => '$value'"; } $databaseConfigContent = implode(",\n", $lines); $this->writeToFile("mysite/_config.php", <<@#hb0D-s9pBWSRf}|3HJSf|!!O*5u9B z)9&%`th%=_d8crq!jHGlA^8LW000I6EC2ui0HFY+000F4(8x)vy*TU5yZ>M)j%0Ze zi>a<`>uyi+ymW2f)^Y$mf&aiDC{f_?9KxhBsWUoL%c!(PbUJ6#toE~TSgnVxcx*{D zzSaVHE%u_nP_{ftIKRJ%xgO}gg&ezQVVwX00%zwWwEDD z2Au>60tz$$?^*+eH3&R#&@bA72N0Vj@CP6ljV?w1JQZ+|(G`J^;~v^bKrq$;L$q2# z^XNicx0kLqriA&T;mmo6WcDgogCECrB@yX_R)A+slt&F#61qy>N~lKxNNq%bsZ$q5 zvwq1J=z%h;H>hUa8b~c6wl$WD#gD2f;DvUQ--EVh=VkPjCs;^rGYMT#iWhMR%#DmU>+e z9}7Gu&=gjq<=~z09J!vRYk);a;bpiRgjGuaYGgGEBqLEj$IMQVA2@p+|?k_~yU?Se3#PJi~=h-5xQXrkrz5oT$Q$ zdO)Zn4;Hvl;|Mttvd02Ro<^VnI=J`9Er8TF*oH1xi47nE4%q_`Oo|7H0A3pLWDV7I zbcmKmNy!46V;$0EXJ^)wCJ#WZagvUJ-9TP%j_lc)nqObYzQhA zqlMmS1*LizdJm!`IC=}DANu2CX6j%Xh^BXOIsz}_^qG^TT0M|w32NVCBUpC z;C9nF5&?I|0S?HDL#@*BstW-KHLI-u3chxO-a=CRd5x>o(gCY4pk~{GwGI*LZ40R0 z^z68eHmMAN=-Pm+Cjhk@#JiHPD=!W7E;8!9D;;Gjzb1rv&%OZHkgt6O|G*+N4Tzht z2?u{c)WbihE0V($mw;a{6=rO(R~`oeYsVqikfI;*wdY`5+9+i=G%_uO>XUGM@52%xv#3IMYJ-xDlAz~Enhl=t2W6rO_u z3jBb#-m?)fKme3iUikn%5P(4csi ze{MkSlxMNP=CWU|g6}pkz`y{j6A-{WyZ3H60x2l4yac!hkj3c;2oMkfdAshM^&p&{ zIt`c)Ai4nv)aAV84D5Y+=}=Ptdh}B)Q2A`Nw=B5g9Sop=_ydq%m*|yyUEmVu9EiYA z3dRcn`!-NNISh{hp%Vb}FmSruiQs^R8XVIS_`M7?P!P%zTm=?DJOPMKfEK7=09rGE z7U~arpWB}cJ7|F6wUB)TU;ys|fPm^zKmaXlg#;`;M8+28VZHG#bU^-Ti+q+IzlV7bnHE_sy$Mgl2UMdbxx08pS_^x$|opt!Mr z24LeAQ}Dst@i2^|%LpJX2S*T`kB}&&KpA0JISBv~h0(*C8`;>z%3V>2mQ3UXl1RBF zwqtooWTZl(m%i+YF%Gz60ON+Jz!0b~lNMN{9~%iJLQ-Id5WJ!)SxLDRyfT1}T%IOH z8A~EgqmQ^lVeA6%I{EPsB5PzC36(d-3CI$IDujYFDTh5-)^dIZP+<`bfPx7`uZNoK zqcwYJ0c3Wvo$s6_4FOoQ(7927*R-7h4#~`5im`^4tUv`@Q9%S`z@CKscdQLZqhpkF=kL9<47riC@DGeOEbrfFc9Xl!drF$h`9 z2{4ix5UU618Ca(d7PF(IX%~s;&tYP;hpHr;7AyBvzeX=}vwdE0I|&R0EKs!^N+TmR zdD*o#6^#MjIbTanFi7QX)VHz&sYkuJT|#nFt;i*(>!x8v+6L9UP;xC)Xh5aEIIK~8n@d4+4U1VG^3ReG;V1uiw?Gc{ zaFXAXWoYpl-vyVqciJ;*2Y*S(Y5cNr3x;U#FlT`ek1oU?AOH|Ys=s6IO(8kl-0Hq) z&KA}MZ^Y}QDk*R{?)BG%Z#D7=Z79C?31FBq<{~47w?x}QNrpG%G2F~*H_FPk%OBt} bm>KxxF>^r7X2t-T)6C{JyZOyXivR#Sa!Af4 literal 0 HcmV?d00001 diff --git a/src/Dev/Install/config-form.html b/src/Dev/Install/config-form.html index 2b920a752..df1dc48ea 100644 --- a/src/Dev/Install/config-form.html +++ b/src/Dev/Install/config-form.html @@ -6,7 +6,7 @@ SilverStripe CMS / Framework Installation - + @@ -29,13 +29,13 @@
- +

You aren't currently able to install the software. Please see below for details.
If you are having problems meeting the requirements, see the server requirements.

- -

Your php.ini file is located at

+ +

Your php.ini file is located at

@@ -252,7 +252,7 @@

Confirm Install Step 5 of 5

- +

You aren't currently able to install the software. Please see above for details.
If you are having problems meeting the requirements, see the server requirements page. diff --git a/src/Dev/Install/install5.php b/src/Dev/Install/install5.php index 5694aa242..8e92bcf89 100755 --- a/src/Dev/Install/install5.php +++ b/src/Dev/Install/install5.php @@ -11,20 +11,23 @@ namespace SilverStripe\Dev\Install; -/** - * SilverStripe CMS SilverStripe\Dev\Install\Installer - * This installer doesn't use any of the fancy SilverStripe stuff in case it's unsupported. - */ +// Back up original ini config +$originalIni = []; +$iniSet = function ($name, $value) use (&$originalIni) { + if (!isset($originalIni[$name])) { + $originalIni[$name] = ini_get($name); + } + ini_set($name, $value); +}; // speed up mysql_connect timeout if the server can't be found -ini_set('mysql.connect_timeout', 5); +$iniSet('mysql.connect_timeout', 5); // Don't die half was through installation; that does more harm than good -ini_set('max_execution_time', 0); +$iniSet('max_execution_time', 0); // set display_errors php setting to on to force installer to avoid blank screen of death. // get the original value so it can be used in PHP requirement checks later in this script. -$originalDisplayErrorsValue = ini_get('display_errors'); -ini_set('display_errors', '1'); +$iniSet('display_errors', '1'); error_reporting(E_ALL | E_STRICT); @@ -201,19 +204,22 @@ if (file_exists(FRAMEWORK_NAME . '/silverstripe_version')) { } // Check requirements -$req = new InstallRequirements(); +$req = new InstallRequirements($originalIni); $req->check(); -$webserverConfigFile = ''; if ($req->isIIS()) { $webserverConfigFile = 'web.config'; } else { $webserverConfigFile = '.htaccess'; } +$hasErrorOtherThanDatabase = false; +$hasOnlyWarnings = false; +$phpIniLocation = php_ini_loaded_file(); if ($req->hasErrors()) { $hasErrorOtherThanDatabase = true; - $phpIniLocation = php_ini_loaded_file(); +} elseif ($req->hasWarnings()) { + $hasOnlyWarnings = true; } $dbReq = new InstallRequirements(); @@ -237,6 +243,17 @@ if ($installFromCli && ($req->hasErrors() || $dbReq->hasErrors())) { exit(1); } +// config-form.html vars (placeholder to prevent deletion) +[ + $defaultLocale, + $silverstripe_version, + $locales, + $webserverConfigFile, + $hasErrorOtherThanDatabase, + $hasOnlyWarnings, // If warnings but not errors + $phpIniLocation +]; + if ((isset($_REQUEST['go']) || $installFromCli) && !$req->hasErrors() && !$dbReq->hasErrors() @@ -262,4 +279,3 @@ if ((isset($_REQUEST['go']) || $installFromCli) } else { include(__DIR__ . '/config-form.html'); } -