2011-08-06 43 views
0

私はこれで問題だ:$コンフィグ[「など」] =にparse_ini_file(「設定/ config.txtを」):私は、私は1つのファイルを解析していた中でのファイルxxx.phpを得たPHPディレクトリの問題

を;

私はrequire_once("lang.inc.php");

を使用して、私のyyy.phpファイルにxxx.phpファイルを含めていますまで、すべてはその後、私はメッセージを取得、罰金です:警告:にparse_ini_file(設定/ config.txtをを):ストリームをオープンに失敗しました:そのようなファイルやディレクトリはありません。

私は変更しました。

$ config ['etc'] = parse_ini_file( 'config/config.txt');

に$コンフィグ[ 'など'] =にparse_ini_file( '../設定/ config.txtを')。

私のyyy.phpは正常に動作しますが、xxx.phpは動作しません。

お手伝いください。

答えて

0

PHPスクリプトが異なるから呼び出された(または要求)することができた場合、絶対ファイルパスを使用してみてくださいディレクトリ。たとえば、example.com/one.phpで実行されるPHPスクリプトの現在のディレクトリは、example.com/folder/two.phpとは異なります。

$config['etc'] = parse_ini_file('../config/config.txt'); 

へのご変更は、この時間を除いて、それはあなたが探していたという以前よりも、単に「カレントディレクトリ>設定>のconfig.txtから1つのディレクトリアップ」、だ、まだ相対です同じカレントディレクトリ。

一般的な修正は、以下の操作を行うために、次のようになります。

$root = $_SERVER['DOCUMENT_ROOT']; 
// ... code ... 
$config['etc'] = parse_ini_file($root . '/config/config.txt'); 

(例えばDOCUMENT_ROOTとしてCLIの下で定義されていない存在DOCUMENT_ROOTフィールドを使用して潜在的な問題があるが、それはほとんどの部分は問題ありません)。また、DOCUMENT_ROOTにスラッシュが付いていないかどうかを確認してください。スラッシュがない場合でも、スラッシュが含まれているホストもあります。存在する場合は、ファイルパスの先頭でスラッシュを削除します。

+0

parse_ini_file($ _ SERVER ['DOCUMENT_ROOT'] '/config/config.txt'); ...それは動作しましたが、* __ FILE __ *はエラーメッセージをスローします。 – Lucas

+0

「FILEがエラーメッセージをスローしますか? – foxy

+0

$ _SERVER ['DOCUMENT_ROOT']の代わりに* __ FILE __ *を使用すると、このエラーメッセージがスローされます。msg:(net :: ERR_CONTENT_DECODING_FAILED) – Lucas

0

あなたが使用できる絶対的なものを得るためにconfig.txt
yyy.phpからの絶対パスまたはパスを使用する必要があります$_SERVER['DOCUMENT_ROOT']または定数__FILE__

+0

しかし、私はxxx.phpファイルではなく、YYYとのconfig.txtを解析しています、yyy.phpに私はちょうどxxx.php含めている:Sを。 – Lucas

+0

私は知っていますが、yyy.phpにxxx.phpを含めると、yyy.phpに追加されたコードとして動作します。 – RiaD

0

ファイル階層がこのように見えることがありますか?

/ 
- file/ 
-- config/ 
---config.txt 
--- yyy.php 
- xxx.php 

xxx.phpとyyy.phpは同じディレクトリにありません。 yyy.phpにxxx.phpを含めると、parse_ini_fileというファイルをyyy.phpの観点から読み込みます。そのため、ディレクトリを変更する必要があります。なぜなら、ファイルをインクルードすると、すべてのディレクトリ読み取りが変更されたからです。

解決策はもちろん他の人が書いている(絶対パスを使用する)か、ファイルを同じディレクトリに移動するだけです。私は完全な説明のためにこれを書いています。

EDIT:

はもちろん、私はちょうどあなたのファイル階層を推測しています。ファイル階層を想像して、xxx​​.phpとyyy.phpが同じディレクトリにないかどうか確認してください。それは問題かもしれません。

EDIT 2: 私はあなたが質問に書いている状況を試してみましたが、問題なく動作します。

xxx.php:

<?php 
    $config = parse_ini_file('config/config.txt'); 

yyy.php:

<?php 
    require_once "xxx.php"; 

ファイル階層:これは私が作ったコードです

/ 
- config/ 
-- config.txt 
- xxx.php 
- yyy.php 

うまく動作します。おそらくあなたのyyy.phpが別のファイルに含まれていて、そのファイルから呼び出されているのでしょうか?

+0

Hm、xxx.phpとyyy.phpは1つのファイルにあります。 – Lucas

+0

私は分かりません。 1つのファイルに含まれていると、なぜそれを含める必要がありますか? 1つのディレクトリを意味しますか? – bertzzie

+0

ああ、確かに1つのディレクトリ。 – Lucas

0

はこれを試してみてください。

class Database extends PDO{ public $koneksi; function 
__construct($file = './../db/config.ini'){ 
    try{ 

    if (!$settings = parse_ini_file(__DIR__.$file, TRUE)) throw new 
exception('Unable to open ' . $file . '.'); 
     $driver=$settings['database']['driver']; 
     $dsn=$settings['database']['dsn']; 
     $port=$settings['database']['port']; 
     $dbname=$settings['database']['dbname'];  $username=$settings['database']['username']; 
    $password=$settings['database']['password']; 

     $this->koneksi = new PDO("mysql:host=" .$dsn . ";dbname=" . $dbname, $username,$password,array(PDO::ATTR_ERRMODE => 
PDO::ERRMODE_EXCEPTION, PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 
utf8")); 
     $this->koneksi->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

    }catch(PDOException $e){ 
     $e->getMessage(); 
    } 
}