0

私はsymfonyを使用していて、次のように親ディレクトリにあるファイルを参照しようとしています。

require_once('../MyClass.class.php');

タスクを実行するとファイルが見つからないと表示され続けますが、機能していないようです。私は(このサーバーを経由するのではなく)個人のWAMPサーバーで同じコードを試しましたが、symfonyを使用せず、正常に機能しました。

symfonyがそれを見つけられない理由がわかりませんか?

ありがとう

4

2 に答える 2

2

include相対パスの場合、パスは、現在実行されているスクリプトではなく、「トップレベル」スクリプト(つまり、アプリケーションへのエントリポイント)からの相対パスです。

フレームワークを扱う場合、エントリポイントは多くの場合、Webルートの上部にある。という名前のファイルですindex.php。この例では、このファイルは。であると想定します~/application/index.php

index.phpファイルには、フレームワークの他の部分からのファイルが必ず含まれます。これらのファイルの1つに、インクルードを実行しようとしている可能性があります。コントローラファイルからインクルードを試みているとしましょう。ファイル名を付けます~/application/controllers/example.php

さて、あなたがそうするときに起こっていると思うinclude "../MyClass.class.php"のは、ファイル名が現在実行中のスクリプトの1レベル上になると思うことです。つまり、にいるので~/application/controllers/example.php親ディレクトリはになると思う~/application/controllersので、を含めます~/application/MyClass.class.php

実際に発生するのは、エントリポイントの場所に基づいて相対パスが決定される~/application/index.phpため、親ディレクトリはになり、PHPは存在しない~/ファイルをインクルードしようとします。~/MyClass.class.php

私はSymfonyを知らないので、オートローダーがどのように機能するかはわかりませんが、フレームワーク関数を呼び出してクラスをロードできるはずです。本当にincludeファイルを手動で作成する必要がある場合は、index.phpファイルに関連するファイルを含める必要があります。ほとんどのフレームワークBASEDIRには、絶対パスを簡単に生成するために使用できる定数(たとえば)があります。

これに使用できるPHP定義の定数も2つあります。

  • __FILE__現在実行中のスクリプトのscript-name(上記のメイン/トップレベルのスクリプトではない)を指定するのでdirname(__FILE__)、現在のディレクトリを取得するために使用するかdirname(dirname(__FILE__))、親ディレクトリを取得するようなものを使用できます。
  • __DIR__(PHP> = 5.3.0の場合)は、現在実行中のスクリプトのディレクトリを提供するdirname(__DIR__)ため、親ディレクトリを取得するために使用できます。

繰り返しになりますが、フレームワークでこれを処理できる可能性がありますが、フレームワーク以外のスクリプトを処理している場合は知っておくとよいでしょう。

于 2013-01-12T06:28:38.057 に答える
1

あなたのファイル構造は何ですか?これは、MyClass.class.phpが、このスクリプトを実行しているファイルの親フォルダーにあることを示しています。

このエラーは、MyClass.class.phpがその宛先フォルダーにないことを示しています。データツリー構造を調べると、このスクリプトを実行しているファイルを含むフォルダーからリンクパスを作成できます。または、ホームディレクトリから直接リンクを作成することもできます。

于 2013-01-12T06:14:55.590 に答える