115

私は次の構造を持っています

otsg
 > class
   > authentication.php
   > database.php
   > user.php
 > include
   > config.inc.php
   > encryption.php
   > include.php
   > session.php
 > index.php
 > registration.php

include.phpファイルには次のものがあります

ini_set('display_errors', 1);
error_reporting(E_ALL);

ini_set('include_path',ini_get('include_path').':/Applications/MAMP/htdocs/otsg/:');
require_once 'config.inc.php';
require_once '../class/database.php';
require_once '../class/user.php';
require_once 'encryption.php';
require_once 'session.php';
require_once '../class/authentication.php';

そして、私が含めたindex.phpページに

require_once 'include/include.php';

index.phpページを開くと、次の警告と致命的なエラーが発生します。このエラーの原因がわかりません。私が絶対パスを与えたとき、それは機能します。しかし、絶対的な道は私が信じる良い考えではありません。

Warning: require_once(../class/database.php) [function.require-once]: failed to open stream: No such file or directory in /Applications/MAMP/htdocs/otsg/include/include.php on line 9

Fatal error: require_once() [function.require]: Failed opening required '../class/database.php' (include_path='.:/Applications/MAMP/bin/php5.3/lib/php:/Applications/MAMP/htdocs/otsg/include/:') in /Applications/MAMP/htdocs/otsg/include/include.php on line 9

前もって感謝します

4

4 に答える 4

238

使用する

__DIR__

スクリプトの現在のパスを取得します。これで問題が解決するはずです。

それで:

require_once(__DIR__.'/../class/user.php');

これにより、別のフォルダーからPHPスクリプトを実行できるため、親戚のパスが機能しない場合を防ぐことができます。

編集:スラッシュの問題が修正されました

于 2011-03-20T22:09:09.113 に答える
18

phpバージョン5.2.17の__DIR__場合は機能しませんが、php5.3でのみ機能します

しかし、古いバージョンのphpの場合は dirname(__FILE__)完全に

たとえば、次のように記述します

require_once dirname(__FILE__) . '/db_config.php';
于 2012-10-03T05:39:16.837 に答える
1

私の場合、それが機能しない__DIR__getcwd()、間違ったパスを選択し続ける場合でも、プロジェクトの絶対ベースパスを使用して、必要なすべてのファイルにコストを定義することで解決しました。

if(!defined('THISBASEPATH')){ define('THISBASEPATH', '/mypath/'); }
require_once THISBASEPATH.'cache/crud.php';
/*every other require_once you need*/

私はphp5.4.10のMAMPを持っていて、フォルダー階層はbasilarです:

q.php 
w.php 
e.php 
r.php 
cache/a.php 
cache/b.php 
setting/a.php 
setting/b.php

...。

于 2013-12-09T10:45:05.287 に答える
0

別のインクルード内にインクルードがあった時点まで、すべて正常に機能していたこの同じ問題に遭遇しました。

require_once '../script/pdocrud.php';  //This worked fine up until I had an includes within another includes, then I got this error:
Fatal error: require_once() [function.require]: Failed opening required '../script/pdocrud.php' (include_path='.:/opt/php52/lib/php')

解決策1.(パブリックhtmlフォルダー名の望ましくないハードコーディングですが、機能します):

require_once $_SERVER["DOCUMENT_ROOT"] . '/orders.simplystyles.com/script/pdocrud.php';

解決策2.(PHP 5.3以降でのみ機能するDIRに関する上記の望ましくないコメントですが、機能します):

require_once __DIR__. '/../script/pdocrud.php';

解決策3.(私は欠点を見ることができません、そしてそれは私のphp 5.3で完全に機能します):

require_once dirname(__FILE__). '/../script/pdocrud.php';
于 2019-08-06T15:38:27.643 に答える