PHP递归函数内的静态变量

作者: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

win和linux的php异或运算结果不同

作者:matrix 发布时间:2015-06-17 分类:兼容并蓄 零零星星

一个获取key的函数(模拟js的php代码)在本地测试成功,而在服务器上失败。
逐行die()之后发现问题在于$b ^=4294967295;之前获取的$b都没问题,可到了这里就结果完全不一样。

win

<?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

将BCS的bucket文件保存到本地[PHP]

作者: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 安全加密協定教學

y.qq.com-php获取QQ音乐外链源码

作者:matrix 发布时间:2015-05-18 分类:零零星星

QQ音乐
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-04-30 分类:兼容并蓄 零零星星

我是2月底报的名,蜀乐山地区。昨天预约的考场280元,开了3圈过了一圈。
主要还是心态放好,其实很容易过的,平时练习也不能少。

1.倒车入库

我们驾校场地很烂杆,一点都不标准,不过倒车入库必须强加练习,不求压线。要知道怎么修整。乐山三禾驾校考点的库与平时的练习场地有很大的出入 。入库前打满方向盘必须提前。出库后引擎盖过边线稍微迟一点打满轮。车身切忌摆正,内侧稍微宽些,外侧1M多点就可以吧。
http://pan.baidu.com/s/1gd3tg23

2.坡道定点停车

我是这个上面扣的20分,熄火一次,车头位置不准确。
参考:http://pan.baidu.com/s/1kTIeguF
http://tieba.baidu.com/p/1997549261
http://pan.baidu.com/s/1gdkwsV5

3.侧方位停车(在右侧)

这个稍微简单些,跟在驾校练习一样的。右反视镜看不到库边线右打满轮,观察左后视镜看到第二个库角前回正,左后轮压线之前打满轮。车正即停。
http://pan.baidu.com/s/1mgl8arm

4.直角转弯(左转弯)

尽量让车靠近有右边线30CM及以内,左后视镜与直角平齐时(或者门把手位置与直角平齐)向左打满轮。
http://pan.baidu.com/s/1eQxp7Fk

5.S路行驶

尽量让车靠近弯道的外侧,避免内侧后轮压线。其实和直角转弯差不多都是尽量使用最大转弯半径。
http://pan.baidu.com/s/1eQxp7Fk

6.单边桥

左单边桥可以对点位,很好上的,左肩膀,左脚都行,或者左雨刮器的第一个铆钉处位置挨着左单边桥左侧。右单边桥的话多加练习,凭感觉估计好右轮的位置。也可以对点位的,左雨刮器的结点(雨刮杆和雨刮片的铆钉点),左轮下左单边桥后向右打方向盘(一般是一圈吧),左雨刮器的结点跑到有单边桥右侧过后向左打方向盘让结点大致挨着右单边桥,右前轮上桥后等待后轮上桥,慢慢回正,可以向左稍微修点(因为一般上右桥后车身都是有点偏右)。过单边桥速度要适中,尽量慢速,左单边桥前轮下桥后需要让车身在短距离内会正方向,这样才不轻易掉右桥。
参考:http://pan.baidu.com/s/1qWp3ChY
http://m.bendibao.com/show315745.html
http://sz.bendibao.com/xueche/201413/590332.htm
我是80分正好及格,定点停车扣了20分。这里给需要的童鞋一些小小建议。仅供参考!

windows系统密码查看神器-mimikatz

作者:matrix 发布时间:2015-03-04 分类:兼容并蓄 零零星星

mimikatz
之前不知道还有这玩意,竟然能够查看Windows系统的密码。真正的神器!法国一个牛人写的轻量级调试器-mimikatz

作者博客:http://blog.gentilkiwi.com/mimikatz
github地址:https://github.com/gentilkiwi/mimikatz
下载页面:https://github.com/gentilkiwi/mimikatz/releases/latest

2.0 alpha 20150122百度网盘:http://pan.baidu.com/s/1eQzpmQe
目前最新的是2.0版本20150122更新,支持xp及以上系统包括32和64位。Windows10貌似也不在话下(Windows 10 Constant),不过我只测试了win8.0 64bit系统是没有问题的

步骤:

下载并解压缩以管理员权限运行mimikatz.exe,逐行输入命令
privilege::debug
sekurlsa::logonpasswords
如果成功执行sekurlsa::logonpasswords命令则回显系统信息,这是明文包含密码的

如果成功最后一个命令则回显系统信息
这个工具不仅仅局限于查看windows密码,可以提升进程权限 注入进程 读取进程内存等等
参考:http://www.52pojie.cn/thread-268297-1-1.html
http://lcx.cc/?i=2265

win系统找回Google Chrome浏览器里的书签

作者:matrix 发布时间:2015-02-19 分类:零零星星

chrome中误删掉或者清空书签之后是可以还原的。但是如果你误删之后清空了浏览器数据那就不在这个方法范围之类。

步骤

win+r运行:
Windows XP:
%USERPROFILE%\Local Settings\Application Data\Google\Chrome\User Data\Default\ Windows Vista/Windows 7 以上:
%LOCALAPPDATA%\Google\Chrome\User Data\Default\
打开chrome目录之后找到Bookmarks和Bookmarks.bak这两个文件。
Bookmarks文件为当前的书签
Bookmarks.bak文件为系统自动备份的书签

还原操作

把 Bookmarks.bak 复制一份,重新命名并替换原本的 Bookmarks
再重启浏览器就会看到误删操作之前的书签了。
参考:http://free.com.tw/restore-google-chrome-bookmarks-bak/

百度音乐人songID

作者:matrix 发布时间:2015-02-06 分类:零零星星

起因

添加百度音乐人外链的时候发现百度音乐人songID和百度音乐songID是可以互相转换的。
像y.baidu.com/song/170870中的170870值可以用music.baidu.com的接口(http://play.baidu.com/data/music/songlink?songIds=音乐ID)获取外链。

但是直接打开http://play.baidu.com/data/music/songlink?songIds=170870是找不到任何mp3链接的,
只有转换170870这个值才能让music.baidu.com的接口正常使用。

经过

打开y.baidu.com/song/170870点击播放,浏览器会打开百度音乐盒播放音乐,而浏览器的地址栏会出现&__a=73989870,音乐盒就是靠这个数字来定位音乐人的mp3播放。
Ctrl+F找遍相关js文件发现:
return encodeURIComponent(Number(a) + 73819e3);很明显,这就是所谓的加减法嘛 :mrgreen:
音乐人songID+73819e3 = 百度音乐songID

结果