1. 1
  2. 1
  3. 1
  4. 1
  • 欢迎您
    对接接口问题(遇到的坑得分享)
    sxy 2019-04-17 技术语录

    787

    这是一套对接Api接口得代码,其中毫秒数得求法,还有就是这个接口对方是Java写得接口,
    所以数组形式不应该是‘=>’,而是‘:’,键值对以冒号得形式出现,通过header头传参数,
    (http通信里,除了放header里,默认就是都放入body里的)

    <?php


    //字节数组转换

    function stringToByteArray($str,$charset) {

     

        $str = iconv($charset,'UTF-8',$str);

        preg_match_all('/(.)/s',$str,$bytes); 

        $bytes=array_map('ord',$bytes[1]) ;

        return $bytes;

     

    }

    //毫秒:

    function msectime() {

    list($msec, $sec) = explode(' ', microtime());

    $msectime = (float)sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000);

    return $msectime;

    }

    //(毫秒得计算,让我找了好长时间,虽然方法很多,最后选择了这个方法)



    $signature = sha1($signature);

    $url='http://123456.com';

    $postData=array(

    'a'=>1,

    'b'=>3,

    'c'=>1,

    'd'=>'aaa',

    );

    $postJosnData = json_encode($postData);

    $headers = array(

    'Content-Type: application/json; charset=utf-8',

           ' Content-Length: ' . strlen($postJosnData),

           'shijianchuo:'.$a,

           'qianming:'.$b,

    );


     $ch = curl_init();

    // 添加apikey到header

    curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);

    curl_setopt($ch,CURLOPT_HEADER,false);

    curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,120);

    curl_setopt($ch, CURLOPT_POSTFIELDS, $postJosnData);

    curl_setopt($ch,CURLOPT_HTTPHEADER,$headers);

    curl_setopt($ch,CURLOPT_URL,$url);

    $response = curl_exec($ch);

    if($error=curl_error($ch)){

        die($error);

    }

    curl_close($ch);

    echo $response;


    ?>





  • 欢迎您
    MySQL运行存储过程出现1292错误
    sxy 2019-04-10 技术语录

    317

    在navicat上远程连接MySQL,运行存储过程时传入了一个时间参数‘0000-00-00 00:00:00’,发生如下错误 

    1292 - Incorrect datetime value: '0000-00-00 00:00:00' for column 'targetTime' at row 1


    官方文档上说明MySQL允许将’0000-00-00’保存为“伪日期”,但是MySQL有一个NO_ZERO_DATE SQL模式,这个模式默认是打开的,不允许产生伪日期,所以要关掉这个选项。执行SQL语句: 


    set global sql_mode='STRICT_TRANS_TABLES,STRICT_ALL_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER';


    使用show variables like '%sql_mode%';查看关于sql_mode的变量,如果没有NO_ZERO_IN_DATE和NO_ZERO_DATE就说明修改成功

    --------------------- 

    原文:https://blog.csdn.net/magius/article/details/66970486 



  • 欢迎您
    Composer安装的曲折道路
    sxy 2019-01-21 技术语录

    1203

    由于PHP框架laravel安装,运行需要composer安装搭环境,所以开始了composer的安装路途

    Composer下载地址下面有

    1、PHP版本太低

    第一次安装composer安装成功,但运行composer install时,提示我PHP版本太低,我当时是php5.5.12,然后我就下载了一个7.2.14

    image.png

    下载链接:https://windows.php.net/download/

    2、php_xdebug-2.6.0-7.2-vc15-x86_64.dll不支持

    下载完PHP之后,.将原来版本的php5.5.12文件夹中的,php.ini , phpForApache.ini , wampserver.conf 文件 复制到 php7.1.5 文件夹中。

     修改 php.ini , phpForApache.ini 两个文件, 将两个文件中所有的 php5.5.12 替换成 php7.1.5

     

    修改wampserver.conf文件, 如果你的apache版本是 2.2X 那么修改

    $phpConf['apache']['2.2']['LoadModuleName'] = 'php5_module';$phpConf['apache']['2.2']['LoadModuleFile'] = 'php5apache2_2.dll';

     

    $phpConf['apache']['2.2']['LoadModuleName'] = 'php7_module';$phpConf['apache']['2.2']['LoadModuleFile'] = 'php7apache2_2.dll';

    如果你的apache版本是 2.4 那么修改

    $phpConf['apache']['2.4']['LoadModuleName'] = 'php5_module';$phpConf['apache']['2.4']['LoadModuleFile'] = 'php5apache2_4.dll';

     

    $phpConf['apache']['2.4']['LoadModuleName'] = 'php7_module';$phpConf['apache']['2.4']['LoadModuleFile'] = 'php7apache2_4.dll';

    wamp/bin/apache/apache2.4.9/bin 目录下,找到 php.ini 文件,将其删除。

    wamp/bin/apache/apache2.4.9/conf 目录下,找到httpd.conf 文件

     查找LoadModule, 将其改为。

    LoadModule php7_module "D:/wamp/bin/php/php7.1.5/php7apache2_4.dll"

    3、接下来就是讨厌得一步,每次提示zend_extension错误

    我下载了无数次,我最后选择Xdebug2.6.0,要看清楚电脑64位还是32

    下载地址:https://xdebug.org/download.php

     

    4、'track_errors' 提示error

    开始运行composer-setup.exe,最后有报错,这次时'track_errors',这样得提示得话就可以打开php.ini,搜索'track_errors' ,把它注释掉

    5、composer报错SHA384 is not supported by your openssl extension

    这个错误我折腾了两天,我换了一个下载composer得链接,然后运行就OK了

    下载地址https://getcomposer.org/download/


  • 欢迎您
    THINKPHP网站漏洞修复对于远程写入网站木马文件漏洞详情与修补
    云栖社区 2018-12-19 技术语录

    307

    THINKPHP漏洞修复,官方于近日,对现有的thinkphp5.0到5.1所有版本进行了升级,以及补丁更新,这次更新主要是进行了一些漏洞修复,最严重的就是之前存在的SQL注入漏洞,以及远程代码执行查询系统的漏洞都进行了修复,官方本以为没有问题了,但是在实际的安全检测当中发现,还是存在问题,还是可以远程代码进行注入,插入非法字符,提交到服务器后端中去。

    97647b0553fe44328eb87f00af0d206a.jpeg

    关于这次发现的oday漏洞,我们来看下官方之前更新的代码文件是怎么样的,更新的程序文件路径是library文件夹下的think目录里的app.php,如下图:

    3f81bd04332c4ce7a53b22d1144d427f.png

    漏洞产生的原因就在于这个控制器这里,整个thinkphp框架里的功能对控制器没有进行严格的安全过滤于检查,使攻击者可以伪造恶意参数进行强制插入,最根本的原因就是正则的表达式写的不好,导致可以绕过。

    在controller获取控制器后,直接进行赋值,但是并没有对控制器的名进行严格的检测,导致可以使用斜杠等特殊符号来远程代码注入。

    我们来搭建一下网站的环境,apache+mysql+Linux centos系统,搭建好的测试环境地址是http://127.0.01/anquan ,我们可以直接在index.php后面伪造攻击参数,示例如下:

    http://127.0.0.1/anquan/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls%20-l

    直接get方式提交到网站中去,可以直接查询到网站当前根目录的所有文件,截图如下:

    e56dbce81b9e4d8095dbc214f604ac0f.png

    通过该漏洞也可以直接远程代码注入执行phpinfo语句,查询当前的php版本,路径,扩展,以及php.ini存放的地址,都可以看得到,构造如下代码即可。

    http://127.0.0.1/anquan/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=php%20-r%20'phpinfo();'

    224d53d8a0f34a5795eb3e094e6f3266.png

    有些人可能会问了,既然都可以phpinfo,查询目录文件,可不可以getshell写网站木马文件到网站里呢? 答案是可以的,我们测试的时候是以一句话木马代码的写入到safe.php文件里。

    http://127.0.0.1/anquan/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo%20%27<?php%20@eval($_GET["cmd"]);?>%27%20>%20safe.php

    关于这次thinkphp的漏洞利用以及分析到此就结束了,该漏洞属于高危漏洞,危害严重性较大,很多升级更新补丁的网站都会受到攻击,甚至有些网站会被挂马,那么该如何修复thinkphp的漏洞呢?替换之前的正规则表达式即可,还需要对网站的目录进行权限部署,防止生成php文件,对网站上的漏洞进行修复,或者是对网站安全防护参数进行重新设置,使他符合当时的网站环境。如果不懂如何修复网站漏洞,也可以找专业的网站安全公司来处理,国内如Sinesafe和绿盟、启明星辰等安全公司比较专业.

    针对于这个情况,我们要对其library/think/App.php代码里的正规则表达式进行更改,if (!preg_match('/^[A-Za-z][\w\.]*$/', $controller)) { throw new HttpException(404, 'controller not exists:' . $controller); }

    原文来自:https://yq.aliyun.com/articles/676380?spm=a2c4e.11155472.0.0.1a553d38LLxkoz

  • 欢迎您
    linux alias永久生效
    xclbase 2018-12-13 技术语录

    310

    在Linux中,有很多很长的命令需要给它起个别名,正好今天学到一个技能,记录一下,alias命令可以给其他命令设置一个别名,如何使其永久生效呢,我先做个笔记

    1、

    首先查看当前的已经定义的alias有哪些?示例:

    alias

    image.png

    2、

    新增一个新的别名命令,此命令只是一个临时的,示例:

    alias cdwww='cd wwwdoc'

    image.png

    3、若想要别名命令永久生效,需要将其写入.bashrc文件中,

    使用vi编辑器,打开家目录下的 隐藏文件 .bashrc,示例:

    vi .bashrc

    image.png

    4、将第2步骤中的临时指令,写入到.bashrc中,使其成为永久生效的指令

    image.png

    5、插入指令之后,依次按下ESC键,然后按下冒号键,最后输入wq,

    对文件更改进行保存并退出

    image.png

    6、最后使用source指令,让刚刚修改的文件立即生效,

    示例:source .bashrc

    image.png





  • 欢迎您
    TP3.2分页踩到得坑
    sxy 2018-12-05 技术语录

    335

    在做分页得时候,想得特别简单,打开TP3.2的手册,看了看分页的原理,然后实现分页效果

    image.png

    效果出来了,感觉已经成功了,当我点击234或者下一页的时候,要么就是没有数据,页面刷新,要么就是还是原数据,没有反应。

    THINKPHP3.2的分页类被迁移到Think\Page.class.php,这个和以前的版本是有些不同,使用起来和以前版本还是差不多的。

    由于我得数据是以post方式查询出来的,所以每次刷新页面就会重新查询数据,因此数据就为空了。

    image.png

    这个是网上的一种方法:

    image.png

    其中,selConform中的参数们,比如name='selCon.a'name='selCon.b'......

    按照上面的方法解决了点击下一页的时候,查询参数无法传递的问题。但是我又发现了一个问题,也就是说当我们进入第二页之后,然后再改变查询条件,这时查询出来的结果不是从第一个开始,而是从第二页开始,所以我们这里还需要在查询的时候在js中把p参数(当前页码)设置为1,具体方法如下

    image.png

    我按照网上的这样做了,但是还是没有反应,也许是我处理有问题,但是我也要记录下来,

    原地址是:https://www.cnblogs.com/ningvsban/p/3840972.html

    **我自己解决方案:

    分页传输方式都是get传参,所以,我又用get方式传参接受了一下查询条件的数据,

    image.png

    这样无论怎样都会有数据,不知道这种方式是笨方法还是也算一种方法,之所以把这个方法放在后面,就是为了用上面方法没有解决再用下面这种方法,我就算给自己做个笔记,下一次啊遇到这个问题我知道问题出在哪里。

     

    总结:phpthinkphppost方式查询时分页失效的解决方法


  • 欢迎您
    编辑器phpstorm记录
    sxy 2018-11-30 技术语录

    320

    Php Storm 2018破解版是一款强大的php代码编辑器;

    本人以前使用编辑器nopad++和sublime,现在使用Php Storm,所以要记录下我所需要得快捷键及功能,以提供以后使用;

    PhpStorm 2018破解版功能介绍

    1、智能PHP编辑器
    PHP代码补全
    智能的重复编码检测器
    PHP重构
    支持Smarty和PHPDoc
    支持多语言混合
    2、Java Script 编辑器
    基于DOM/指定浏览器完成
    代码导航和用法查找
    JavaScript 重构
    JavaScript调试器
    3、HTML/CSS编辑器
    支持HTML5
    支持Zen编码
    检验和快速修正
    显示应用的外观
    提取嵌入样式
    4、轻量级IDE
    易于安装
    可在Windows, Mac OS X, Linux上运行
    项目配置简单-可在任意地方打开代码开始工作
    性能优先
    5、智能的环境
    可视化PhP单元测试运行期
    VCS支持SVN、Git、Mercurial等
    支持FTP和远程文件同步
    可记录本地修改
    可视化调试
    无需任何配置的调试器
    支持在PHP,JS,HTML中设置断点
    观察变量,窗口
    批量代码分析
    集成分析器

    快捷键:

    ctrl  + / 行注释
    ctrl + shift + / 块注释

    ctrl  + alt +l  格式化代

    CTRL+J 自动代码提示,自动补

    CTRL+P 方法参数提示,显示默认参数

    还有很多很多,,,,,如果我有用到得以后会补进来


  • 欢迎您
    遇到的问题分享
    sxy 2018-11-26 技术语录

    329

    今天遇到的问题,部署lamp完毕之后,将项目上线到服务器:

    1、访问每个页面都报错500,我把错误提示打开,但是还是看不到详细的报错信息

    解决方案:修改fastcgi的配置文件 /usr/local/nginx/conf/fastcgi.conf  

     图片.png

     

    2、 第一个问题解决完成之后,出现的第二个问题是只能显示首页,sxy.xyxqk.cn,只要添加参数,访问其他页面时,就会报错400NOT FOUND/nginx

    解决方案:添加图片.png这段代码到自己配置的vhost...conf;

    附:有可能:给这两个文件夹设置权限

    chmod -R 777 public

    chmod -R 777 runtime

     

    已完成


  • 姓名:孙小宇
  • 职业:PHP开发
  • 邮箱:yntx420@163.com
  • 定位:河北 · 张家口
       
  •   总访问量:17.19w+
  •   累计访问量:14.45w+
  •