晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
| DIR:/proc/self/root/proc/thread-self/root/opt/cpguard/app/scripts/ |
| Current File : //proc/self/root/proc/thread-self/root/opt/cpguard/app/scripts/cyberpanel_domain_list.php |
#!/opt/cpguard/cpg-php-fpm/bin/php
<?php
## DO NOT CUSTOMISE THIS FILE
## This file may be updated during software update
## Please make a copy of the file for customising it
ini_set("display_errors", false);
$domain_list = shell_exec('/usr/bin/cyberpanel listWebsitesJson');
if (!empty($domain_list)) {
$domain_list = json_decode(trim(stripslashes($domain_list), "\"\n"));
}
if (file_exists('/usr/local/lsws/conf/httpd.conf')) {
$docroots = parse_litespeed_config('/usr/local/lsws/conf/httpd.conf');
} else if (file_exists('/usr/local/lsws/conf/httpd_config.conf')) {
$docroots = parse_openlitespeed_conf('/usr/local/lsws/conf/httpd_config.conf');
}
$result = [];
if (is_array($domain_list)) {
foreach ($domain_list as $key => $values) {
$temp = '/home/' . $values->domain . '/public_html';
$result[] = [
'domain' => $values->domain,
'user' => $values->admin,
'docroot' => $docroots[$values->domain] ?? (file_exists($temp) ? $temp : '')
];
}
echo json_encode($result, JSON_PRETTY_PRINT);
} else {
echo '[]';
}
function parse_openlitespeed_conf($conf_file)
{
$result = [];
$conf_contents = file_get_contents($conf_file);
if (preg_match_all('/virtualHost\s([^\s]+)\s.+\n\s*vhRoot\s+([^\n]+)$/mi', $conf_contents, $matches, PREG_SET_ORDER)) {
foreach ($matches as $domain) {
$result[$domain[1]] = str_replace('$VH_NAME', $domain[1], $domain[2]) . '/public_html';
}
}
return $result;
}
function parse_litespeed_config($conf_files, $server_root = NULL)
{
$result = [];
$conf_files = glob($conf_files); //to be able to accept paths like /usr/local/lsws/conf/vhosts/*/vhost.conf
foreach ($conf_files as $conf_file) {
//Read and clean the configuration file
$conf = file_get_contents($conf_file);
//Gather all docroots in this conf file
if (!empty($conf) && preg_match_all('/^\s*\<VirtualHost(.*?)\<\/VirtualHost\>/ms', $conf, $vhost_matches)) {
foreach ($vhost_matches[1] as $vhost) {
preg_match('/^\s*ServerName\s+(.+)$/m', $vhost, $domain);
preg_match('/^\s*DocumentRoot\s+(.+)$/m', $vhost, $docroot);
if (!empty($domain[1]) && !empty($docroot[1]) && file_exists($docroot[1])) {
$result[$domain[1]] = $docroot[1];
}
}
}
//Recursively loop included files
foreach (get_litespeed_includes($conf, $conf_file, $server_root) as $included_conf) {
$result = array_merge($result, parse_litespeed_config($included_conf, $server_root));
}
}
return $result;
}
function get_litespeed_includes(&$conf, &$conf_file, &$server_root)
{
$result = [];
//Now parse all included conf files
if (preg_match('/^\s*ServerRoot\s+\"(.+)\"$/m', $conf, $matches)) {
//If ServerRoot is set then relative paths are based on this value
$root = $server_root = $matches[1];
} else {
$root = dirname($conf_file);
}
$ingored_confs = ['mods-enabled/', 'conf-enabled/'];
preg_match_all('/^\s*(IncludeOptional|Include)\s+(.+)$/m', $conf, $include_paths);
foreach ($include_paths[2] ?? [] as $path) {
foreach ($ingored_confs as $needle) {
if (strpos($path, $needle) === 0) {
continue;
}
}
if ($path[0] !== '/') {
$path = $server_root === NULL ? "$root/$path" : "$server_root/$path";
}
$result[] = $path;
}
return $result;
} |