我的require_once路径出了什么问题?

时间:2013-11-06 21:27:16

标签: php jquery facebook require-once

我已将文件从本地环境切换到我的vps,现在我的facebook通知无法正常工作,即使我确信我已经正确更新了所有路径。我尝试过多种方式编写require路径。 我正在从jquery做一个“$ .post”到一个发送facebook通知的php页面,我收到了这个错误:

<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 个答案:

答案 0 :(得分:10)

您使用require_once并且错误“Class'Facebook'找不到”。如果您对不存在的文件尝试require_once,则会导致其他错误:“致命错误:require():无法打开所需的'php-sdk / facebook.php'”。所以这条路可能还行。检查你是否正确上传了php-sdk。 facebook.php可能是空的。

答案 1 :(得分:8)

您的错误是:

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

这里有价值的信息是:

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

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

  • 如果您在第9行之前添加了facebook.php,则可能不包含正确的类。 (类名区分大小写!)
  • 如果您在第9行之后加入facebook.php,则必须提前致电。

PS:发布accepted.php的前10-15行可能会给我们足够的信息来确定这里的确切问题。

答案 2 :(得分:6)

之前我遇到过这样的问题,处理这个问题的最佳方法是将您的真实文件路径设置为变量&amp;将其添加到您的包含/要求中。因为整个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__在符号链接环境中的行为,read up here

  

自PHP 4.0.2起,_ FILE _始终包含绝对路径   符号链接已解决,而在旧版本中,它包含相对路径   在某些情况下。

答案 3 :(得分:2)

是否有可能:

  • 您的short_open_tag已在您的本地环境中启用
  • 已在您的vps和
  • 上停用
  • 您在facebook.php文件中使用<?而不是<?php

答案 4 :(得分:2)

未找到类错误不是指加载文件的问题。您正在使用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

答案 5 :(得分: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");

答案 6 :(得分:1)

require_once JPATH_SITE.'/php-sdk/facebook.php';

答案 7 :(得分:0)

你说的要求路径错了:

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

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

以后你需要include_path中的文件错误,dirname(__ FILE__)或__DIR__是调用require_once()的文件的目录,所以你在php-sdk子目录下查找你当前php脚本下的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()正常工作。

  3. 我建议你学习更多关于php include_path configure和__FILE__ magic constant。

答案 8 :(得分:0)

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

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

答案 9 :(得分:0)

define('DOC_ROOT', realpath(dirname(__FILE__) . '/'));
require_once(DOC_ROOT . '/php-sdk/facebook.php');

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

答案 10 :(得分:0)

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

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

是这样的吗?我怀疑没有,因为你有错误!

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

--- ROOT
--- ROOT&gt; FOO - 你的脚本在这里吗?
--- ROOT&gt; php-sdk --facebook在这里

如果是这样......

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

会起作用。