【问题标题】:how to specify file paths in webpage so the same file works on server and localhost?如何在网页中指定文件路径,以便相同的文件在服务器和本地主机上工作?
【发布时间】:2016-06-02 21:35:20
【问题描述】:

我正在尝试在本地开发一个网站,最终通过 FTP 连接到我的服务器。我的index.php 文件包含以下行:

 <?php include($_SERVER['DOCUMENT_ROOT'] . "/includes/header.php");?>

我们的想法是在网站的每个页面中包含一个单独的 header.php 文件。此代码适用于服务器,但不适用于 localhost,因为$_SERVER['DOCUMENT_ROOT'] . 部分仅对服务器有效。

有没有办法让服务器和本地主机的路径都正确,所以从本地主机移动到服务器时我不需要编辑每个网页?

以上内容与 PHP 有关,但我还需要针对 HTML 代码回答相同的问题,例如:

<img src="/images/logo.png" alt="site name" />

从服务器的 Web 根目录开始。这会在 localhost 上工作吗?

我假设这一定是一种常见的需求,并且想知道传统智慧是什么。我没有使用框架(只是一个文本编辑器)。提前感谢任何 cmets/帮助。

更新

我在这里看到一个类似的问题,

How to set root folder for PHP include files

虽然答案与使用 config.php 文件有关,但我没有该文件,也没有涉及 HTML 部分。

【问题讨论】:

  • $_SERVER['DOCUMENT_ROOT'] 怎么可能只在一台服务器上有效,而在另一台服务器上无效?
  • 其他服务器,我认为你的意思是本地主机。它只是指向不同的位置(例如,根不同,因此不能对 localhost 和服务器使用相同的代码)。
  • 域的文件是否存储在本地服务器上的 Web 根目录的子目录中,而不是生产服务器上?反之亦然?
  • 不,看起来 localhost (Mac Mavericks) 上的 DOCUMENT_ROOT 指向 /Library/WebServer/Documents,我的文件存储在 /Users/myname/Sites/ 文件夹中。
  • 这毫无意义。文件怎么可能不在 DOCUMENT_ROOT 中?

标签: javascript php html css


【解决方案1】:

只需使用../ 回到您的文件层次结构,次数与​​您拥有文件夹的次数一样多。

<?php include "../../includes/header.php";?>

在 html 中相同

<img src="../../images/logo.png" alt="site name" />

如果您的文件结构很大,请尝试在本地主机和服务器的单独文件中使用这样的基础:

本地主机:&lt;?php $base= 'http://localhost';?&gt;

和服务器:&lt;?php $base= $_SERVER['DOCUMENT_ROOT'];?&gt;

然后在你的所有页面中你都可以include("../../base.php");

这样您只需在每个页面中输入../一次

【讨论】:

  • 我明白你在说什么。但是,对于大型目录结构,有没有办法使用绝对路径?
  • 我不这么认为,您可能想等待其他人提出解决方案,但我从未听说过更好的方法。对不起
  • 感谢@SamApostel,这很可能是最好的方法。不确定,但它非常简单直观。谢谢
  • 等等,我可能找到了更好的方法
  • 我这里没有采用第二种方法。你能再解释一下吗?对于 localhost 和服务器,有一个单独的 base.php 文件具有不同的 $base 定义。我将该文件包含在每个网页的 php 文件中,因此变量 $base 可以在每个网页中使用。我需要在包含发生的每个页面上更新一次../../。此后在网页上,当我想使用绝对路径时,我只需插入&lt;?php $base . ?&gt;。例如,&lt;?php include($base . "/includes/header.php");?&gt; 或 &lt;img src="&lt;?php $base . ?&gt;/images/logo.png" alt="site name" /&gt;。对吗?
【解决方案2】:

我通常使用 Sam 之类的方法,因为它简单且可移植,但在更大、更复杂的应用程序中可能会失败。对于这些情况,您可以在配置文件中定义路径。您仍然需要从脚本中知道该文件的相对路径,但之后一切都会变得简单。

//config.php
define("DOCPATH","c:/dev");
define("ROOTURL","http://localhost/");

//your file
include_once("../../config.php");
set_include_path(DOCPATH);

然后你就可以在你的图片src中使用php了

<img src="<?php echo ROOTURL;?>images/logo.png" alt="site name" />

【讨论】:

  • 不确定我是否理解。是否有两个配置文件,一个用于服务器,另一个用于 localhost?何时使用 DOCPATH 与 ROOTURL?
  • 只有一个文件。上传到服务器时更改这些值。自动化这些值会很好,但有时硬编码更安全。
  • 我喜欢在我的应用程序中设置一些东西,所以在初始化时我会根据环境变量设置应用程序级别的变量。它可以像根据 URL 设置应用程序变量一样简单,因为 URL 将定义环境。
  • 何时使用 DOCPATH 与 ROOTURL?对不起,如果这是一个愚蠢的问题。
  • DOCPATH 用于使用 PHP 访问文件系统文件。 ROOTURL 用于您的 HTML 引用。
猜你喜欢
  • 1970-01-01
  • 2011-10-23
  • 2021-11-18
  • 2016-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多