7

我已经将我的文件从本地环境切换到我的 vps,现在我的 facebook 通知不起作用,即使我很确定我已经正确更新了所有路径。我已经尝试过多种方式编写 require 路径。我正在从 jquery 到发送 facebook 通知的 php 页面执行“$.post”,并且收到此错误:

<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') ;
4

11 回答 11

10

您使用 require_once 并出现错误"Class 'Facebook' not found"。如果您在不存在的文件上尝试 require_once,则会导致其他错误:"Fatal error: require(): Failed opening required 'php-sdk/facebook.php'"。所以路径可能没问题。检查您是否正确上传了 php-sdk。facebook.php 可能为空。

于 2013-11-15T19:41:26.253 回答
8

你的错误是:

Fatal error</b>:  Class 'Facebook' not found in 
<b>/home/zjkkvcxc/public_html/accepted.php</b> on line <b>9

这里有价值的信息是:

  • 发生错误是因为Facebook类未知,这意味着require_once没有弹出此错误
  • 错误发生在accept.php的第9行

现在你必须在第 9 行看看为什么这个类Facebook是未知的。

  • 如果您已包含第facebook.php9 行之前的内容,则它可能不包含正确的类。(类名区分大小写!)
  • 如果您facebook.php在第 9 行之后包含,您只需提前调用它。

PS:发布前 10-15 行accepted.php可能会为我们提供足够的信息来确定此处的确切问题。

于 2013-11-19T07:48:29.170 回答
6

我以前遇到过这样的问题,处理这个问题的最好方法是将你的真实文件路径设置为一个变量并将其添加到你的包含/要求中。因为整个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__在符号链接环境中的奇怪行为,请在此处阅读

从 PHP 4.0.2 开始,_ FILE _ 总是包含一个带有符号链接的绝对路径,而在旧版本中,它在某些情况下包含相对路径。

于 2013-11-15T19:41:33.587 回答
2

有没有可能:

  • 您的short_open_tag在您的本地环境中启用,并且
  • 它在您的 vps 上被禁用,并且
  • 您正在使用<?而不是<?php在您的 facebook.php 文件中
于 2013-11-19T17:09:35.950 回答
2

Class not found 错误不是指加载文件的问题。您正在使用 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
于 2013-11-21T11:18:04.913 回答
1

出于某种奇怪的原因,我遇到了 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");
于 2013-11-21T04:30:48.197 回答
1
require_once JPATH_SITE.'/php-sdk/facebook.php';
于 2013-11-21T10:54:00.120 回答
0
define('DOC_ROOT', realpath(dirname(__FILE__) . '/'));
require_once(DOC_ROOT . '/php-sdk/facebook.php');

假设该文件夹php-sdk位于您网站目录的根目录。

于 2013-11-20T13:26:04.343 回答
0

尝试$_SERVER['DOCUMENT_ROOT'].'/path to /php-sdk/facebook.php'

$_SERVER['DOCUMENT_ROOT']将为wwwhtdocs文件夹提供绝对路径,然后您可以提供路径facebook.php

于 2013-11-18T11:40:45.900 回答
0

你说的require路径是错误的:

require_once('php-sdk/facebook.php') ;

这需要有一个文件得到完整的路径名:/dir/to/your/actual/include/path/php-sdk/facebook.php

后来你需要include_path中的文件错误,dirname(__FILE__)或__DIR__是调用require_once()的文件的目录,所以你在你当前的php脚本下的php-sdk子目录中寻找facebook.php。

要解决您的问题,您有 2 个计划

  1. 更好的是,找到你的实际include_path并放入php-sdk文件,include_path可以从php.ini中找到,或者从shell运行php -m,或者phpinfo(),这样你的第一个require_once()就可以了。

  2. 确保 php-sdk 目录包含 facebook.php 与您的调用 php 脚本位于同一父目录中,这不是常见的用法,但会使您的第二个 require_once() 工作。

我建议您更多地研究 php include_path 配置和 __FILE__ 魔术常数。

于 2013-11-17T15:04:59.180 回答
0
require_once('php-sdk/facebook.php') ;

这假定 facebook.php 文件位于一个文件夹中,该文件夹位于被调用的 PHP 文件的当前文件夹中。

是这样吗?我怀疑不是,因为您有错误!

您是否在从根目录开始的文件夹中?

---ROOT
---ROOT > FOO --你的脚本在这里?
---ROOT > php-sdk --facebook 在这里

如果是这样...

require_once('../php-sdk/facebook.php'); 

会工作。

于 2013-11-20T15:32:57.667 回答