2012-02-12 53 views
0

我喜欢在上传到我的主机之前在本地在网站上工作。我在XAMPP安装中使用PHP/MYSQL服务器。XAMPP本地安装文件路径问题

我有XAMPP htdocs目录中的多个目录(每个项目一个)。每个项目通常至少有:

  1. 的header.php
  2. 的index.php
  3. footer.php
  4. 风格/ stylesheet.css中

这工作得很好,直到最近。

我现在正在研究更广泛的文件/目录结构。现在,当/about/index.php调用header.php时,样式表目录的路径没有指向正确的方向。图像路径不再指向正确的位置,因为它们都是相对路径。

我试着在每个路径的开头都使用“/”指向所有主目录,但在XAMPP中,主目录现在指的是localhost,而不是特定项目的目录。

解决方案是什么?有没有更好的方式在本地进行项目工作,这样我就可以简单地上传到我的网站主机,使用所有相关路径,而不必为网站的实时和开发版本更改它们?

回答

0

尝试,包括他们使用`DOCUMENT_ROOT为你的PHP文件,即:

include($_SERVER['DOCUMENT_ROOT']."folder/header.php"); 

这是假设,在浏览器中观察时,header.php中可以通过去http://127.0.0.1/folder/header.php

对于其他文件ound,如CSS,Javascript代码,你可以定义位置如下:

define("SCRIPTS_URL", "http://127.0.0.1/_scripts/"); 

包括上述在你的header.php文件,并确保包括header.php文件调用实际的HTML头之前,例如:只

$project = "project_x"; 
include($_SERVER['DOCUMENT_ROOT'].$project."/header.php"); 
define("SCRIPTS_URL", "http://127.0.0.1/".$project."/_scripts/"); 

如果你不喜欢它上面,那么你:

<?php 
include($_SERVER['DOCUMENT_ROOT']."folder/header.php"); 
?> 
<html> 
    <link rel="stylesheet" type="text/css" href="<?php echo SCRIPTS_URL; ?>stylesheet.css"> 
    ... etc etc ... 

您可以进一步结合define并建立目录部分,例如需要更改项目的变量,如果你看到...

更新

以下是index.php文件:

<?php 
// Make the header relative to index.php (as we don't know the project) - assume header is located at /_template/header.php and this file is located at /index.php [if, in future you have /content/index.php - then the below would be ../_template/header.php, etc] 
if(file_exists("_template/header.php")){ 
    include_once("_template/header.php"); 
} else { 
    die('Fatal error - no header found'); 
} 

?> 
<html> 
<head> 
    <link rel="stylesheet" type="text/css" href="<?php echo BASE_URL; ?>styles/stylesheet.css"> 
</head> 
<body> 
// Content goes here 
</body> 
</html> 
<?php 

if(file_exists(ROOTPATH."_template/footer.php")){ 
    include_once(ROOTPATH."_template/footer.php"); 
} 
?> 

而且header.php文件:

<?php 
define("PROJECT_NAME", "project_x"); 
define("ROOTPATH", $_SERVER['DOCUMENT_ROOT'].PROJECT_NAME."/"); 
define("BASE_URL", "http://".$_SERVER['SERVER_NAME']."/".PROJECT_NAME."/"); // $_SERVER['SERVER_NAME'] automatically puts 'localhost' or the domain name in automatically 
?> 

正如你所看到的 - 一切都在这个头文件中定义,当它被包含在index.php - 指数。php可以访问这些定义,就像定义完成后包含的任何其他文件一样(请注意,您不能覆盖定义并且不能定义两次相同的定义。)

+0

当我上传这BlueHost的,将127.0.0.1仍然有效? 问题是DOCUMENT_ROOT是本地主机/在我的XAMPP安装和Bluehost中的我的基础public_html文件夹。 – mehulkar 2012-02-13 00:20:53

+0

我添加了'define(“BASE_URL”,“http:// localhost/001_Current_Projects /”。$ project。“/”);'header.php的顶部。问题是,我的其余文件调用header.php作为使用'include('header.php')'的第一行。我可以在每个php文件的开始处添加define base_url代码,但是如何在包含代码中包含BASE_URL? – mehulkar 2012-02-13 02:23:32

+0

127.0.0.1与localhost相同 - 将这些更改为您的域名。如果您在使用模板系统时在整个脚本中调用了头文件,那么最好不要这样做,否则每次都必须进行大量更改 - 但是,您可以在需要时使用这些定义的变量(假设为'header.php'已包含在该特定页面被调用时) – MrJ 2012-02-13 07:54:47

0

你可以试试这个:

  • 创建通用配置文件
  • 定义BASE_URL不断到主目录(E 。G。 http://localhost/my_project/
  • 在模板中使用所有的链接和引用与BASE_URL

当你将部署,您将需要改变只有一个文件。

您也可以将BASE_PATH常量设置为您的目录(例如c:/ xampp/htdocs/my_project)。当试图包含来自各种子目录的脚本时,这可能很有用,而不会“猜测”本地路径。 (例如,包括BASE_PATH '模板/ my_template.php'。)

+0

如何创建一个通用配置文件? – mehulkar 2012-02-12 23:34:06

+0

您可以创建一个文件,例如'config.php',然后将该文件包含在顶部的所有脚本中:'include'config.php' – 2012-02-13 09:12:12

0

我定义一些常量解决这个问题:

# index.php 
# handles pretty much everything for the site 
define('DS', DIRECTORY_SEPARATOR); 
define('ROOT', dirname(__file__)); 
define('HOST', 'http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF'])); 

然后,对于包括我做这样的事情:

include ROOT . DS . 'directory' . DS . 'file_i_want.php'; 

对于CSS以及不适用,只需设置base URL in the markup可能会更容易。

2

this thread回答@Vladimir Dimitrov最简单的办法去如下(我只是复制在这里):

最简单的方法是在/ htdocs目录创建为每个站点文件夹不同的虚拟主机所以你将访问http:// mysite.local而不是http:// localhost/mysite

有两件事要做:1.编辑C:\ xampp \ apache \ conf \ extra \ httpd-vhosts.conf(默认情况下)添加如下内容:

<VirtualHost *:80> 
ServerName  mysite.local 
DocumentRoot C:/XAMPP/htdocs/mysite 
</VirtualHost> 
  1. 编辑C:\ WINDOWS \ SYSTEM32 \ DRIVERS \等\主机添加

    127.0.0.1 mysite.local

重启XAMPP并尝试http://mysite.local