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

Spi*_*lot 7 php jquery facebook require-once

我已将文件从本地环境切换到我的vps,现在我的facebook通知无法正常工作,即使我已经确定我已经正确更新了所有路径.我尝试过多种方式编写require路径.我正在从jquery做一个"$ .post"到一个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') ;
Run Code Online (Sandbox Code Playgroud)

Fox*_*ion 10

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

  • @ r3wt没有,这两个错误有相同的级别:E_ERROR(致命) (2认同)

Dan*_*l P 8

你的错误是:

Fatal error</b>:  Class 'Facebook' not found in 
<b>/home/zjkkvcxc/public_html/accepted.php</b> on line <b>9
Run Code Online (Sandbox Code Playgroud)

这里有价值的信息是:

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

现在你必须看看为什么第Facebook9行的类是未知的.

  • 如果你已经包含facebook.php在第9行之前,它可能不包含正确的类.(类名区分大小写!)
  • 如果你facebook.php在第9行之后加入,你只需要提前调用它.

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


Jak*_*uld 6

我之前遇到过这样的问题,处理这个问题的最佳方法是将您的真实文件路径设置为变量并将其添加到您的includes/requires.因为整个dirname(__FILE__)设置可能在不同的环境中行为奇怪,特别是那些使用符号链接的环境.明确说明文件的设置位置是最佳解决方案.

所以我们假设这是你的代码库路径; 根据你的例子:

/home/zjkkvcxc/public_html/
Run Code Online (Sandbox Code Playgroud)

将其设置为一个变量,所有页面都以某种方式加载:

$BASE_PATH = '/home/zjkkvcxc/public_html/';
Run Code Online (Sandbox Code Playgroud)

现在,当您为应用程序调用文件系统时,请执行以下操作:

require_once($BASE_PATH . 'php-sdk/facebook.php');
Run Code Online (Sandbox Code Playgroud)

这样的设置的好处在于,只需更改$BASE_PATH以匹配您的本地环境,即可在环境之间移植您的应用程序.像这样可能是MAMP(Mac OS X LAMP)设置的路径:

$BASE_PATH = '/Application/MAMP/htdocs/';
Run Code Online (Sandbox Code Playgroud)

关于__FILE__在符号链接环境中有多奇怪的行为,请在此处阅读:

从PHP 4.0.2起,_ FILE _总是包含已解析符号链接的绝对路径,而在旧版本中,它在某些情况下包含相对路径.

  • @Pierre:这清楚地表明,有时正确的答案不是合乎逻辑的答案.PHP或OP提供的错误报告错误并不是Jake的错.除非您了解所有细节(包括存在错误),否则正确的解决方案并不总是有意义的.无论如何,Jake关于为你的包含定义基本路径的建议肯定足以从OP获得信用.(顺便说一句,我的处理方式包括我自己,我总是使用绝对路径). (2认同)