[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Не работает include в PHP 5.6
krll
Всем здравствуйте!
Настроил себе VPS перенёс сайты. И тут началось... Все вопросы вроде решил с помощью поиска осталось одна.

У меня не работает нормально include().
Все файлы в корне сайта находит include('db_connect.php'); все работает
А вот если в другой папке лежит то все не находит failed to open stream: No such file or directory in ....

Структура папок где сайты лежат такая
/var/www/html/site.ru
/var/www/html/site2.ru
/var/www/html/...

Перепробовал все что знал
include('directory/db_connect.php');
include('/directory/db_connect.php');
include(/var/www/html/site.ru/directory/db_connect.php');
include('/site.ru/directory/db_connect.php');
и даже так
include('../../../../../var/www/html/site.ru/directory/db_connect.php');

Где и что и скать уже теряюсь. А главное не вижу в поиске подобных проблем.

PHP 5.6 Apache/2.2.15 (CentOS)

Если есть мысли пожалуйста подскажите.
GET
krll
На месте инклюда проверьте текущую директорию через getcmd и станет все понятно сдается просто путь неправильно ставите

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
krll
Я че-то не нашел в php такой команды.

Проверил командами

dirname($_SERVER['PHP_SELF'])
dirname(__FILE__);

показывает соответственно

/
/var/www/html/site.ru
AllesKlar
krll
ну вот, соответсвенно делаешь:
define('DOCUMENT_ROOT', '/var/www/html/site.ru/');
include(DOCUMENT_ROOT . 'path_to_file');


если инклюд все равно выплюнул ошибку, значит ты где-то в синтаксисе / путях ошибся.
Копируешь путь из ошибки и пробуешь его скачать по ssh, например. Или в ftp клиенте указываешь этот путь... 100% и они проплюются

_____________
[продано копирайтерам]
Tumour
krll
а где у тебя находится db_connect.php ?

Просто ты написал сначала, что ты подключаешь include('db_connect.php')
а потом, что ты перепробывал

include('directory/db_connect.php');
include('/directory/db_connect.php');
include(/var/www/html/site.ru/directory/db_connect.php');
include('/site.ru/directory/db_connect.php');

если ты подключаешь этот файл в другой папке, тогда тебе сначала нужно выйти из нее

include '../directory/db_connect.php';

если ты подключаешь в папке и еще в папке тогда

include '../../directory/db_connect.php';

А еще include это конструкция языка, а не функция, пиши include '';
Я понимаю, что не принципиально но все же)))

_____________
Путешествуй с BookRestEasy.com
Astin
krll
тебе нужен физический путь до корневой директории, а не по протоколу HTTP.

Попробуй как написал AllesKlar

Или можешь вот так

<?php
define('ROOT', str_replace('\\', '/', $_SERVER['DOCUMENT_ROOT']) .'/');
include ROOT.'path_to_file';


Так точно работает, сам использую данную конструкцию
AllesKlar
Astin
Цитата (Astin @ 8.05.2016 - 21:50)
$_SERVER['DOCUMENT_ROOT']

не стоит слепо верить DOCUMENT_ROOT.
$_SERVER['DOCUMENT_ROOT'] читается из настроек апача. Что там написано, то и выдаст.
Сама переменная $_SERVER какбэ нам намикает на то, что это переменные окружения веб-сервера, а не хост-машины.
__FILE__ же раскрывает физический путь и не зависит от DOCUMENT_ROOT

_____________
[продано копирайтерам]
Astin
AllesKlar
Спасибо, теперь будем знать

Но тогда уж не __FILE__ , а __DIR__, так как если поставить __FILE__, то
пишет не только путь, а еще и приписывает к нему исполняемый файл,
а если нужен только путь то __DIR__ будет в самый раз
Astin
И все таки __DIR__ покатит если подключать файл который находится в той же де
директории.
__FILE__ вообще полный путь до текущего файла показывает

А если подключать из другого каталога то $_SERVER['DOCUMENT_ROOT'] будет в самый раз
Ну или тогда уж узнать полный путь и прописать как AllesKlar показал
define('DOCUMENT_ROOT', '/var/www/html/site.ru/');

Guest
Цитата (Astin @ 9.05.2016 - 12:21)
И все таки __DIR__ покатит если подключать файл который находится в той же де
директории.

Да ну.
var_dump(realpath(__DIR__.'/../'));

Astin
Цитата
Да ну.
var_dump(realpath(__DIR__.'/../'));

Guest ну и зачем все эти сложности со слешами?

А если в файл в котором подключаешь находится еще глубже на один порядок, то что?

Добавлять потом к ссылке '../' такие символы? Зачем мучать свой мозг?
Если файлов куча, то потом скорее запаришься где и сколько добавлять
уровней '../' в каждом подключении.

А так просто один раз прописал
define('ROOT', str_replace('\\', '/', $_SERVER['DOCUMENT_ROOT']) .'/');

И нигде не нужно добавлять эти слеши и уровень подключения '../'

Короче кому как, каждый делает по своему, не буду спорить
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.