【问题标题】:Defining the file Directory; xampp定义文件目录; xampp
【发布时间】:2012-03-25 00:44:40
【问题描述】:

我正在为 Mac 运行 XAMPP。

当我第一次开始使用 PHP 时,我会用一个变量来定义我的目录:

 $root = "http://localhost/~aaron/SiteFolder/"; // Dev
 $root = "http://www.sitename.com/";            // Live

这会奏效,但是根据我是在编辑开发站点还是实时站点,必须将其注释掉是一件非常烦人的事情。

我正在慢慢转变为 OOP 习惯,并希望尽可能提高效率。所以我试图用当前目录定义 ROOT,如下所示:

define("ROOT", dirname( __FILE__ ) . DIRECTORY_SEPARATOR);

这个输出:

/Users/aaron/Sites/SiteFolder/

当我在开发网站上工作时,这对我来说并不完全有用,因为我希望能够使用 ROOT 作为我的图像、文件等的前缀。

这显然行不通:

<img src="/Users/aaron/Sites/SiteFolder/images/charizard.png">

我需要做些什么来解决这个问题才能正确定义我的目录?

【问题讨论】:

  • 有什么阻止你使用相对路径?
  • 是否有预定义的函数来获取这些信息,还是我必须手动将其放入变量中?
  • 相对路径就是:相对的。假设您在/path/to/site/index.html 下有一个HTML 文件,在/path/to/site/images/image.png 下有一个图像,您可以通过简单地使用&lt;img src="images/image.png" /&gt; 来引用HTML 文件中的图像。或者换句话说:以引用文件夹为起点写入路径。

标签: php macos directory xampp


【解决方案1】:

根据您在我其他答案中的 cmets,您可以这样做:

您可以创建一个简单的安装页面,并询问用户他们计划托管您的网络应用程序的网址。

然后你可以在数据库或其他东西中设置这个变量。

很多网络应用都这样做:想到 Wordpress、Joomla。

编辑:

您也可以尝试使用 php $_SERVER 变量来构建 url。可以获取主机,端口,构建url。

不幸的是,如果有人决定将您的 Web 应用程序托管在子域域的根目录以外的地方,这可能会成为问题。

类似“http://domain/yourwebapphere/”的东西

如果没有用户指定,您将无法检测到它。如果您使用单个端点并使用 htaccess 重定向 url,您仍然需要在 htacess 中指定一个基本 url 才能正确重定向。

EDIT2:

好的,如果你真的想动态创建 url,这里有一些关于如何做的伪代码。

$protocol = parse_server_protocol($_SERVER['server_protocol']);
$port = $_SERVER['port']
$host = $_SERVER['server_name'];
//For use case where the app is not hosted at root of domain ("http://domain.com/test") for example
$urlroot = parse_root($_SERVER["REQUEST_URI"]);

$siteurl = buildRootUrl($protocol, $port, $host, $urlRoot);

//Now save that root url in the database.

如果您使用 htacess 创建干净的 url,您的应用需要知道如何在未托管在域根目录的实例中编写 baseurl。

【讨论】:

  • 我已经考虑过了,但后来我在 Drupal 中偶然发现了这个:define('DRUPAL_ROOT', getcwd()); 我想我现在的最终问题是我应该使用 getcwd();为实时站点,并为开发站点定义localhost
  • 我对 Drupal 了解不多。但我认为 DRUPAL_ROOT 不用于图像的 url 路径。 getcwd() 获取文件系统路径,这基本上就是您使用 dirname( __FILE__ ) . DIRECTORY_SEPARATOR 所做的
  • 那么dirname( __FILE__)有什么用呢?
  • dirname(__FILE__) 获取当前访问文件路径的文件系统。如果您在 index.php 上调用它,它应该与 getcwd() 相同,但我可能错了。我用一些伪代码对如何动态获取 url 进行了第二次编辑。您仍然需要在安装时执行此操作,并使用安装脚本将 URL 保存到数据库中。
【解决方案2】:

既然是图片标签的url,就不能把图片根目录定义为define('ROOT', '/images/')吗?

现在您正在获取目录路径。

编辑:

对不起,我有点误读了这个问题。假设您正在谈论公共资源,例如您想要链接到的网络服务器上的图像。

那么你可以将你的根定义为你的基本 url 吗?

define('ROOT', 'http://localhost/')define('ROOT', 'http://dev.sitename/')define('ROOT', 'http://localhost/testsite/')

【讨论】:

  • 我已经按照上面的方式定义了ROOT,结果是/Users/aaron/Sites/SiteFolder/images/charizard.png,这不是图片的有效来源。
  • 对,无效,因为那是路径。如果要显示图像,则需要图像的 url。我稍微误读了这个问题。因此,您需要创建您的根目录,即您正在使用的 url。我没有在上面列出,但你可以定义('ROOT','/')来做一个相对的url。
  • 嗯,我意识到你提到你曾经做过我刚才提到的事情。我不确定我理解你为什么这样做。您引用的文件夹是否在您的网络服务器的公共可访问目录中?
  • 是的,这可行,但我宁愿不必使用 URL。任何想法我可以如何利用 dir( file ) 或 getcwd();管理这个?
  • 为了回答您的问题,当我在浏览器中将自己定向到 /Users/aaron/Sites/SiteFolder/ 时,它会转到 file:///Users/aaron/Sites/SiteFolder。我可以做些什么来管理这个公共的可访问目录?
【解决方案3】:

正如 CodeIgniter 使用的那样,config.php 文件中有一个配置变量:

$config["base_path"] = "/projects/mysite/"; //relative to http://localhost

还有一个辅助函数:

function base_url(){
     return $config["base_path"];
}

在你的网址中你可以像使用它一样

如果你使用 smarty:

<img src="{base_url()}assets/images/1.jpg">

或直接php:

<img src="<?php echo base_url();?>assets/images/1.jpg">

当您将网站上传到网络时,只需将您的基本网址更改为:

$config["base_path"] = "/";

一切又开始工作了。

【讨论】:

  • 有没有办法让我永远不必使用getcwd();dirname( __file__ ) 编辑base_path?
  • 好吧,检查 $_SERVER["HTTP_HOST"] 并与 localhost 或 127.0.0.1 进行比较,然后使用 $_SERVER["DOCUMENT_ROOT"] 可能会有所帮助,但我认为手动定义更好。因为你不会改变很多次。
猜你喜欢
  • 2014-04-22
  • 2013-09-05
  • 2018-04-06
  • 1970-01-01
  • 1970-01-01
  • 2012-04-26
  • 2020-05-29
  • 2021-11-19
  • 2014-03-28
相关资源
最近更新 更多