mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
a30532becb
git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/trunk@63204 467b73ca-7a2a-4603-9d3b-597d59a354a9
172 lines
5.0 KiB
PHP
Executable File
172 lines
5.0 KiB
PHP
Executable File
#!/usr/bin/php5
|
|
<?php
|
|
|
|
if(isset($_SERVER['HTTP_HOST'])) {
|
|
echo "cli-script.php can't be run from a web request, you have to run it on the command-line.";
|
|
die();
|
|
}
|
|
|
|
/**
|
|
* File similar to main.php designed for command-line scripts
|
|
*
|
|
* This file lets you execute Sapphire requests from the command-line. The URL is passed as the first argument to the scripts.
|
|
*
|
|
* @package sapphire
|
|
* @subpackage core
|
|
*/
|
|
|
|
/**
|
|
* Process arguments and load them into the $_GET and $_REQUEST arrays
|
|
* For example,
|
|
* sake my/url somearg otherarg key=val --otherkey=val third=val&fourth=val
|
|
*
|
|
* Will result int he following get data:
|
|
* args => array('somearg', 'otherarg'),
|
|
* key => val
|
|
* otherkey => val
|
|
* third => val
|
|
* fourth => val
|
|
*/
|
|
if(isset($_SERVER['argv'][2])) {
|
|
$args = array_slice($_SERVER['argv'],2);
|
|
$_GET = array();
|
|
foreach($args as $arg) {
|
|
if(strpos($arg,'=') == false) {
|
|
$_GET['args'][] = $arg;
|
|
} else {
|
|
$newItems = parse_str( (substr($arg,0,2) == '--') ? substr($arg,2) : $arg );
|
|
$_GET = array_merge($_GET, $newItems);
|
|
}
|
|
}
|
|
$_REQUEST = $_GET;
|
|
}
|
|
|
|
$_SERVER['SCRIPT_FILENAME'] = __FILE__;
|
|
chdir(dirname($_SERVER['SCRIPT_FILENAME']));
|
|
|
|
/**
|
|
* Define system paths
|
|
*/
|
|
define('BASE_PATH', dirname(dirname($_SERVER['SCRIPT_FILENAME'])));
|
|
define('BASE_URL', dirname(dirname($_SERVER['SCRIPT_NAME'])));
|
|
define('MODULES_DIR', 'modules');
|
|
define('MODULES_PATH', BASE_PATH . '/' . MODULES_DIR);
|
|
define('THIRDPARTY_DIR', 'jsparty');
|
|
define('THIRDPARTY_PATH', BASE_PATH . '/' . THIRDPARTY_DIR);
|
|
define('THEMES_DIR', 'themes');
|
|
define('THEMES_PATH', BASE_PATH . '/' . THEMES_DIR);
|
|
define('SAPPHIRE_DIR', 'sapphire');
|
|
define('SAPPHIRE_PATH', BASE_PATH . '/' . SAPPHIRE_DIR);
|
|
define('CMS_DIR', 'cms');
|
|
define('CMS_PATH', BASE_PATH . '/' . CMS_DIR);
|
|
define('ASSETS_DIR', 'assets');
|
|
define('ASSETS_PATH', BASE_PATH . '/' . ASSETS_DIR);
|
|
|
|
/**
|
|
* Include Sapphire's core code
|
|
*/
|
|
require_once("core/Core.php");
|
|
|
|
/**
|
|
* Priorities definition. These constants are used in calls to _t() as an optional argument
|
|
*/
|
|
define('PR_HIGH',100);
|
|
define('PR_MEDIUM',50);
|
|
define('PR_LOW',10);
|
|
|
|
header("Content-type: text/html; charset=\"utf-8\"");
|
|
if(function_exists('mb_http_output')) {
|
|
mb_http_output('UTF-8');
|
|
mb_internal_encoding('UTF-8');
|
|
}
|
|
|
|
// figure out the server configuration
|
|
if( preg_match( '/(test\.totallydigital\.co\.nz|dev\.totallydigital\.co\.nz\/test)(.*)/', $_SERVER['SCRIPT_FILENAME'], $nameMatch ) ) {
|
|
$_SERVER['SCRIPT_NAME'] = $nameMatch[2];
|
|
$_SERVER['HTTP_HOST'] = $nameMatch[1];
|
|
$envType = 'test';
|
|
} elseif( preg_match( '/dev\.totallydigital\.co\.nz(.*)/', $_SERVER['SCRIPT_FILENAME'], $nameMatch ) ) {
|
|
$_SERVER['SCRIPT_NAME'] = $nameMatch[1];
|
|
$envType = 'dev';
|
|
} elseif( preg_match( '/\/sites\/[^\/]+\/www(.*)/', $_SERVER['SCRIPT_FILENAME'], $nameMatch ) ) {
|
|
$_SERVER['SCRIPT_NAME'] = $nameMatch[1];
|
|
$envType = 'live';
|
|
} elseif( preg_match( '/\/sites\/[^\/]+(.*)/', $_SERVER['SCRIPT_FILENAME'], $nameMatch ) ) {
|
|
$_SERVER['SCRIPT_NAME'] = $nameMatch[1];
|
|
} elseif(isset($_SERVER['SCRIPT_NAME'])) {
|
|
$envType = 'live';
|
|
} else {
|
|
echo "Error: could not determine server configuration {$_SERVER['SCRIPT_FILENAME']}\n";
|
|
exit();
|
|
}
|
|
|
|
// set request method (doesn't allow POST through cli)
|
|
$_SERVER['REQUEST_METHOD'] = "GET";
|
|
|
|
if($_REQUEST && get_magic_quotes_gpc()) {
|
|
stripslashes_recursively($_REQUEST);
|
|
}
|
|
|
|
if(isset($_REQUEST['trace'])) apd_set_pprof_trace();
|
|
|
|
require_once("core/ManifestBuilder.php");
|
|
require_once("core/ClassInfo.php");
|
|
require_once('core/Object.php');
|
|
require_once('core/control/Director.php');
|
|
require_once('filesystem/Filesystem.php');
|
|
require_once("core/Session.php");
|
|
|
|
Session::start();
|
|
|
|
$envFiles = array('../_ss_environment.php', '../../_ss_environment.php', '../../../_ss_environment.php');
|
|
foreach($envFiles as $envFile) {
|
|
if(file_exists($envFile)) {
|
|
include($envFile);
|
|
break;
|
|
}
|
|
}
|
|
|
|
// Find the URL of this script
|
|
if(isset($_FILE_TO_URL_MAPPING)) {
|
|
$fullPath = $testPath = $_SERVER['SCRIPT_FILENAME'];
|
|
while($testPath && $testPath != "/") {
|
|
if(isset($_FILE_TO_URL_MAPPING[$testPath])) {
|
|
$url = $_FILE_TO_URL_MAPPING[$testPath] . substr($fullPath,strlen($testPath));
|
|
$_SERVER['HTTP_HOST'] = parse_url($url, PHP_URL_HOST);
|
|
$_SERVER['SCRIPT_NAME'] = parse_url($url, PHP_URL_PATH);
|
|
$_SERVER['REQUEST_PORT'] = parse_url($url, PHP_URL_PORT);
|
|
break;
|
|
}
|
|
$testPath = dirname($testPath);
|
|
}
|
|
}
|
|
|
|
|
|
if(ManifestBuilder::staleManifest()){
|
|
ManifestBuilder::compileManifest();
|
|
}
|
|
|
|
require_once(MANIFEST_FILE);
|
|
|
|
if(isset($_GET['debugmanifest'])) Debug::show(file_get_contents(MANIFEST_FILE));
|
|
|
|
//if(!isset(Director::$environment_type) && $envType) Director::set_environment_type($envType);
|
|
|
|
// Load error handlers
|
|
Debug::loadErrorHandlers();
|
|
|
|
// Connect to database
|
|
require_once("core/model/DB.php");
|
|
|
|
DB::connect($databaseConfig);
|
|
|
|
|
|
// Get the request URL
|
|
$url = $_SERVER['argv'][1];
|
|
$_SERVER['REQUEST_URI'] = "/$url";
|
|
|
|
// Direct away - this is the "main" function, that hands control to the apporopriate controllerx
|
|
Director::direct($url);
|
|
|
|
?>
|