Исходная информация: Я разрабатываю собственное приложение 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');