php杂项

php是最好的语言。用来制作平台认证、充值的功能的时候,很方便编写。游戏服务器的充值一般都是剥离出来的。游戏开发员一般都对外提供一些类似gm指令的接口。而对于充值认证这种和平台相关性很大的东西,使用php来实现。也方便给外界的平台做接口。php的资料是真的多。这里主要将一些技术点收集整理起来(这里只有套路,那这就能用)。最近和一些高级程序员聊天的时候发现,在找错误的时候,大量的问题都是可以通过日志中的异常找到错误的原因。
在http方式中有两种请求方式:GET/POST 二者区别
在做充值验证的时候,常常会涉及到的一些技术:

获得GET/POST的数据

参考
1. $_REQUEST

php中$_REQUEST可以获取以POST方法和GET方法提交的数据,但是速度比较慢

  1. $_GET

用来获取由浏览器通过GET方法提交的数据。GET方法他是通过把参数数据加在提交表单的action属性所指的URL中,值和表单内每个字段一一对应,然后在URL中可以看到,但是有如下缺点:

  1. 安全性不好,在URL中可以看得到

  2. 传送数据量较小,不能大于2KB。

  3. $_POST

用来获取由浏览器通过POST方法提交的数据。POST方法他是通过HTTP POST机制,将表单的各个字段放置在HTTP HEADER内一起传送到action属性所指的URL地址中,用户看不到这个过程。他提交的大小一般来说不受限制,但是具体根据服务器的不同,还是略有不同。相对于_GET方式安全性略高

  1. REQUEST _POST、$_GET 的区别和联系

REQUEST[""] _POST[“参数”] GET[""], _REQUEST[“参数”]比较慢。通过post和get方法提交的所有数据都可以通过$_REQUEST数组[“参数”]获得

php变量和数据类型

变量参考
里面作用域这块还是有些意思。
数据类型参考
数据结构非常简单,里面的array类型有些像lua的table。可以当数组,也能当map啊。

<?php
echo "hello world\n";
$cars=array("BMW"=>12);
echo $cars["BMW"]."\n";
$p=array(12,312);
echo $p[0];
?>

output:
hello world
12
12

socket client

官方参考文档
网友提供文档
一般都会要通过php来连接游戏服务器来通知发奖之类。
(PHP 4 >= 4.1.0, PHP 5, PHP 7)
自己仿照写的实例:

<?php
set_time_limit(0);
error_reporting(E_ALL);
$port = 1935;
$ip = "127.0.0.1";
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket < 0) {
    echo "socket_create() failed: reason: " . socket_strerror($socket) . "\n";
}else {
   echo "OK.\n";
}
$result = socket_connect($socket, $ip, $port);
if(!socket_write($socket, $in, strlen($in))) {
    echo "socket_write() failed: reason: " . socket_strerror($socket) . "\n";
}
$out = socket_read($socket, 8192);
?>

处理二进制数据

参考官方
w3school参考

<?php
$binarydata = pack("nvc*", 0x1234, 0x5678, 65, 66);
?>

这个用法很像python里面的pack用法。

sha1

参考文档

<?php
$str = "Shanghai";
echo sha1($str);

if (sha1($str) == "b99463d58a5c8372e6adbdca867428961641cb51")
  {
  echo "<br>I love Shanghai!";
  exit;
  }
?>

md5验签

<?php
define("KEY", "c1b2a5ea17d4600a80147f35d94681ac");
function checkToken($token,$uid,$c_sign)
{
     $sign=md5($token.$uid.KEY);
     return $sign==$c_sign;
}
?>

mysql用法

php直接内置了mysql操作的函数
w3school参考
直接贴例子

<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

// some code

?>
<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("my_db", $con);

$result = mysql_query("SELECT * FROM Persons ORDER BY age");

while($row = mysql_fetch_array($result))
  {
  echo $row['FirstName'];
  echo " " . $row['LastName'];
  echo " " . $row['Age'];
  echo "<br />";
  }

mysql_close($con);
?>

msgpack-for-php

homesite
PHP 5.0 +
Install
Install from PECL
Msgpack is an PECL extension, thus you can simply install it by:
pecl install msgpack
Compile Msgpack from source

$/path/to/phpize
$./configure 
$make && make install

Example

<?php
$data = array(0=>1,1=>2,2=>3);
$msg = msgpack_pack($data);
$data = msgpack_unpack($msg);
?>

rsa 签名

php支付宝接入

<?php
/**
 * 验证签名
 * @param $prestr 需要签名的字符串
 * @param $sign 签名结果
 * return 签名结果
 */
function rsaVerify($prestr, $sign) {
    $sign = base64_decode($sign);
    $public_key= file_get_contents('rsa_public_key.pem');
    $pkeyid = openssl_get_publickey($public_key);
    if ($pkeyid) {
        $verify = openssl_verify($prestr, $sign, $pkeyid);
        openssl_free_key($pkeyid);
    }
    if($verify == 1){
        return true;
    }else{
        return false;
    }
}
?>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值