4

私はこの状態にあります:

  • ファイル:/public_html/folderX/test.php行があります:require_once '../functions/sendemail.php'
  • 一方、/public_html/functions/sendemail.php行があります:require_once '../config.php'

config.phpこの状況では完全にロードされます。

この問題はfunctions/sendemail.php、folderXにないファイルに追加しようとすると発生します。例:

追加しようとすると、require_once 'functions/sendemail.php'次のpublic_html/test.phpエラーメッセージが表示されます。

警告:require_once(../ config-min.php)[function.require-once]:ストリームを開くことができませんでした:public_html/test.phpにそのようなファイルまたはディレクトリはありません

require_once '../config.php'内部関数/sendemail.phpを「独立して」機能させる方法。これにより、ファイルに含まれている場所で、この「require_once」問題が発生しなくなります。

'include_once'に変更しようとしましたが、それでも機能しません。

ありがとう!

4

4 に答える 4

5

次のようなものを試してください

require_once( dirname(__FILE__).'/../config.php')
于 2013-01-08T18:13:55.353 に答える
2

__DIR__スクリプトの現在のパスを取得するためにを使用してみてください。

require_once(__DIR__.'../config.php');

__DIR__php5.3でのみ動作します

 __DIR__ 

The directory of the file. If used inside an include, the directory of 
the included file is returned. This is equivalent to dirname(__FILE__). 
This directory name does not have a trailing slash unless it is the root directory. 
(Added in PHP 5.3.0.)
于 2013-01-08T18:22:52.843 に答える
1

相対パス名がここであなたを噛んでいると思います。相対パスは(私の知る限り)現在アクティブなスクリプトのディレクトリに基づいています。PHPは、またはファイルchdirの場合はフォルダに入れません。この種のことに対する(私の限られた経験での)最良の推奨は、可能な限り絶対パスを使用することです。だから次のようなもの:includingrequiring

require_once('../config.php');

次のようになります:

require_once('/home/myuser/config.php'); // Or wherever the file really is

dirname関数は、この状況で役立ちます。

于 2013-01-08T18:14:59.980 に答える
1

PHPがディレクトリを最も外側のスクリプトのディレクトリに変更することを理解する必要があります。相対パス(たとえば、、、で始まるパス./../またはで始まらないパス/)を使用する場合、PHPは現在のディレクトリを使用して相対パスを解決します。これにより、コードにインクルード行をコピーして貼り付けるときに問題が発生します。次のディレクトリ構造を検討してください。

/index.php
/admin/index.php
/lib/include.php

2つのインデックスファイルに次の行が含まれていると仮定します。

include_once("lib/include.php");

上記の行は、が呼び出されたときに機能し/index.phpますが、が呼び出されたときは機能しません/admin/index.php

解決策は、コードをコピーアンドペーストせず、インクルード呼び出しで正しい相対ファイルパスを使用することです。

/index.php       -> include_once("lib/include.php");
/admin/index.php -> include_once("../lib/include.php");
于 2013-01-08T18:16:40.777 に答える