что не так с моим require once path?
я переключил свои файлы из локальной среды на мой vps, и теперь мое уведомление facebook не работает, даже думал, что я уверен, что обновил все пути правильно. Я пробовал писать требуемый путь многочисленными способами. Я делаю "$.сообщение " из jquery на страницу php, куда отправляется уведомление facebook, и я получаю эту ошибку:
<b>Fatal error</b>:  Class 'Facebook' not found in 
<b>/home/zjkkvcxc/public_html/accepted.php</b> on line <b>9</b><br />
//THIS IS MY PHP REQUIRE PATH. 
require_once('php-sdk/facebook.php') ;
//IN MY LOCAL ENVIRONMENT I WAS USING THIS PATH BECAUSE IT WAS THE ONLY ONE THAT WORKED. THIS DOESN'T WORK ON MY VPS THOUGH. 
require_once(dirname(__FILE__).'/php-sdk/facebook.php') ;
11 ответов
я сталкивался с такими проблемами раньше, и лучший способ справиться с этим-установить ваш истинный путь к файлу как переменную и добавить ее к вашему includes/requires. Потому что все dirname(__FILE__) настройка может действовать странно в разных средах, особенно тех, которые используют символические ссылки. Явное указание, где файлы должны быть установлены, является лучшим решением.
Итак, предположим, что это ваш путь к кодовой базе; в соответствии с вашим примером:
/home/zjkkvcxc/public_html/
установите это как переменную, что все ваши страницы загружаются каким-то образом:
$BASE_PATH = '/home/zjkkvcxc/public_html/';
и теперь, когда вы делаете звонки в файловую систему для вашего приложения, поступить так:
require_once($BASE_PATH . 'php-sdk/facebook.php');
что приятно в такой настройке, так это то, что вы можете сделать свое приложение портативным между средами, просто изменив $BASE_PATH, чтобы соответствовать вашей окружающей среде. Как это может быть путь для установки MAMP (Mac OS X LAMP):
$BASE_PATH = '/Application/MAMP/htdocs/';
относительно того, как странно __FILE__ может действовать в symlinked средах,прочитать вот!--19-->:
начиная с PHP 4.0.2,_ _ всегда содержит абсолютный путь с символические ссылки разрешены, тогда как в более старых версиях он содержал относительный путь при некоторых обстоятельствах.
вы используете require_once и имеете ошибку "класс 'Facebook' не найден". Если вы попытались require_once на файл, который не существует, это вызовет другую ошибку: " неустранимая ошибка: require (): не удалось открыть требуемый 'php-sdk/facebook.php'". Так что путь, вероятно, в порядке. Проверьте, правильно ли вы загрузили php-sdk. Фейсбук.php может быть пустым.
код ошибки :
Fatal error</b>:  Class 'Facebook' not found in 
<b>/home/zjkkvcxc/public_html/accepted.php</b> on line <b>9
ценная информация здесь:
- ошибка произошла из-за Facebookкласс неизвестен, что означает, чтоrequire_onceне поп-это ошибка
- ошибка произошла в строке 9 accepted.в PHP
теперь вы должны посмотреть, почему класс Facebook неизвестно в строке 9.
- если вы включили facebook.phpперед строкой 9 он, вероятно, не содержит право класс. (имена классов чувствительны к регистру!)
- если вы включите facebook.phpпосле строки 9 вы просто должны позвонить ему раньше.
PS: размещение первых 10-15 строк accepted.php может дать нам достаточно информации, чтобы точно определить проблему здесь.
класс не найден ошибка не относится к проблеме загрузки файла. Вы используете require, если файл не существует, будет вызвана ошибка require, и это не так.
вероятно, класс внутри facebook.php не называется Facebook, вероятно, с другим именем или с другим случаем, таким как "facebook"
Fatal error</b>:  Class 'Facebook' not found in 
<b>/home/zjkkvcxc/public_html/accepted.php</b> on line <b>9
возможно ли, что:
- код short_open_tag включен в вашей локальной среде и
- он отключен на вашем vps и
- вы используете <?вместо<?phpв своем facebook.файл php
по какой-то странной причине я сталкиваюсь с обстоятельствами, когда php не находит файл, который мне нужен, обычными средствами. я нашел код, используемый для поиска в каталоге и получения списка файлов, что было выгодно в сценарии генерации url, который я писал. сверхурочно, я использовал этот простой скрипт для многих задач, таких как поиск файлов при нормальном require/include не удается. в крайнем случае, этот хак работает на меня.
просто заполните имя файла $somefile и имя директории $log_directory Если ваш каталог находится в базовом пути, просто введите его без косых черт. если его ниже базового пути введите его так /path/to/folder
надеюсь, что это помогает.
$somefile = '<!--Filename You need to find-->';
$log_directory = '<!--Directory you want to search-->';
$results_array = array();
if (is_dir($log_directory))
{
        if ($handle = opendir($log_directory))
        {
            while(($file = readdir($handle)) !== FALSE)
                {
                        $results_array[] = $file;
                }
            closedir($handle);
        }
}
foreach($results_array as $value) 
{
    if ($value == $somefile) {
        $url_include = $log_directory."/".$value;
        }else{
        die("error file not found.");
        }
}
require_once("$url_include");
требуемый путь, который вы сказали, неверен:
require_once('php-sdk/facebook.php') ;
эта потребность там имеет полный путь к файлу: /dir/to/your/actual/include/path / php-sdk / facebook.в PHP
и позже вам потребуется файл в include_path неправильно, dirname (__FILE__) или__ DIR _ _ - это каталог файла, где вызывается require_once (), поэтому вы ищете facebook.php в подкаталоге php-sdk под вами текущий PHP скрипт.
исправить вашу проблему, у вас есть 2 план
- лучше, найдите свой фактический include_path и поместите файлы php-sdk, include_path можно найти из php.ini, или запустить php-m из оболочки, или phpinfo(), таким образом, ваш первый require_once() будет работать. 
- убедитесь, что каталог php-sdk включает facebook.php находится в одном родительском каталоге с вашим вызывающим PHP-скриптом, это не обычное использование, но сделает вашу вторую require_once() работать. 
Я предлагаю вам подробнее о php include_path configure и __FILE__ magic constant.
define('DOC_ROOT', realpath(dirname(__FILE__) . '/'));
require_once(DOC_ROOT . '/php-sdk/facebook.php');
Если папке php-sdk находится в корневом каталоге вашего веб-сайта.
require_once('php-sdk/facebook.php') ;
это предполагает, что facebook.php-файл находится в папке, которая находится в текущей папке вызываемого файла PHP.
это дело? Я подозреваю, что нет, так как у вас есть ошибка!
вы находитесь в папке вверх от корня?
 - - - ROOT 
--- ROOT > FOO --ваш скрипт здесь? 
--- ROOT > php-sdk --facebook здесь 
Если это так...
require_once('../php-sdk/facebook.php'); 
будет работать.
попробовать $_SERVER['DOCUMENT_ROOT'].'/path to /php-sdk/facebook.php'
$_SERVER['DOCUMENT_ROOT'] даст абсолютный путь для www или htdocs папка, то вы можете указать путь к facebook.php 
