[英]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.