forked from zgr024/skyphp
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsky.php
executable file
·158 lines (124 loc) · 4.56 KB
/
sky.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
<?php
# start the stopwatch
$sky_start_time = microtime(true);
# check requirements
if (!$skyphp_storage_path && !$sky_media_local_path) {
die('You must configure $skyphp_storage_path in index.php.');
}
if (!is_array($codebase_path_arr) || !$codebase_path_arr) {
die('Missing $codebase_path_arr on index.php');
}
# backward compatibility paths
$sky_install_path = ($sky_install_path) ?: $skyphp_codebase_path;
if ($skyphp_storage_path) {
if (substr($skyphp_storage_path,-1) !='/') $skyphp_storage_path .= '/';
$sky_media_local_path = $skyphp_storage_path . 'media';
} else if ($sky_media_local_path) {
$skyphp_storage_path = $sky_media_local_path . '/';
}
# make sure codebase paths end with a slash
$codebase_path_arr = array_map(function($path){
return rtrim($path, '/') . '/';
}, $codebase_path_arr);
# add codebases to include path
$add_include_path = implode(PATH_SEPARATOR, $codebase_path_arr);
set_include_path($add_include_path);
# if down for maintenance
if ($down_for_maintenance) {
include 'pages/503.php';
die;
}
# TODO: clean out functions.inc.php
include_once 'lib/core/functions.inc.php';
# parse the url for the folders
$uri = call_user_func(function($t) {
return array('path' => $t[0], 'query' => $t[1]);
}, explode('?', $_SERVER['REQUEST_URI']));
// If the url ends with a single quote, redirect back to main page
if(strpos($uri["path"], "'") !== FALSE)
{
redirect("/");
/*
The code below is my alternative. Not sure which is better:
redirect("/");
die();
OR
$uri["path"] = str_replace(array("'", "\""), "", $uri["path"]);
*/
}
# check if quick serve
$check_paths = array(
array('path' => null, 'is_file' => true), # checks for exact file
array('path' => '/index.html'), # if folder contains index.html
array('path' => '/index.htm') # if folder contains index.htm
);
foreach ($check_paths as $p) {
$path = $uri['path'] . $p['path'];
if (!file_exists_incpath($path, $p['is_file'])) continue;
if (!$p['is_file']) {
add_trailing_slash();
$_SERVER['REQUEST_URI'] = '/' . $path;
}
if (substr($path,-4) == '.php' && substr($path, 0, 6) != 'pages/') {
# if serving a php file not in pages/
$_SERVER['REQUEST_URI'] = $path;
include substr($path, 1);
} else {
# serve file with correct mime-type
include 'lib/core/quick-serve/file.php';
}
exit;
}
$path = null;
##########################################################################################
# if we got this far we are serving a page #
##########################################################################################
# auto-loader
include 'lib/core/hooks/__autoload/__autoload.php';
# include the config.php of each codebase;
# default skyphp config values will be overwritten by higher level codebases
foreach ( array_reverse( $codebase_path_arr ) as $codebase_path ) {
$codebase_config = $codebase_path . 'config.php';
if (!file_exists($codebase_config)) continue;
$includes = array();
include $codebase_config;
if (!is_array($includes)) continue;
foreach ($includes as $include) include_once $include;
}
# exception handler
set_exception_handler(array('\\Sky\\ErrorHandler', 'run'));
# canonical redirect hook / session compat / timezone set
include 'lib/core/hooks/env-ini/env-ini.php';
# web services hooks
include 'lib/core/hooks/web-services/mem-connect.php';
include 'lib/core/hooks/web-services/db-connect.php';
include 'lib/core/hooks/web-services/media-connect.php';
# create page router
$router = new \Sky\PageRouter(array(
'codebase_paths' => $codebase_path_arr,
'db' => $db,
'page_path_404' => $page_404,
'page_path_default' => $default_page,
'uri' => $uri['path']
));
# instantiate page using PageRouter
$p = new \Sky\Page($router->getPageProperties());
$p->sky_start_time = $sky_start_time;
$protocol = 'http';
if ($server_ssl_header && $_SERVER[$server_ssl_header]) $protocol = 'https';
if ($_SERVER['HTTPS']) $protocol = 'https';
$p->protocol = $_SERVER['HTTPS'] ? 'https' : 'http';
# create session if necessary
include 'lib/core/hooks/web-services/session.php';
# $access_groups to global (for authenticate hook)
# authentication hook
$access_groups = $router->settings['access_groups'];
include 'lib/core/hooks/login/authenticate.php';
# run the page
$p->run();
# close the read and write database connections
if ($db_host) {
if ($db) $db->Close();
if ($dbw) $dbw->Close();
else if (!$p->is_ajax_request) echo $master_db_connect_error;
}