Относительные пути в PHP не работают на сервере

Исходная информация: Я разрабатываю собственное приложение Facebook на своем собственном сервере (localhost) и все работает. Недавно я загрузил свои файлы на мой хостинг-сервер (hostgator), и появилась странная ошибка.

Мои функции require_once (), похоже, игнорируют относительные пути на сервере хост-сервера. Например, в index.php у меня есть require_once ('fb / login.php'). Это вызывает ошибку, заявляя, что файл в example.com/login.php не найден. Почему require () игнорирует часть fb моего пути? Помните, что это отлично работает на моем локальном сервере localhost. Я сделал несколько Googling и решил половину проблемы, перейдя в php.ini и включив include_path = ".". Это избавило от первой ошибки, но теперь login.php также имеет require_once ('fb / sdk / Facebook.php) и не может найти этот файл. Я понимаю, что он становится беспорядочным с вложенными требованиями, но это работает на моем сервере localhost. Оба сервера – PHP5, и я убедился, что файлы php.ini похожи. По умолчанию localhost php.ini имеет комментарий include_path. Я даже зашел так далеко, чтобы заменить онлайн-файл php.ini моим localhost one. Еще ничего. Я пробовал использовать абсолютные пути, и они действительно работают, но у меня есть много включений и требует всего кода и не хочу передавать код каждому одному пути. Любое понимание? Это действительно неприятная проблема, и я надеюсь, что это простое решение.

Спасибо!


Ну, я сделал тонну исследований и в итоге использовал $ _SERVER ['DOCUMENT_ROOT']. 'Fb / login.php', как мой путь для всех моих требований и включает. Исправлены все мои проблемы, слава богу

Я давно не использовал относительные пути, чтобы избежать неприятностей, с которыми вы сейчас сталкиваетесь. Подумайте, как делать все фреймворки PHP – они определяют переменную, которая указывает, где именно находится корень сервера, тогда вы можете использовать это для создания абсолютных путей к вашим файлам.

Вы можете сделать это, добавив этот корневой файл index.php:

define('DOCROOT', realpath(dirname(__FILE__)).'/'); 

Тогда просто нужно пройти все ваши заявления и добавить DOCROOT в первую очередь:

 require_once('fb/login.php'); 

будет выглядеть так:

 require_once(DOCROOT . 'fb/login.php'); 

Вы даже можете выполнить глобальный поиск и заменить, заменив require_once(' with require_once(DOCROOT . '

Я не могу сказать, что знаю, как это решить, но вот что я сделал несколько раз с проблемами с каталогами:

Прежде всего нужно вызвать getcwd() в файле, который вы используете require_once чтобы увидеть, действительно ли вы там, где вы думаете.

Во-вторых, попробуйте ./fb/ вместо fb/

Почему бы вам не попробовать require_once('../fb/login.php'); вместо изменения файла php.ini?

или просто require_once('/fb/login.php');