что не так с моим 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 JPATH_SITE.'/php-sdk/facebook.php';

требуемый путь, который вы сказали, неверен:

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 план

  1. лучше, найдите свой фактический include_path и поместите файлы php-sdk, include_path можно найти из php.ini, или запустить php-m из оболочки, или phpinfo(), таким образом, ваш первый require_once() будет работать.

  2. убедитесь, что каталог 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