Проблемы с каталогами PHP - PullRequest
       8

Проблемы с каталогами PHP

0 голосов
/ 06 августа 2011

У меня проблема с этим:

Я получил файл xxx.php, в котором я анализирую один файл: $ config ['etc'] = parse_ini_file ('config / config.txt');

Все хорошо, пока я не включил файл xxx.php в свой файл yyy.php, используя require_once("lang.inc.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 голосов
/ 18 февраля 2018

попробуйте это:

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();
    }   
}
0 голосов
/ 06 августа 2011

Попробуйте использовать абсолютные пути к файлам, если ваши PHP-скрипты могут быть вызваны (или запрошены) из разных каталогов. Например, текущий каталог скрипта PHP, выполняемого под example.com/one.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, но по большей части оно должно быть в порядке (например, DOCUMENT_ROOT не определено в CLI). Кроме того, проверьте, есть ли у DOCUMENT_ROOT завершающий слеш, хотя стандарт не должен иметь его, у некоторых хостов может быть включен завершающий слеш. Если это так, удалите косую черту в начале пути к файлу.

0 голосов
/ 06 августа 2011

Может быть, это потому, что ваша файловая иерархия выглядит следующим образом?

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

xxx.php и yyy.php не в одном каталоге.Когда вы включаете xxx.php в yyy.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 включен в другой файл и вызывается из этого файла?

0 голосов
/ 06 августа 2011

Вы должны использовать абсолютный путь или путь от yyy.php до config.txt
Чтобы получить абсолютное значение, вы можете использовать $_SERVER['DOCUMENT_ROOT'] или __FILE__ константу

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...