Facebook Business PHP SDK运行示例报CrashReporter错误如何解决
问题根因
该报错由两个常见原因导致:
- PHP版本与SDK版本不兼容:Facebook Business PHP SDK 最新版本要求PHP 7.4及以上运行环境,PHP 7以下版本中
ErrorException未实现Throwable接口,会触发参数类型不匹配的报错。 - SDK自身CrashReporter模块存在bug:部分版本的SDK未对崩溃上报的异常类型做兼容处理,参数强制声明为
Throwable但实际传入了未实现该接口的异常实例。
解决方案
按优先级选择以下方式修复:
- 优先升级PHP版本到7.4及以上,执行命令
php -v可查看当前PHP版本,升级后重新运行脚本即可解决该问题。 - 若暂时无法升级PHP版本,可通过禁用SDK的崩溃上报模块规避问题,在Api初始化代码后添加禁用CrashReporter的代码即可,修正后的完整代码如下:
<?php require_once __DIR__ . '/../vendor/autoload.php'; use FacebookAds\Api; use FacebookAds\Logger\CurlLogger; use FacebookAds\Object\AdAccount; use FacebookAds\Object\Campaign; use FacebookAds\Object\Fields\CampaignFields; $app_id = "{app-id}"; $app_secret = "{appsecret}"; $access_token = "{access-token}"; $account_id = "act_{{adaccount-id}}"; Api::init($app_id, $app_secret, $access_token); // 禁用崩溃上报模块,规避类型不匹配报错 Api::getInstance()->disableCrashReporter(); $account = new AdAccount($account_id); $cursor = $account->getCampaigns(); // 遍历对象 foreach ($cursor as $campaign) { echo $campaign->{CampaignFields::NAME}.PHP_EOL; }
- 若需要保留崩溃上报功能,可手动修改
vendor/facebook/php-business-sdk/src/FacebookAds/CrashReporter.php文件,将第167行buildParamsFromException方法的参数类型声明从Throwable修改为Exception,兼容传入的ErrorException实例。
内容的提问来源于stack exchange,提问作者Fernando
相关产品推荐
相关产品推荐

