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

まあ、あなたは基本的にあなた自身の質問に答えました。

これらの特定のパスをすべて変数などとして保持する設定ファイルを作成し、パスを参照する必要がある場所にそのファイルを含めます。それは一般的にそれがどのように機能するかです。

settings.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

サイトへの絶対パスを含む構成ファイルが必要です。これは相対パスであり (URL をハードコードする必要はありません)、すべてのインクルード呼び出しで使用します。

説明させてください。あなたのサイトに config という名前のフォルダーと、config.php という名前のファイルがあるとします。必要に応じて、重要な変数をすべて保持する構成クラスを作成できます。それらの1つはあるべきです

$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 に答える
0

dirname を使用すると役立つ場合があるため、実際には現在のファイルに相対的です。これは、私が cronjobs を作成する場合に使用するものであり、この方法により「移植性」が高くなります

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