作者:matrix
发布时间:2018-03-31
分类:零零星星
项目中有需要将统一的json接口数据转换为驼峰式字段名,但是网上的确没找到能解决的代码。
还好难度不大,直接正则替换就好。代码都是去年写的了,一直放在有道云笔记里面,早就想拉出来分享下,趁着还是3月份 补一片文章来占位。
代码是php的,其他语言同理用正则替换解决。
/**
* json编码处理 传入数组
* json字段名统一输出为驼峰式
* @param $data
* @return array
*/
protected function json_encode($data)
{
$data = json_encode($data);
return preg_replace_callback('/[_]([a-zA-Z])(?=[^"]*?":)/',
function ($matches) {
return strtoupper($matches[1]) ;
}, $data);
}
说明:
代码不需要过多解释,传入数组数据 结果值会返回json字符,字段名推统一替换为驼峰式。
核心在于[_]([a-zA-Z])(?=[^"]*?":)
的正则表达式
PEACE~
作者:matrix
发布时间:2016-12-31
分类:零零星星
类似于TP5框架的软删除功能
软删除的作用就是把数据加上删除标记,而不是真正的删除,同时也便于需要的时候进行数据的恢复。
这里以数据库表Dynamics为例
执行SQL语句给表新建字段delete_time:
ALTER TABLE sx_dynamics ADD `delete_time` char(13) DEFAULT NULL COMMENT '删除时间';
新建Model层文件
<?php
/**
* Created by PhpStorm.
* User: pang
*/
namespace Home\Model;
use Think\Model;
use Think\Page;
class DynamicsModel extends Model
{
/**
* 重写Model删除方法 实现TP5类似的软删除
*
* @param bool $trueDel 是否真实删除数据
* @return mixed
*/
public function delete($trueDel = false)
{
if ($trueDel) {
return parent::delete();
}
$data['delete_time'] = time();
return parent::save($data);
}
}
在Controller层
//使用D()方法实例化Model 调用重写的delete 软删除方法
D('dynamics')->where($w)->delete();
查询的where条件:
$where['delete_time'] = array('exp', 'IS NULL');//没有删除的数据
$where['delete_time'] = array('exp', 'IS NOT NULL');//已经删除的数据
-EOF-
for mac
作者:matrix
发布时间:2015-10-29
分类:PHP
苏宁云盘的下载速度还是不错的,之前获取下载地址很简单。现在必须要求用户登录才能办到,难度也是增加不少。还好suning没做绝。GOOD LUCK!
提示: 回复可见网盘地址
源码
阅读剩余部分 »
作者:matrix
发布时间:2015-06-20
分类:兼容并蓄 零零星星
//静态变量的例子
/**
* 将数组转换为字符
*
* 用于缓存
*
* @param $data
* @return string
*/
function philnaArray2String($data, $returns = '')
{
static $t = 1;
$tabType = " ";
$tab = str_repeat($tabType, $t);
$data = (array)$data;
foreach ($data as $key => $value) {
if (is_array($value)) {
$t++;
$returns .= "$tab'" . $key . "' => array(\n" . philnaArray2String($value) . "$tab),\n";
} else {
if (!is_bool($value)) {
$value = "'" . addslashes($value) . "'";
}
$returns .= "$tab'" . $key . "' => $value,\n";
}
}
$returns = substr_replace($returns, '', -2, -1);
return $returns;
}
说明:
上面php代码中的$t被static修饰,即为静态变量
静态变量在函数执行完毕后不会释放,会继续累加下去
赶脚非常合适在递归函数中用
参考:http://blog.csdn.net/shaerdong/article/details/8545874
作者:matrix
发布时间:2015-06-17
分类:兼容并蓄 零零星星
一个获取key的函数(模拟js的php代码)在本地测试成功,而在服务器上失败。
逐行die()之后发现问题在于$b ^=4294967295;之前获取的$b都没问题,可到了这里就结果完全不一样。
<?php
$a = -38622 72608;
$b = 471468;
$c = $a ^ $b;
echo $c;
//Q1:
//本地这是5.2.14的php,Win,显示432886796;
//服务器上5.2.14的php,linux,显示-3862080500;
//Q2:如果将^ 换成xor
//本地显示-3862272608
//服务器显示-3862272608
?>
真是狗日的xor仙人板板。为什么换成xor结果和^又不同。
难道xor不是异或。。。 😕
Q1:幸好我不是第一个发现。算是有答案:
php中一个整数能表示的范围是2147483647~-2147483647
在linux环境下,php整数溢出的时候,其结果是不可靠
php提供了GMP库进行精确计算大数据
如果你的php开启了GMP:gmp_xor()进行xor运算
Q2:无解
将^ 换成xor运算win和linux的结果都一样。但是为毛线它又和^的结果不同。。。
应该也是整数溢出吧。。。懒得想了
参考:
php异或运算的不可靠性
http://php.net/manual/zh/ref.gmp.php
http://bbs.csdn.net/topics/390566090
作者:matrix
发布时间:2015-06-03
分类:兼容并蓄 零零星星
收到百度BCS 6月30日停服提醒邮件,说是要停止服务,请自重。让咱BCS迁移到BOS...
BCS的bucket是以前创建bae时设置的,保存了一些图片文件
怎样把云存储的文件备份到本地是一个问题啊。毕竟一个一个下载太麻烦,文件有些多。。。
BCS控制台:http://developer.baidu.com/console#app/project
打开BCS控制台可以查看你的bucket名称以及API Key 和Secret Key。如果里面的文件有点多,且你想保存下来
下载 :http://pan.baidu.com/s/1mgMhp92
使用说明:
请确保解压后有个空的TTSEE文件夹,它用来存放下载的文件
只能保存一个bucket里面的文件,bucket有多层文件夹应该(我没试过)能正常使用的。
//$bcsobj->list_object_by_dir($bucket,'/',$list_model = 2);
解压后配置好bcs/conf-inc.php参数:项目对应的AK 公钥和SK私钥(百度开发者中心里复制)
调用:127.0.0.1/download.php?bucket=bucket名称
php中用到了file_put_contents函数:
$file = file_get_contents('http://bcs.duapp.com/newbuck'.$objest);//读取远程文件
file_put_contents('TTSEE'.$objest,$file);//保存到同级TTSEE目录
参考:
http://www.cnblogs.com/m199/p/3450675.html
http://www.jb51.net/article/57127.htm
PS:
150710后续更新
把bcs文件下载到本地电脑后再上传到主机空间。
之后用sql语法批量替换旧url。
UPDATE wp_posts
SET post_content = ( Replace (post_content, 'bcs.duapp.com/newbuck/', 'www.hhtjim.com/wp-content/uploads/2015/bcsfile/') )
WHERE Instr(post_content, 'jpeg') > 0
OR Instr(post_content, 'jpg') > 0
OR Instr(post_content, 'gif') > 0
OR Instr(post_content, 'png') > 0
参考:
在 WordPress 設定 HTTPS,強制使用 SSL 安全加密協定教學
作者:matrix
发布时间:2015-05-18
分类:零零星星
MP3接口
http://tsmusic24.tc.qq.com/{音乐ID}.mp3
http:/ /stream.qqmusic.tc.qq.com/{音乐ID}.mp3
http:/ /stream{1-30都可以}.qqmusic.qq.com/{音乐ID}.mp3
http://tsmusic128.tc.qq.com/{音乐ID+30000000}.mp3 (请计算出结果)
QQ音乐高品质ogg
http://tsmusic128.tc.qq.com/{音乐ID+40000000}.ogg (请计算出结果)
M4A接口
http://tsmusic24.tc.qq.com/{音乐ID}.m4a
http://thirdparty.gtimg.com/{音乐ID}.m4a?fromtag=38
http://thirdparty.gtimg.com/C100{音乐MID}.m4a?fromtag=38
http://cc.stream.qqmusic.qq.com/C200{音乐MID}.m4a?vkey={VKEY的值}&guid=1830679348
过程
示例获取单曲页面的MP3或M4A文件链接
http://y.QQ.com/#type=song&mid=002G0sJY2wThyx
其中的002G0sJY2wThyx就是歌曲的mid
打开上面的URl浏览器会加载iframe框架http://s.plcloud.music.qq.com/fcgi-bin/fcg_yqq_song_detail_info.fcg?songmid=002G0sJY2wThyx
Ctrl +U查看源码
var g_SongData = { id: 7168586, songmid: '002G0sJY2wThyx', songname: '喜欢你', singer:'G.E.M. 邓紫棋', singerid:13948,singermid:'001fNHEf1SFEFN',albumname:'喜欢你', albumid:654246,albummid:'000cFPKx3ZGzks', status:31, fnote:0};/*status:非0(true)表示正常歌曲,0(false)表示下架歌曲或者歌曲不存在*/
说明:其中的7168586就是对应歌曲的id,而002G0sJY2wThyx是歌曲的mid,每首歌曲的信息都不同,这需要使用正则匹配数据
php代码:
<?php
$u = $_GET['u'];
$type = $_GET['t']?$_GET['t']:'mp3';
$con = 'http://s.plcloud.music.qq.com/fcgi-bin/fcg_yqq_song_detail_info.fcg?songmid='.$u;
preg_match('|var g_SongData = ({.*});|',file_get_contents($con),$data);
$obj = json_decode(format_ErrorJson(iconv('GBK', 'UTF-8', $data[1])));
$id = $obj->id;
//$mid = $obj->songmid;
$url = 'http://tsmusic24.tc.qq.com/'.$id.'.'.$type;
header('Location: '.$url);
function format_ErrorJson($data)
{
$con = str_replace('\'','"',$data);//替换单引号为双引号
$con = preg_replace('/(\w+):[ {]?((?<YinHao>"?).*?\k<YinHao>[,}]?)/is', '"$1": $2',$con );//若键名没有双引号则添加
return $con;
}
说明:
上面代码只是用了MP3和M4A的第一种接口
代码保存为php文件,调用/xxx.php?u=音乐ID&t=格式
例如001yJypt4E8GW0歌曲的m4a地址
/xxx.php?u=001yJypt4E8GW0&t=m4a
阅读剩余部分 »
作者:matrix
发布时间:2015-05-17
分类:兼容并蓄
我之前不会编写函数,都是用的别人做的。后来慢慢学会就逐步添加想要的功能,但是问题出现了。
我修改的函数(用于curl抓取页面)的相关设置太多,导致函数的形参多的冒泡,使用起来很麻烦
function curl_get($url, $re=0,$ua=0,$ip=1,$post=0,$followLocation=0......){}//像这样
curl_get($url, 0,0,0,$post,0,1,0......)//每次调用的时候很蛋疼
最近难以忍受调用这种形式的函数,遂修改下
function curl_get($url, $array=array('re'=>0,'ua'=>0,'ip'=>1,'post'=>0,followLocation=>0,......)){}
刚开始没发现使用上有问题,但是后来真闯到鬼了,明明默认的形参是ip=1,但是打死都没反应
curl_get($url, $array=array('post'=>0))
后来知道是怎么回事:调用函数时的array('post'=>0)参数覆盖了形参$array=array('re'=>0,'ua'=>0,'ip'=>1...),等于是这样的话除了设置的post数组,其他的数组都没有设置(包括形参)。。。好吧,看下面解决办法
解决方案1
function curl_get($url, $array=array())
{
$defaultOptions = array(
're'=>0,
'ua'=>0,
'ip'=>1,
'post'=>0,
'followLocation'=>0,
//......
);
$array = array_merge($defaultOptions, $array);
//do......
}
解决方案2
function curl_get($url,$str='') {
$str_deaful='re=0&ua=0&ip=1&post=0&followLocation=0...';
parse_str($str_deaful,$arr);
parse_str($str,$arr2);
$array = array_merge($arr,$arr2);
//do......
}
参考:http://segmentfault.com/q/1010000000192291
- 1
- 2
- 3
- 4
- 5
- 6