我试图让siteurl 没有硬编码并将其存储在配置文件的常量内部,以便我可以在我的脚本中使用它,而不管嵌套/嵌套文件夹。此配置文件存储在网站主安装目录中的文件夹中。
示例:
在www.mydomain.com上安装网站
配置文件位于www.mydomain.com/my_folder/configuration.php
想要在configuration.php文件中声明一个常量,以便它始终动态获取已安装的路径,而无需对其进行硬编码。所以define("MY_SITE_URL", ???? )
什么应该取代????在上面的代码中,即使我的主网站安装在嵌套文件夹中也能正常工作?
示例:所有网页都会在文件开头包含相同的configuration.php作为要求
在网站1中安装网站:
网站的根目录: www.mydomain.com/demos/site1 /
配置位置: www.mydomain.com/demos/site1/my_folder/configuration.php
子文件夹: www.mydomain.com/demos/site1/1/index.php
在index.php中回显MY_SITE_URL应该给出www.mydomain.com/demos/site1 /
子文件夹: www.mydomain.com/demos/site1/1/2/index.php
配置位置: www.mydomain.com/demos/site1/my_folder/configuration.php
在index.php中回显MY_SITE_URL应该给出www.mydomain.com/demos/site1 /
在网站2中安装网站:
网站的根目录: www.mydomain.com/demos/site2 /
配置位置: www.mydomain.com/demos/site2/my_folder/configuration.php
子文件夹: www.mydomain.com/demos/site2/1/index.php
在index.php中回显MY_SITE_URL应该给出www.mydomain.com/demos/site2 /
子文件夹: www.mydomain.com/demos/site2/1/2/index.php
配置位置: www.mydomain.com/demos/site2/my_folder/configuration.php
在index.php中回显MY_SITE_URL应该给出www.mydomain.com/demos/site2 /
请注意,顶级域名可以更改。这意味着,在www.mydomain.tk,www.mydomai.org,www.mydomain.net,www.mydomain.co.ca等上安装网站不应该使代码无用。
我有多远:
我试图整理一个脚本。我几乎到了那里,但不是100%。这是:
function domain_url()
{
$pageURL = 'http';
if(isset($_SERVER["HTTPS"]))
if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
$pageURL .= "://";
if ($_SERVER["SERVER_PORT"] != "80")
{
$pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
}
else
{
$pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
}
//Remove any GET params from url
$remmove_get = strtok($pageURL, '?');
//Removes trailing slash only at the end of string. This slash is received only when accessing a page within sub folders.
$pageURL = preg_replace('{/$}', '', $remmove_get);
//Remove page name
$pageURL = dirname($pageURL);
return $pageURL;
}
define("MY_SITE_URL", domain_url().'/');
我目前的代码问题:
在www.mydomain.com/demos/site1/和www.mydomain.com/demos/site1/1/上运行代码,MY_SITE_URL为www.mydomain.com/demos/site1/,这是正确的。
但是当我在www.mydomain.com/demos/site1/1/2/index.php上运行代码时,回显MY_SITE_URL会给我 www.mydomain.com/demos/site1/1 / 实际上我想要的时候: www.mydomain.com/demos/site1 /
如何解决这个问题?
答案 0 :(得分:0)
如果您总是想要第二个目录,那么您可以使用
$boom = explode("/", $_SERVER['REQUEST_URI']);
$domain_url = $_SERVER["SERVER_NAME"].'/'.$boom[1].'/'.$boom[2];
echo $domain_url;
如果站点不在第二个目录中,您可以使用:(此代码应该更简洁一点)。只需将site1替换为站点名称
即可$site_search = "site1";
$url = $_SERVER["SERVER_NAME"].$_SERVER['REQUEST_URI'];
$domain_url = substr($url, 0, strpos($url, $site_search)+strlen($site_search));;
echo $domain_url;
<强>更新强> 这将获得/ my_folder
之前的所有内容的网址$domain_url = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
$domain_url = substr($url, 0, strpos($url, '/my_folder'));
define("MY_SITE_URL", domain_url().'/');
在旁注中,您应该尝试Code-Igniter框架。该框架使这种事情变得非常容易。
答案 1 :(得分:0)
试试这个:
define('PROTOCOL', array_key_exists('HTTPS', $_SERVER) && $_SERVER['HTTPS'] == 'on' ? 'https://' : 'http://');
define('DOMAIN', $_SERVER['HTTP_HOST']);
define('FOLDER', (dirname($_SERVER['SCRIPT_NAME']) == '/' ? null : dirname($_SERVER['SCRIPT_NAME'])) . '/');
define('BASE_URL', PROTOCOL . DOMAIN . dirname(FOLDER));
这4个常数应涵盖您所寻找的内容。我在这篇文章中写了更多关于这一点的内容 - http://bit.ly/MPls0E
答案 2 :(得分:0)
虽然我知道这是一篇非常老的文章,但它使我朝着答案的方向前进。这是我的结果。我希望这对以后的人有所帮助。
这将为您提供安装目录:
$path = 'FindMe.locate';
while(! realpath($path)){
$path = '../' . $path;
}
define('DIR_FS_ROOT', dirname(realpath($path)) . '/');
对于我简单使用的网址:
define('HTTP_ROOT', 'http://' . $_SERVER["SERVER_NAME"] . ':8080/');
这为我提供了基本目录,然后我只需添加要查找的文件即可。
echo HTTP_ROOT . 'images/logo.png';
echo DIR_FS_ROOT . 'images/logo.png';
通过这种方式,您可以在服务器端或客户端使用代码,而不必对其进行硬编码。 :-)