无法使用facebookphp-sdk更新状态:cand';t打开文件


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

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

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}

我不知道问题出在哪里。知道吗,伙计们???感谢

编辑:

@ceejayoz的回答对我帮助很大。我走错了路。但主要问题是CCD_ 1。如果ceejayoz没有向我展示这一点,我可能会花更多的时间来弄清楚。如果有办法接受两个答案,我也愿意接受ceejayoz。谢谢

原件:

最后,我决定从字符串中去掉起始@。所以我用了这个:

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

我没有找到解决方案,所以我使用了这条路径。如果你有任何其他解决方案,请张贴。

您的问题是消息以@开头。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) {
   .....
}