我已将文件从本地环境切换到我的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') ;
答案 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
没有弹出此错误现在你必须看看为什么第9行的类Facebook
是未知的。
facebook.php
,则可能不包含正确的类。 (类名区分大小写!)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)
是否有可能:
<?
而不是<?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个计划
更好一个,找到你的实际include_path并把php-sdk文件放入,include_path可以从php.ini中找到,或者从shell运行php -m,或者phpinfo(),这样,你的第一个require_once( )会工作。
确保php-sdk目录包含facebook.php与您的调用php脚本在同一个父目录中,这不是常见用法,但会使您的第二个require_once()正常工作。
我建议你学习更多关于php include_path configure和__FILE__ magic constant。
答案 8 :(得分:0)
尝试$_SERVER['DOCUMENT_ROOT'].'/path to /php-sdk/facebook.php'
$_SERVER['DOCUMENT_ROOT']
会为www
或htdocs
文件夹提供绝对路径,然后您可以提供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');
会起作用。