2016-02-08 3 views
1

С момента перемещения моего веб-сайта от локального до онлайн у меня есть проблема с использованием пути , требующая.неправильный путь с использованием 'require'

У меня есть страницы, которые называют Bootstrap.php так:

require 'inc/bootstrap.php'; 

И boostrap.php выглядит следующим образом:

<?php 
spl_autoload_register('app_autoload'); 

function app_autoload($class){ 
require "class/$class.php"; 
} 

Это хорошо работало в местных.

Сейчас в Интернете, я получаю следующее сообщение:

Warning: require_once(/home/website/www/class/functions.php): failed to open stream: No such file or directory in /home/website/www/inc/bootstrap.php on line 6 

Fatal error: require_once(): Failed opening required '/home/website/www/class/functions.php' (include_path='.:/usr/share/php:/usr/share/pear') 
in /home/website/www/class/functions.php on line 6 

Так я думал, я должен поставить абсолютный путь в boostrap.php так:

<?php 
spl_autoload_register('app_autoload'); 

function app_autoload($class){ 
$path = $_SERVER['DOCUMENT_ROOT'] . "class/$class.php"; 
require_once "$path"; 
} 

Но я получаю точно такая же ошибка. Я не понимаю, почему он все еще ищет в /home/website/www/inc/bootstrap.php и не соответствует абсолютному пути, который является /home/website/www/class/functions.php?

EDIT:

После тестирования различных решений с использованием абсолютных трактов, я все еще получаю ошибку, что «Нет такого файла или каталога в /home/website/www/bootstrap.php: так что до сих пор глядя в файле вместо каталога.

Может быть, потому что я использую двойные требую? Я первый требую boostrap.php от description.php (который прекрасно работает), а затем я требую класса .php из этого boostrap.php (который содержит абсолютный путь, но путь, соответствующий файлу boostrap.php?

ОТВЕТ:

Ok наконец работает с этой конфигурацией:

Первый файл с помощью требуют:

require_once(dirname(__FILE__). '/inc/bootstrap.php'); 

и boostrap.php:

require_once(dirname(__FILE__). "/../class/$class.php"); 
+0

что делать, если вы добавляете '/ inc /' в свой путь так. 'require 'inc/class/$ class.php"; ' – cmorrissey

+0

, потому что вы вызываете' require' func в _/home/website/www/inc/bootstrap.php_ Попробуйте с '$ path = dirname (__ DIR __)."/class/$ class.php ";' – fusion3k

+0

@michltm отметить, что было бы хорошо поддерживать ту же структуру в локальной и удаленной. Если это невозможно, я предлагаю вам добавить путь (ы) к существующему/новому конфигурационному файлу. – fusion3k

ответ

0
  1. Как уже было сказано в комментариях, это безопасно использовать абсолютный путь вместо «вкл/...», потому что это относительно пути выполнения текущего класса, а именно:.

    define ('BASE_PATH', dirname(__FILE__).'/../'); 
    

    Затем используйте базовый_путь { your_path} для доступа к файлам.

  2. Предлагаю использовать require_once, чтобы избежать множественных включений.

+0

. Я попытался использовать dirname (_FILE_) вместо od только «inc/...», но это не было изменить что-либо в сообщении об ошибке. Использование require_once dirname (__ FILE __). '/ ../inc/bootstrap.php'; приводит к предупреждению: require_once (/ home/website/www /../ inc/bootstrap.php): не удалось открыть поток: нет такого файла или каталога в /home/website/www/description.php в строке 4 Fatal error: require_once(): Не удалось открыть окно «/home/website/www/../inc/bootstrap.php» (include_path = '.:/usr/share/php:/usr/share/pear') в/home /website/www/description.php в строке 4. – michltm

+0

теперь ясно. Основное место вашего сценария - /home/website/www/description.php – ETech

+0

Ваш загрузочный файл находится в /home/website/www/inc/bootstrap.php, и в этом случае вы пытаетесь найти его/home/website/inc /bootstrap.php. Решения: 1. поместите description.php в subdir/home/website/www, измените определение BASE_PATH на – ETech

Смежные вопросы