PHP目录问题

时间:2011-08-06 07:22:53

标签: php directory

我遇到了这个问题:

我得到了文件xxx.php,其中我正在解析一个文件:$ config ['etc'] = parse_ini_file('config / config.txt');

一切都很好,直到我使用require_once("lang.inc.php");将xxx.php文件包含到我的yyy.php文件中

然后我收到一条消息:警告:parse_ini_file(config / config.txt):无法打开流:没有这样的文件或目录......

当我改变时;

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

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

然后我的yyy.php运行正常,但是xxx.php没有...而且我卡住了。

请帮帮我们。

4 个答案:

答案 0 :(得分:0)

您应该使用从yyy.phpconfig.txt的绝对路径或路径 要获得绝对值,您可以使用$_SERVER['DOCUMENT_ROOT']__FILE__常量

答案 1 :(得分:0)

如果可以从不同目录调用(或请求)PHP脚本,请尝试使用绝对文件路径。例如,在example.com/one.php下执行的PHP脚本的当前目录将与example.com/folder/two.php不同。

您的更改

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

仍然是相对,除了这次它只是“当前目录中的一个目录> config> config.txt”,而不是之前,你在同一个当前目录中查找

通用修复方法是执行以下操作:

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

使用DOCUMENT_ROOT字段可能存在问题,但大多数情况下应该没问题(例如在CLI下未定义DOCUMENT_ROOT)。此外,检查DOCUMENT_ROOT是否有尾部斜杠,即使标准没有,一些主机可能包含尾部斜杠。如果是,请在文件路径的开头删除斜杠。

答案 2 :(得分:0)

也许是因为您的文件层次结构看起来像这样?

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

xxx.php和yyy.php不在同一目录中。当您在yyy.php中包含xxx.php时,parse_ini_file将从yyy.php视角读取文件。这就是你需要更改目录的原因,因为当你包含一个文件时,它的所有目标读数都会改变。

解决方案当然是由其他人编写的(使用绝对路径),或者您可以将文件移动到相同的目录。我只是写这个是为了完整的解释。

修改

当然,我只是推测你的文件层次结构。试着想象一下文件层次结构,看看xxx.php和yyy.php是不在同一个目录中。这可能是问题所在。

编辑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包含在另一个文件中,并从该文件调用?

答案 3 :(得分: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();
    }   
}