簡體   English   中英

PHP包含不同服務器上的路徑不同

[英]PHP include path different on different servers

在我的網站上,我有個地方說:

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

也許這會引起問題?

好吧,您基本上回答了自己的問題。

創建一個設置文件,將所有這些特定路徑保留為變量或其他形式,並在需要引用路徑的任何位置包括該文件。 通常就是這樣。

settings.inc.php:

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

some_file.php:

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

我認為您正在嘗試解決整個系統問題,而沒有一個通用的設置文件,在這種情況下,我沒有答案。 您應該在開始編碼時立即真正集中所有內容,以避免出現此類問題。

您必須具有配置文件,該文件將具有指向您站點的絕對路徑,該文件將是相對的(無需進行硬編碼的url),然后在所有include調用中使用它。

讓我解釋一下,假設您在站點中有一個名為config的文件夾,在文件中名為config.php的文件夾。 如果需要,可以使config類包含所有重要變量。 其中之一應該是

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

這將是相對於您的項目的根路徑。 然后,您可以在包含某些內容時在其他地方簡單地調用此變量:

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

解決損壞代碼的另一種方法是使用set_include_path()重新定義include路徑

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

但是為了將來,學會聰明地編碼:)

根據您的新信息,問題如下:

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的文檔根目錄

有時使用dirname會有所幫助,因此它實際上相對於當前文件。 這是我使用cronjobs時使用的方式,這種方式更“便攜”

<?php
    include dirname(__FILE__)."/../tpls/header_home.php";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM