【问题标题】:How to let absolute path work on both local and remote servers?如何让绝对路径同时在本地和远程服务器上工作?
【发布时间】:2015-08-11 17:01:54
【问题描述】:

我正在创建一个网站,该网站必须在本地服务器上进行编辑,然后再上传到远程服务器。我在本地服务器上使用绝对路径,但是当我将其上传到远程服务器时,链接不再起作用。看来我只能使用相对或绝对,不能同时使用。

我希望脚本可以在本地和远程服务器上运行。本地显然是用于编辑(有时我的互联网连接速度很慢,所以我必须使用本地主机)。和 Remote 用于生产目的和客户端预览。

下面是我创建的函数:

PHP 脚本:

define("LOCALHOST", "/adamsProject");
define("REMOTE_SERVER", "http://adamsproject.ph");

function host(){
    if(!LOCALHOST){
        echo REMOTE_SERVER;
    }else{
        echo LOCALHOST;
    }
}

在 HTML 上执行:

<ul>

    <a href="index.php"><img src=" <?php echo host(); ?> /images/logoMain.png" id="logoMain" > </a>

    <li><a href=" <?php echo host(); ?> /index.php"> HOME </a></li><li>
    <a href="#" id="servicesWide"> SERVICES <i class="fa fa-chevron-down"></i></a></li><li>
    <a href=" <?php echo host(); ?> /underConstruction.php"> ABOUT US </a></li><li>
    <a href=" <?php echo host(); ?> /pages/contactUs.php"> CONTACT US </a></li><li>
    <a href="#" id="folioWide"> PORTFOLIO <i class="fa fa-chevron-down"></i> </a></li>

</ul>

【问题讨论】:

  • 如果你的函数回显数据,你不想回显函数,就像echo echo 'text'。如果你回显函数,函数应该return数据,而不是echo它。
  • @DeDee。谢谢人!现在我知道。你觉得怎么样。我的功能正确吗?

标签: php html localhost relative-path absolute-path


【解决方案1】:

就像 DeDee 所说,您可能希望删除链接中的回声以及 'host(); 之后的空格; ?>' 见下面的代码。此外,不需要 PHP 函数;您可以使用 "$_SERVER['SERVER_NAME']" 来获取当前的 Web 服务器名称。我希望这会有所帮助。

if(!$_SERVER['SERVER_NAME']='localhost'){
$domain = '/adamsProject';
} else {
   $domain = 'http://www.adamsproject.ph';   
}
?>
<ul>
<a href="<?php echo $domain;?>/index.php"><img src="<?php echo $domain;?>/images/logoMain.png" id="logoMain" > </a>
<li><a href="<?php echo $domain;?>/index.php"> HOME </a></li><li>
<a href="#" id="servicesWide"> SERVICES <i class="fa fa-chevron-down"></i></a></li><li>
<a href="<?php echo $domain;?>/underConstruction.php"> ABOUT US </a></li><li>
<a href="<?php echo $domain;?>/pages/contactUs.php"> CONTACT US </a></li><li>
<a href="#" id="folioWide"> PORTFOLIO <i class="fa fa-chevron-down"></i></a></li>
</ul>

编辑 根据您的 cmets,如果您在“localhost”之外有一个子目录,那么当您在本地主机上时,您可能需要一个 if 语句来将您的“adamsProject”目录添加到您的域中。试试看。告诉我。

EDIT2 用您的硬编码域替换了远程服务器域。此外,在主页 img 链接和 HOME nav 链接上的 index.php 中添加了 $domain

【讨论】:

  • &lt;a href="index.php"&gt;&lt;img src="&lt;?php $_SERVER['SERVER_NAME'];?&gt;/images/logoMain.png" id="logoMain" &gt; &lt;/a&gt; 有趣的是,这个对我不起作用。也许,某种机器里的幽灵。我正在使用 XAMPP。我的 PHP 版本是:5.6.8,我的 Apache 是:2.4.12。
  • 嗯。这很奇怪。这个对我有用。例如,“关于我们”链接在呈现页面时会生成“localhost/underConstruction.php”。您是否尝试过仅包含以下内容的测试页面:&lt;?php echo $_SERVER['SERVER_NAME']; ?&gt; 来查看它是否回显“localhost”?
  • 我的 php 版本 5.5.18 是 Apache 是 2.4.10;但应该适用于您的配置。
  • 我已经创建了另一个答案供您试用@JOE
  • 是的,乍得。它肯定地呼应了“localhost”。
【解决方案2】:

或者只使用相对网址...所以,

&lt;a href="/underConstruction.php"&gt; ABOUT US &lt;/a&gt;

在远程和本地都一样。渲染页面会产生:

http://localhost/underConstruction.php

在本地给我。

【讨论】:

    【解决方案3】:

    尝试使用 $ _ SERVER [ ' SERVER_NAME ' ] 代替您的函数。它适用于本地服务器和远程服务器。您的代码应如下所示。

    <ul>
    
    <a href="index.php"><img src="<?php echo 'http://' . $_SERVER['SERVER_NAME'];?>/images/logoMain.png" id="logoMain" > </a>
    
    <li><a href="<?php echo 'http://' . $_SERVER['SERVER_NAME'];?>/index.php"> HOME </a></li><li>
    <a href="#" id="servicesWide"> SERVICES <i class="fa fa-chevron-down"></i></a></li><li>
    <a href="<?php echo 'http://' . $_SERVER['SERVER_NAME'];?>/underConstruction.php"> ABOUT US </a></li><li>
    <a href="<?php echo 'http://' . $_SERVER['SERVER_NAME'];?>/pages/contactUs.php"> CONTACT US </a></li><li>
    <a href="#" id="folioWide"> PORTFOLIO <i class="fa fa-chevron-down"></i> </a></li></ul>
    

    它将返回http://localhost/somethinghttp://yourwebsite.pl/something

    您必须在使用&lt;?php echo $_SERVER['SERVER_NAME'];?&gt; 之前添加http://。如果您不这样做,它无论如何都会将其视为相对路径,并将您的服务器名称加倍。在这种情况下,它被视为绝对路径。这是一个更容易理解的示例:

    Relative path:
    <a href="index.php"><img src="/images/logoMain.png" id="logoMain" > </a>
    Still relative path(server name doubled)
    <a href="<?php echo $_SERVER['SERVER_NAME'];?>/index.php"> HOME </a>
    Absolute path (correct one):
    <a href="<?php echo 'http://' . $_SERVER['SERVER_NAME'];?>/underConstruction.php"> ABOUT US </a>
    

    *记住&lt;?php echo $_SERVER['SERVER_NAME'];?&gt;return 服务器名最后没有/

    【讨论】:

    • 谢谢石壁!有趣的是,这个对我不起作用。虽然它适用于其他人。
    • 尝试回应它。我在其他答案中看到你错过了它。
    • 我编辑了我的答案。我希望它现在可以解决您的问题!
    • 感谢热心人。我试过了,我的地址栏显示:http://localhost%20/underConstruction.php,页面显示This webpage is not available. 注意:我的导航栏是不在根目录中的子文件夹。
    • 这个在 localhost 上真的很好用,没问题。但是它在远程服务器中不再起作用。 &lt;a href="index.php"&gt;&lt;img src="/adamsProject/images/logoMain.png" id="logoMain" &gt; &lt;/a&gt;。只需将 /adamsProject 放在 /images/logoMain.png 之前就可以解决问题 --- 仅在本地主机中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-24
    • 2021-11-18
    • 2016-03-09
    相关资源
    最近更新 更多