我在亚马逊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;
?>
答案 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
脚本的访问权限(通常为0750
或0770
:所有者的完全权利,对所有者goup的完整/读取/执行。)
注意:在所有问题得到修复后,请不要忘记删除print_r($twitter_feed);
行。