что не так с моим 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