无法使用 facebook PHP sdk 更新状态:无法打开文件

unable to update status using facebook PHP sdk: couldn't open file

我正在尝试使用 Facebook PHP SDK 更新 Facebook 状态。 我已经使用以下代码多次更新了我的状态:

try {
    $session = new FacebookSession($page_token);
    $session->validate();
    (new FacebookRequest($session, 'POST', '/' . $id . '/feed', array(
            'message' => $message
     )))->execute();
} catch(FacebookRequestException $e) {
   .....
}

但在我尝试更新此状态时出现错误:

RiversofGrue: Returns To The Palace http://clc.li/cxG  #Grueheads #horror @crashpalace

令人惊讶的是,我已经成功地从我的本地主机更新了这个状态。但在生产服务器中它抛出错误。 错误是:

Error Message: couldn't open file "RiversofGrue: Returns To The Palace http://clc.li/cxG  #Grueheads #horror @crashpalace"
File: .../vendor/facebook/php-sdk-v4/src/Facebook/HttpClients/FacebookCurlHttpClient.php
Error Code: 26
Line: 150
TraceAsString: #0 .../vendor/facebook/php-sdk-v4/src/Facebook/FacebookRequest.php(248): Facebook\HttpClients\FacebookCurlHttpClient->send()
#1 .../Demo.php(146): Facebook\FacebookRequest->execute()
#2 .../DemoDemo.php(31): Demo->execute()
#3 .../vendor/laravel/framework/src/Illuminate/Console/Command.php(112): FacebookJobCommand->fire()
#4 .../vendor/symfony/console/Symfony/Component/Console/Command/Command.php(253): Illuminate\Console\Command->execute()
#5 .../vendor/laravel/framework/src/Illuminate/Console/Command.php(100): Symfony\Component\Console\Command\Command->run()
#6 .../vendor/symfony/console/Symfony/Component/Console/Application.php(889): Illuminate\Console\Command->run()
#7 .../vendor/symfony/console/Symfony/Component/Console/Application.php(193): Symfony\Component\Console\Application->doRunCommand()
#8 .../vendor/symfony/console/Symfony/Component/Console/Application.php(124): Symfony\Component\Console\Application->doRun()
#9 .../artisan(59): Symfony\Component\Console\Application->run()
#10 {main}

不知道是什么问题。任何想法伙计们??? 谢谢

您的问题是邮件以 @ 开头。 cURL 将 POST 请求中以 @ 开头的任何参数视为文件名,并尝试加载和发送该数据的文件内容作为该参数。这对于文件上传之类的事情非常有用,但你的情况有问题。

你应该可以通过用 http_build_query 包装你的 FacebookRequest 参数来解决这个问题,如下所示:

try {
    $session = new FacebookSession($page_token);
    $session->validate();
    (new FacebookRequest($session, 'POST', '/' . $id . '/feed', http_build_query(array(
            'message' => $message
     ))))->execute();
} catch(FacebookRequestException $e) {
   .....
}

编辑:

@ceejayoz 的回答对我帮助很大。我在错误的道路上工作。但主要问题是 @。如果 ceejayoz 没有告诉我这一点,我可能会花更多的时间来弄清楚。如果有办法接受两个答案,我也很乐意接受 ceejayoz。谢谢。

原文:

最后我决定从字符串中删除开头的@。所以我用过这个:

if(strpos($message, "@") === 0){
    $message = substr($message, 1);
}

我没有找到解决方案,所以我使用了这个路径。如果您有任何其他解决方案,请 post.