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

时间:2015-02-14 12:39:12

标签: php facebook facebook-graph-api laravel-4 facebook-php-sdk

我正在尝试使用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

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

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}

我不知道问题是什么。任何想法的人??? 感谢

2 个答案:

答案 0 :(得分:1)

修改:

@ceejayoz的回答对我很有帮助。我正在走错路。但主要问题是@。如果ceejayoz没有告诉我这一点,我可能会花更多的时间来弄明白。如果有办法接受两个答案,我也愿意接受ceejayoz。感谢。

<强>原始

最后我决定从字符串中切断起始@。所以我用过这个:

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

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

答案 1 :(得分:0)

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

您应该可以通过将FacebookRequest参数与http_build_query包装在一起来解决此问题:

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