Jquery在nginx上调用php,不起作用

时间:2015-09-10 22:18:29

标签: php jquery amazon-web-services nginx

我在亚马逊AWS上遇到了我的nginx网络服务器这个问题。

首先,这段代码在另一台服务器上运行和测试,但我需要迁移到我自己的服务器,这就是我遇到问题的地方。 我有一个带有以下jquery + php代码的html页面,它没有被执行或类似的东西:

<div class="widget widget-twitter-feed clearfix">
<h4>Twitter Feed</h4>
    <ul id="sidebar-twitter-list-1" class="iconlist">
        <li></li>
    </ul>

    <a href="https://twitter.com/coinnova_ok" class="btn btn-default btn-sm fright">Follow Us on Twitter</a>

    <script type="text/javascript">
        jQuery( function($){
        $.getJSON('include/twitter/tweets.php?username=coinnova_ok', function(tweets){
        $("#sidebar-twitter-list-1").html(sm_format_twitter(tweets));
        });
        });
    </script>

这是我在nginx上的虚拟主机配置:

server {
  listen          80;
  server_name localhost;

  location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include fastcgi_params;
  }

  location ~ \.html$ {
        root           html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.htm;
        include        fastcgi.conf;
  }

  location ~ \.js$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi_params;
  }
}

我还在/etc/php-fpm.d/www.conf

上更改了这些设置
security.limit_extensions = .php .html .js

我希望有人可以帮助我:)。

更多信息

这是需要执行的tweets.php脚本。我添加它只是fyi,但它也适用于另一台服务器:

<?php
session_start();

if( isset( $_GET['username'] ) AND $_GET['username'] != '' ):

    require_once('oauth/twitteroauth.php'); //Path to twitteroauth library

    $username = $_GET['username'];
    $limit = ( isset( $_GET['count'] ) AND $_GET['count'] != '' ) ? $_GET['count'] : 2;
    $consumerkey = "LAxZjcBtFOw1wYhJ2Tqm8w";
    $consumersecret = "0SyeOk44o70ya2EVweHgJtwqBkr6DaoO0CETToFKsI";
    $accesstoken = "329620819-0tbQsQ7yx9BV5E6SzPaP39UAlDBuUokwRqgw075H";
    $accesstokensecret = "iL0divFR8xjTWQj9de511YxBpKkduE8dcOCRRlMrM";

    function getConnectionWithAccessToken($cons_key, $cons_secret, $oauth_token, $oauth_token_secret) {
      $connection = new TwitterOAuth($cons_key, $cons_secret, $oauth_token, $oauth_token_secret);
      return $connection;
    }

    $interval = 600;

    $cache_file = dirname(__FILE__) . '/cache/' . $username . '_' . $limit;

        if (file_exists($cache_file)) {
                $last = filemtime($cache_file);
        } else { $last = false; }

        $now = time();

        if ( !$last || (( $now - $last ) > $interval) ) {

                $context = stream_context_create(array(
                        'http' => array(
                                'timeout' => 3
                        )
                ));

        $connection = getConnectionWithAccessToken($consumerkey, $consumersecret, $accesstoken, $accesstokensecret);
        $twitter_feed = $connection->get("https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=".$username."&count=".$limit);

                $cache_rss = serialize($twitter_feed);

                if (!empty($cache_rss)) {
                        $cache_static = fopen($cache_file, 'wb');
                        fwrite($cache_static, $cache_rss);
                        fclose($cache_static);
                }

                $rss = @unserialize(file_get_contents($cache_file));
        } else {
        $rss = @unserialize(file_get_contents($cache_file));
        }

    echo json_encode($rss);

endif;

?>

1 个答案:

答案 0 :(得分:0)

tweets.php可以看出,只有一点可以作为回复返回false

echo json_encode($rss);

这意味着,$rss变量始终为空,是false或者不能进行json编码。该变量设置在两行脚本中,每行都看起来相同:

$rss = @unserialize(file_get_contents($cache_file));

这意味着,路径$cache_file中的文件为空/不可访问。这引出了我们的观点,该文件被写入:

$cache_rss = serialize($twitter_feed);

if (!empty($cache_rss)) {
    $cache_static = fopen($cache_file, 'wb');
    fwrite($cache_static, $cache_rss);
    fclose($cache_static);
}

如果您在$cache_rss = serialize($twitter_feed)行之前添加以下代码:

print_r($twitter_feed);

访问include/twitter/tweets.php?username=coinnova_ok之后,您应该可以看到大量的推文。如果只打印一个值为false的变量,那么在twitter api中验证/获取推文时会出现问题。

Othervise,如果确实出现大字体,那么将提取的推文保存到缓存文件中会出现问题。该文件的路径如下所示:

$cache_file = dirname(__FILE__) . '/cache/' . $username . '_' . $limit;

因此,在包含脚本tweets.php的文件夹中,必须有文件夹cache,可以写入。

导航到服务器上的include/twitter/文件夹,创建cache文件夹(如果需要),并为其编写php脚本的访问权限(通常为07500770:所有者的完全权利,对所有者goup的完整/读取/执行。)

注意:在所有问题得到修复后,请不要忘记删除print_r($twitter_feed);行。