mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
FIX Environment file finder logic
Fixing the logic that searches for environment files so that warnings due to open_basedir are suppressed and both the 'realdir' and the server path are spidered for the environment file.
This commit is contained in:
parent
abad856534
commit
bc9567c9ef
@ -44,24 +44,46 @@
|
|||||||
error_reporting(E_ALL | E_STRICT);
|
error_reporting(E_ALL | E_STRICT);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Include _ss_environment.php files
|
* Include _ss_environment.php file
|
||||||
*/
|
*/
|
||||||
//define the name of the environment file
|
//define the name of the environment file
|
||||||
$envFile = '_ss_environment.php';
|
$envFile = '_ss_environment.php';
|
||||||
//define the dir to start scanning from (have to add the trailing slash)
|
//define the dirs to start scanning from (have to add the trailing slash)
|
||||||
$dir = '.';
|
// we're going to check the realpath AND the path as the script sees it
|
||||||
//check this dir and every parent dir (until we hit the base of the drive)
|
$dirsToCheck = array(
|
||||||
do {
|
realpath('.'),
|
||||||
$dir = realpath($dir) . '/';
|
dirname($_SERVER['SCRIPT_FILENAME'])
|
||||||
|
);
|
||||||
|
//if they are the same, remove one of them
|
||||||
|
if ($dirsToCheck[0] == $dirsToCheck[1]) {
|
||||||
|
unset($dirsToCheck[1]);
|
||||||
|
}
|
||||||
|
foreach ($dirsToCheck as $dir) {
|
||||||
|
//check this dir and every parent dir (until we hit the base of the drive)
|
||||||
|
// or until we hit a dir we can't read
|
||||||
|
do {
|
||||||
|
//add the trailing slash we need to concatenate properly
|
||||||
|
$dir .= DIRECTORY_SEPARATOR;
|
||||||
|
//if it's readable, go ahead
|
||||||
|
if (@is_readable($dir)) {
|
||||||
//if the file exists, then we include it, set relevant vars and break out
|
//if the file exists, then we include it, set relevant vars and break out
|
||||||
if (file_exists($dir . $envFile)) {
|
if (file_exists($dir . $envFile)) {
|
||||||
define('SS_ENVIRONMENT_FILE', $dir . $envFile);
|
define('SS_ENVIRONMENT_FILE', $dir . $envFile);
|
||||||
include_once(SS_ENVIRONMENT_FILE);
|
include_once(SS_ENVIRONMENT_FILE);
|
||||||
|
//break out of BOTH loops because we found the $envFile
|
||||||
|
break(2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
//break out of the while loop, we can't read the dir
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
//here we need to check that the real path of the last dir and the next one are
|
//go up a directory
|
||||||
// not the same, if they are, we have hit the root of the drive
|
$dir = dirname($dir);
|
||||||
} while (realpath($dir) != realpath($dir .= '../'));
|
//here we need to check that the path of the last dir and the next one are
|
||||||
|
// not the same, if they are, we have hit the root of the drive
|
||||||
|
} while (dirname($dir) != $dir);
|
||||||
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
// GLOBALS AND DEFINE SETTING
|
// GLOBALS AND DEFINE SETTING
|
||||||
|
@ -28,27 +28,47 @@ if (function_exists('session_start')) {
|
|||||||
session_start();
|
session_start();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Include environment files
|
/**
|
||||||
$usingEnv = false;
|
* Include _ss_environment.php file
|
||||||
$envFileExists = false;
|
*/
|
||||||
//define the name of the environment file
|
//define the name of the environment file
|
||||||
$envFile = '_ss_environment.php';
|
$envFile = '_ss_environment.php';
|
||||||
//define the dir to start scanning from
|
//define the dirs to start scanning from (have to add the trailing slash)
|
||||||
$dir = '.';
|
// we're going to check the realpath AND the path as the script sees it
|
||||||
//check this dir and every parent dir (until we hit the base of the drive)
|
$dirsToCheck = array(
|
||||||
do {
|
realpath('.'),
|
||||||
$dir = realpath($dir) . '/';
|
dirname($_SERVER['SCRIPT_FILENAME'])
|
||||||
|
);
|
||||||
|
//if they are the same, remove one of them
|
||||||
|
if ($dirsToCheck[0] == $dirsToCheck[1]) {
|
||||||
|
unset($dirsToCheck[1]);
|
||||||
|
}
|
||||||
|
foreach ($dirsToCheck as $dir) {
|
||||||
|
//check this dir and every parent dir (until we hit the base of the drive)
|
||||||
|
// or until we hit a dir we can't read
|
||||||
|
do {
|
||||||
|
//add the trailing slash we need to concatenate properly
|
||||||
|
$dir .= DIRECTORY_SEPARATOR;
|
||||||
|
//if it's readable, go ahead
|
||||||
|
if (@is_readable($dir)) {
|
||||||
//if the file exists, then we include it, set relevant vars and break out
|
//if the file exists, then we include it, set relevant vars and break out
|
||||||
if (file_exists($dir . $envFile)) {
|
if (file_exists($dir . $envFile)) {
|
||||||
include_once($dir . $envFile);
|
define('SS_ENVIRONMENT_FILE', $dir . $envFile);
|
||||||
$envFileExists = true;
|
include_once(SS_ENVIRONMENT_FILE);
|
||||||
//legacy variable assignment
|
//break out of BOTH loops because we found the $envFile
|
||||||
$usingEnv = true;
|
break(2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
//break out of the while loop, we can't read the dir
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
//here we need to check that the real path of the last dir and the next one are
|
//go up a directory
|
||||||
// not the same, if they are, we have hit the root of the drive
|
$dir = dirname($dir);
|
||||||
} while (realpath($dir) != realpath($dir .= '../'));
|
//here we need to check that the path of the last dir and the next one are
|
||||||
|
// not the same, if they are, we have hit the root of the drive
|
||||||
|
} while (dirname($dir) != $dir);
|
||||||
|
}
|
||||||
|
|
||||||
if($envFileExists) {
|
if($envFileExists) {
|
||||||
if(!empty($_REQUEST['useEnv'])) {
|
if(!empty($_REQUEST['useEnv'])) {
|
||||||
|
Loading…
Reference in New Issue
Block a user