php pusher,php,pusher_Linux 下php使用 Pusher 遇到一个难题,php,pusher,php-linux-环境-开发 - phpStudy...

Linux 下php使用 Pusher 遇到一个难题

最近在给赏金猎人做新的网站的时候想使用 Pusher 做一个首页的吐嘈,我在本地测试都ok之后将它部署到了Linux上,可是打开之后却发现没法实现消息发出,打开Pusher的控制台察看信息是显示通道连接了,但是发送消息的事件没有执行。我打开本地的(本地的和部署的使用同一个Pusher应用),本地发的东西可以显示在部署的那个上面。看了半天都没找到问题所在。

整个项目的结构如下:

main.js 文件内容:

(function($){

var pusher = new Pusher('18f9924cb7ee44a01ec0'),

channel = pusher.subscribe('imgondar');

Pusher.log = function( msg ) {

if( console && console.log ) {

console.log( msg );

}

};

channel.bind('send_message', function (data) {

Snarl.addNotification({

title: data.name,

text: data.msg,

timeout: 5000

});

});

$('form').submit(function(){

var say = $('#message').val();

if ( say ) {

$.post('post.php', $(this).serialize());

$('#message').val('').focus();

}

return false;

});

})(jQuery);

post.php 文件内容:

require './lib/Pusher.php';

$app_id = '111087';

$app_key = '18f9924cb7ee44a01ec0';

$app_secret = '09c7dd1a71a92c90ce2d';

$pusher = new Pusher($app_key, $app_secret, $app_id);

$data = array(

'name' => htmlentities( getName().':' ),

'msg' => htmlentities(strip_tags($_REQUEST['message'])),

);

$pusher->trigger('imgondar', 'send_message', $data);

function getName(){

$name_array = array(0 => "小龙女",1 => "杨过",2 => "金庸",3 => "郭靖",4 => "黄蓉",5 => "欧阳锋",6 => "段誉",7 => "语嫣",8 => "虚竹",9 => "牧尘",10 => "Java",11 => "JavaScript",12 => "Python",13 => "C++",

14 => "HTML",15 => "什么鬼~~",16 => "想不出来了^^",17 => "阿列",18 => "就是想吐槽",19 => "路人甲",20 => "路人乙",21 => "跑龙套",22 => "主角",23 => "我是女主",24 => "我只是奴婢",25 => "请叫我容嬷嬷",26 => "我会降龙十八掌",27 => "小白",28 => "无语了!-_-",29 => "乔峰",30 => "不良人",

);

$index = rand(0, count($name_array)-1);

return $name_array[$index];

}

本地http://127.0.0.1/imgondarv8_test/访问之后点击发送,在浏览器看到如下效果:

因为我在 main.js 代码中让其输出日志,打开浏览器的控制台看到:

打开Pusher的控制台:

现在问题来了,我把通过 svn 把代码部署到了Linux服务器上,通过如下域名访问:

http://testgondar.helloarron.com/

点击发送后没有效果,Pusher控制台和浏览器控制台信息如下:

虽然连接了但是消息没有发送成功。

但是我用本地的 http://127.0.0.1/imgondarv8_test/ 发消息可以在部署好的那个什么接收到(毕竟使用的是同一个Pusher 应用),在浏览器控制台显示接受到的信息:

测试了半天就是post.php里面的$pusher->trigger('imgondar', 'send_message', $data);在Linux下面没有执行。

查看了Pusher.php文件的trigger函数:

public function trigger ( $channel, $event, $payload, $socket_id = null, $debug = false, $already_encoded = false )

{

$ch = curl_init();

if ( $ch === false ){

die( 'Could not initialise cURL!' );

}

# Add channel to URL..

$s_url = $this->settings['url'] . '/channels/' . $channel . '/events';

# Build the request

$signature = "POST\n" . $s_url . "\n";

$payload_encoded = $already_encoded ? $payload : json_encode( $payload );

$query = "auth_key=" . $this->settings['auth_key'] . "&auth_timestamp=" . time() . "&auth_version=1.0&body_md5=" . md5( $payload_encoded ) . "&name=" . $event;

# Socket ID set?

if ( $socket_id !== null ){

$query .= "&socket_id=" . $socket_id;

}

# Create the signed signature...

$auth_signature = hash_hmac( 'sha256', $signature . $query, $this->settings['secret'], false );

$signed_query = $query . "&auth_signature=" . $auth_signature;

$full_url = $this->settings['server'] . ':' . $this->settings['port'] . $s_url . '?' . $signed_query;

# Set cURL opts and execute request

curl_setopt( $ch, CURLOPT_URL, $full_url );

curl_setopt( $ch, CURLOPT_HTTPHEADER, array ( "Content-Type: application/json" ) );

curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );

curl_setopt( $ch, CURLOPT_POST, 1 );

curl_setopt( $ch, CURLOPT_POSTFIELDS, $payload_encoded );

curl_setopt( $ch, CURLOPT_TIMEOUT, $this->settings['timeout'] );

$response = curl_exec( $ch );

curl_close( $ch );

if ( $response == "202 ACCEPTED\n" && $debug == false ){

return true;

} elseif ( $debug == true || $this->settings['debug'] == true ) {

return $response;

} else {

return false;

}

}

我觉得可能是linux下的php环境没有开启curl模块,于是自己写了一个简单的抓取百度首页的例子,发现服务器上的curl是开启的。实在是找不到其他原因了,还请大神们给支支招。谢谢^^

相关阅读:

DOM事件绑定回调函数执行过程是什么?

gitlab webhook 设置

哪里有介绍angular-material的样式类?

brackets编辑器怎么设置换行符?

使用fatfree框架,debug=3,为什么log都打到了php_error.log里面?

图中红框内数据库关联符号是什么意思?

调试程序的时候暴露在console的参数信息不清除有什么危害?

使用PHP,当curl初始化时产生解析错误

react的super属性是指什么?

谷歌学术搜索结果中abstract不完整,完整信息搜索引擎不提供吗?

如何获得iframe里的document

z-index 和 translateZ(0)的疑问

pv量统计,a标签点击包括站内和站外的链接

web app可以设0.5px宽的边框吗

那些ORM的库要怎么解决+1-1这样时的安全问题

angularjs怎样把有PHP代码的共用部分提出来

批量查询域名的注册状态

iOS开发, 如何通过HTTP Post发送这个符号"&"到服务器?

php站点,点击提交按钮到返回结果都经历了哪些过程?

ionic有没有其他一些开源项目?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值