php绝对路径无法在本地计算机上工作

时间:2014-06-10 13:13:17

标签: php path wamp wampserver absolute-path

我正在使用现有的PHP Web应用程序。它在远程Linux服务器上正常运行,但我无法在本地计算机上的WAMP服务器,Windows 7上运行它。问题是之前的开发人员在整个代码中使用了绝对路径。例如,其中一个是:

require '/disk2/html/src/web_tool/db_connect.php';

我的localhost文件夹是F:\wamp\www,我的结构相同: F:\wamp\www\myProject\disk2\html\src\web_tool\db_connect.php

但它无法找到db_connect.php。我无法改变路径,因为它是一个大项目,如果我愿意,我必须找到并更改超过400行代码。我不确定问题是什么以及如何使其发挥作用。任何建议都受到高度赞赏。

编辑:我在WAMP服务器上运行了一个简单的测试。我创建了这个文件结构: F:\wamp\www\test\myfolder\index.php使用此代码:

require '/myinc.php';

F:\wamp\www\test\myinc.php使用此代码:

echo 'It works!';

我收到了这个警告:

Warning: require(/myinc.php): failed to open stream: No such file or directory in F:\wamp\www\test\myfolder\index.php on line 2

并出现此错误:

Fatal error: require(): Failed opening required '/myinc.php' (include_path='.;C:\php\pear') in F:\wamp\www\test\myfolder\index.php on line 2

我的磁盘上没有C:\ php \ pear这样的文件夹。

刚刚安装了WAMP服务器,无法触及php.ini或其他配置文件中的任何内容。版本是:

WAMP SERVER 64位版本2.5包括:

Apache:2.4.9 MySQL:5.6.17 PHP:5.5.12 PHPMyAdmin:4.1.14 SqlBuddy:1.3.3 XDebug:2.2.5

3 个答案:

答案 0 :(得分:1)

如果你有相同的文件夹结构,一个简单的set_include_path()应该解决根目录中的问题。 我猜在F:\ wamp \ www \ myProject应该有一个索引文件,只需添加:

set_include_path('');

但如果你找不到你正在寻找的文件,我猜它丢失/你没有复制你需要的所有东西(类似的东西)。比问题不是真正的相对路径。

答案 1 :(得分:1)

我认为您最好的解决方案是移动网站源并创建虚拟主机,然后绝对路径就可以工作,您也可以正确地解决网站问题。

首先将disk2文件夹及其所有子文件夹移动到F:驱动器的根目录。

F:\disk2.....

然后创建一个虚拟主机来描述其新位置。

修改\wamp\bin\apache\apache2.x.y\conf\extra\httpd-vhosts.conf

如果这是您的第一个虚拟主机定义,请删除此文件的现有内容。

我假设F:\disk2\html是成为您的DocumentRoot的正确文件夹。

将此添加到文件

<IfDefine !APACHE24>
    NameVirtualHost *:80
</IfDefine>

## so the the wamp menu page loads
<VirtualHost *:80>
    DocumentRoot "F:/wamp/www"
    ServerName localhost
    ServerAlias localhost
    <Directory  "F:/wamp/www">
        AllowOverride All

        <IfDefine APACHE24>
            Require local
        </IfDefine>

        <IfDefine !APACHE24>
            Order Deny,Allow
        Deny from all
        Allow from 127.0.0.1 localhost ::1 
        </IfDefine>

    </Directory>
</VirtualHost>


<VirtualHost *:80>
    DocumentRoot "F:/disk2/html"
    ServerName example.dev
    ServerAlias www.example.dev

    <Directory  "F:/disk2/html">
        AllowOverride All

        <IfDefine APACHE24>
            Require local
        </IfDefine>

        <IfDefine !APACHE24>
            Order Deny,Allow
            Deny from all
            Allow from 127.0.0.1 localhost ::1 
        </IfDefine>

    </Directory>
</VirtualHost>

保存此文件。

修改httpd.conf并从此行中删除评论

#Include conf/extra/httpd-vhosts.conf

删除第1列中的#并保存该文件。

现在编辑hosts文件C:\windows\system32\drivers\etc\hosts并添加这些行。

127.0.0.1  example.dev
::1 example.dev

这是一个受Windows保护的文件,因此您必须使用&#34;以管理员身份运行&#34;打开您的编辑器。或者你不会被允许保存你的更改。

现在使用&#34;以管理员身份运行&#34;启动命令窗口。并执行这两个语句,通过对hosts文件的更改来刷新DNS缓存。

net stop dnscache
net start dnscache

现在重新启动Apache以便它获取配置更改,您应该能够在浏览器地址栏中使用此地址。

example.dev

DocumentRoot应该与在实时服务器上一样,并且PHP代码中使用的绝对路径现在也应该像在实时服务器上那样工作。

example.dev更改为与您的实际网站域名相关的任何内容。

答案 2 :(得分:0)

这不是一个技术性的答案,而是五年后的事,但是FWIW在升级WAMP版本后的几年中,我遇到了同样的问题,其中某些要求不再在本地主机上运行在活动的Web应用程序上发布时,工作正常。

对我来说,我找到了一个名为“ allow_url_include”的设置,并激活该设置并重新启动服务,现在看来一切正常。希望这对某人有帮助。

it was the second php setting