将代码放入函数时出现500错误

时间:2011-12-29 14:26:13

标签: php function twitter-oauth

无法找到类似的主题,但这可能归结为不知道如何更新我的问题,所以就这样了。

我已经有了这个代码块,它将使用loadingwitter库发布到twitter:

<?php
include 'includes/EpiCurl.php';
include 'includes/EpiOAuth.php';
include 'includes/EpiTwitter.php';
include 'includes/tokens.php';

$twitterObj = new EpiTwitter($consumer_key, $consumer_secret);
$twitterObj->setToken($oauth_token, $oauth_secret);

$update_status = $twitterObj->post_statusesUpdate(array('status' => 'This is a test tweet!'));
$temp = $update_status->response;
?>

这是完美的,一切都很好,直到我这样做:

<?php
include 'includes/EpiCurl.php';
include 'includes/EpiOAuth.php';
include 'includes/EpiTwitter.php';
include 'includes/tokens.php';

function postTweet() {
    $twitterObj = new EpiTwitter($consumer_key, $consumer_secret);
    $twitterObj->setToken($oauth_token, $oauth_secret);

    $update_status = $twitterObj->post_statusesUpdate(array('status' => 'This is a sample tweet!'));
    $temp = $update_status->response;
}

postTweet();
?>

将代码置于函数内部会以某种方式破坏它并导致它返回500错误。有人能够解释这种行为并帮助我解决它吗?

提前致谢!

2 个答案:

答案 0 :(得分:2)

这很可能是因为所有的秘密和令牌变量都是在包含文件中的全局范围内定义的。你把它们移到了一个超出范围的函数中,其中一个函数调用它就无法处理空变量而不会出错。

全局访问它们,或将它们作为参数传递给您的函数。

推荐:将参数传递给函数

// Pass variables as parameters to your function
function postTweet($consumer_key, $consumer_secret, $oath_token, $oauth_secret) {
    $twitterObj = new EpiTwitter($consumer_key, $consumer_secret);
    $twitterObj->setToken($oauth_token, $oauth_secret);

    $update_status = $twitterObj->post_statusesUpdate(array('status' => 'This is a sample tweet!'));
    $temp = $update_status->response;
}

替代方案:使用global

替代解决方案,但不太优选的解决方案是使用global关键字(或$GLOBALS[]数组)。通常认为最佳做法是将它们作为参数传递给我,尽管如上所述。

function postTweet() {
   // Access them with the 'global' keyword
   global $consumer_key, $consumer_secret, $oath_token, $oauth_secret;

   $twitterObj = new EpiTwitter($consumer_key, $consumer_secret);
    $twitterObj->setToken($oauth_token, $oauth_secret);

    $update_status = $twitterObj->post_statusesUpdate(array('status' => 'This is a sample tweet!'));
    $temp = $update_status->response;
}

答案 1 :(得分:0)

$consumer_key$consumer_secret变量不在函数范围内。