0

在我的网站上,我有一个地方说:

include('../tpls/header_home.php');

它有效。现在我将站点移动到另一台服务器,我收到错误:

Warning: include(../tpls/header_home.php) [function.include]: failed to open stream: No such file or directory in /home/usern/public_html/site/tpls/static/home.php on line 4

现在,如果我用这一行替换该行,它将起作用:

include('site/tpls/header_home.php');

我可以更改它,但我不知道还有多少地方到处都是损坏的路径,不仅在模板中,而且在文件、上传等中。

我宁愿通过设置或其他我缺少的东西来解决问题。我该怎么办?

暗示:

旧的工作服务器给了我 CWD: /home/ortho/public_html/site/lib

有问题的新服务器给了我 CWD: /home/orthosho/public_html

为什么?

结构体:

/home/usern/public_html/site/tpls/static/home.php /home/usern/public_html/site/tpls/header_home.php

PHP旧服务器:5.2.17

PHP新服务器:5.3.8

也许这会引起问题?

4

4 回答 4

1

好吧,你基本上回答了你自己的问题。

创建一个设置文件,将所有这些特定路径作为变量或其他方式保存,并在需要引用路径的任何位置包含该文件。这通常是它的工作原理。

设置.inc.php:

$_CONFIG['BASE_DIR'] = "/var/www/yoursite.com/";

some_file.php:

require 'settings.inc.php';
include $_CONFIG['BASE_DIR'] . "some_dependency.php";

我假设您正在尝试解决已经制作了整个系统的问题,而没有通用设置文件,在这种情况下我没有答案。开始编码后,您应该真正将事情集中起来以避免此类问题。

于 2013-01-12T12:34:46.850 回答
0

鉴于您的新信息,问题如下:

Old server => ~/public_html/site/lib
New server => ~/public_html

为什么?嗯,那是因为你已经这样设置了。您如何访问以前的网站?yourdomain.com/site/,或者只是yourdomain.com?如果是第一个,那肯定是你有不同的网络根。

现在,您要包含的内容是:

Old server => ~/public_html/site/tpls/...
New server => ~/tpls/

这看起来不太对吧?

我的猜测是您需要以某种方式更改文档根目录。httpd.conf

于 2013-01-12T12:59:10.273 回答
0

有时使用 dirname 会有所帮助,因此它确实与当前文件相关。如果我制作 cronjobs,这就是我使用的,而且它更“便携”

<?php
    include dirname(__FILE__)."/../tpls/header_home.php";
于 2013-01-12T13:04:00.333 回答
0

您必须有配置文件,该文件将具有您网站的绝对路径,ofc 它将是相对的(无需硬编码 url),然后在所有包含调用中使用它。

让我解释一下,假设您的站点中有一个名为 config 的文件夹和名为 config.php 的文件。如果你愿意,你可以制作一个包含所有重要变量的配置类。其中之一应该是

$ROOT_PATH = str_replace( '\\', '/', dirname( dirname( __FILE__ ) ) ) . '/';

这将是相对于您的项目的根路径。然后,当您包含某些内容时,您可以在其他地方简单地调用此变量:

require_once $ROOT_PATH . 'blabla/test.php';

修复损坏代码的替代方法是使用 set_include_path() 重新定义包含路径

http://php.net/manual/en/function.set-include-path.php

但对于未来,学会聪明地编码:)

于 2013-01-12T12:35:24.430 回答