Ошибка 500 при вводе кода в функцию - PullRequest
2 голосов
/ 29 декабря 2011

не удалось найти похожую тему, но это может сводиться к тому, что я не знаю, как решить мою проблему, поэтому вот так.

У меня есть этот блок кода, который будет публиковаться в твиттере с помощьюбиблиотека epitwitter:

<?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 ]

2 голосов
/ 29 декабря 2011

Скорее всего, это связано с тем, что все переменные секрета и токена определены в глобальной области видимости во включаемых файлах.Вы переместили их в функцию вне области видимости, и одна из функций, вызываемых внутри нее, не может обрабатывать пустые переменные без ошибок.

Доступ к ним глобально или передача их в качестве параметров вашей функции.

Рекомендуется: передать параметры в функцию

// 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;
}
0 голосов
/ 29 декабря 2011

$consumer_key и $consumer_secret переменные не входят в область действия функции.

...