为什么这个require_once会失败?

时间:2016-09-21 14:01:12

标签: php facebook facebook-graph-api pear php-include

我正在使用PEAR的Services_Facebook-0.2.14 SDK,Facebook.php中的以下第一行失败:

require_once 'Common.php';
require_once 'Services/Facebook/Common.php';
require_once 'Services/Facebook/Exception.php';

带有日志消息:

  

[21-Sep-2016 13:41:46 UTC] PHP致命错误:require_once():失败   需要打开' Common.php'   (include_path =' / home / thehanfw / php / Services')in   第23行/home/thehanfw/php/Services/Facebook.php

在我的Facebook API客户端中,我使用以下行来访问SDK:

ini_set("include_path", "/home/thehanfw/php/Services");
require_once "Facebook.php";

在我的应用甚至找到Facebook.php之前,我已经在绝望中明确地设置了包含路径。 Common.php文件存在,我已注释掉require_once 'Services/Facebook/Common.php';,因为Services已经是包含目录,而我在原始代码中得到了完全相同的错误。

有趣的是,在我的客户端应用程序中出现HTTP ERR_TOO_MANY_REDIRECTS错误之前,此错误会连续快速记录20次。这是在共享主机上,PHP 5.6.22。

BREAKING:我觉得有趣的是我的客户端应用程序在我的开发机器上工作正常,但后来我意识到我后来才在我的电脑上安装了爆破的PEAR,而且应用程序正在运行针对直接从Facebook下载的SDK,名为php-graph-sdk-5.0.0。我不知道5.0.0 FB版本与0.2.14 PEAR版本是否相同,但是我已经清除了主机上的PEAR垃圾,并安装了FB SDK,它也适用于主持人。

1 个答案:

答案 0 :(得分:1)

PEAR包代码文件具有require_once语句,这些语句仅在包含路径中具有根包目录时才有效。 在您的情况下,包含路径应​​至少包含/home/thehanfw/php/,因为您(手动)将包解压缩到的位置。

手动提取PEAR包is not recommended除非你真的知道自己在做什么:

  

我们删除了这一部分,因为今天手动安装软件包需要更深入地了解软件包的组织方式以及安装过程中发生的情况。如果您确实需要在没有PEAR安装程序的情况下安装软件包,则应阅读开发人员指南(package.xml和package.xml 2.0)中有关package.xml的部分。

你显然没有,但失败了。

PEAR包最后一次发布于2010年,即6年前。最好使用官方API。