30分钟了解正则

转自 作者:deerchao

本文目标

30分钟内让你明白正则表达式是什么,并对它有一些基本的了解,让你可以在自己的程序或网页里使用它。

如何使用本教程

最重要的是——请给我30分钟,如果你没有使用正则表达式的经验,请不要试图在30内入门——除非你是超人 🙂

继续阅读30分钟了解正则

微信支付错误码curl 58 问题解决

最近开始做微信支付相关的操作,但是在使用官方的demo和sdk中出现了问题,curl报错58,网上的大多数解决方案证书的路径应使用绝对地址。但是我在操作后仍出现错误,通过断点排查。发现问题主要出在php-curl拓展上。

因为curl的ssl证书协议不是openssl的所以报58错误, 所以再重新安装php-curl拓展后解决这一问题。

关于Virtual Box虚拟机里的系统不能启动的解决方法

当我们的虚拟机在非正常关闭后,再次启动机器时,Virtual Box会出现 Runtime error opening ‘C:\Users\admin\VirtualBox VMs\Windows Server\Windows Server.vbox for reading: -102 (File not found.).提示。

虚拟电脑非正常关闭,造成一些日志无法记录,有可能在下次启动虚拟机的时候无法使用里面的系统,一般会提示找不到一个文件,并告诉你这个文件的路径。你顺着这个路径找下去例如我的就是“’C:\Users\admin\VirtualBox VMs\Windows Server\”这个文件夹下有个Windows Server.vbox-tmp,而虚拟机提示的是缺少Windows Server.vbox这个文件,那么F2重命名把-tmp删掉就行了,重命名后这个文件会显示一个方块的图标。

最后去启动虚拟机里的系统就行了!!!

php爬虫

顺利进入了新公司实习,被安排了一个网页爬虫的任务,从迷茫到成熟,让我收获了很多。因为工作太忙,导致博客延缓了更新,现在就跟大家分享一下最近的收获。

准备工作

1.PHP爬虫采用的是curl拓展,所以首先要确保你的PHP已经安装了curl拓展。查看是否已开启拓展可以

查看phpinfo页面找到curl拓展,查看是否开启。

如果没有开启,使用sudo apt-get install php5-curl 命令进行安装

工作原理

爬虫是指将目标网页保存到指定位置或变量中,使用正则表达式对其进行解析,以得到我们想要的数据。

将解析后的数据存入变量中并输出,完成爬虫。

函数说明

public function crawler_run()                       //爬取网页信息 参数为:返回网页内容存入变量

public function analysis($result)                 //分析爬取数据 参数为:网页内容

if (preg_match(“/正则表达式/”, $str, $matches))   PHP正则表达式使用函数  $str=’匹配字符’,$matches=’结果数组’。

 

public function crawler_run()    {

$url =”www.baidu.com”;//这里的URL可以随意换成你想要爬取的网站地址
$ch = curl_init($url);//curl初始化
curl_setopt($ch, CURLOPT_USERAGENT, “Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 6.0)”);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($conn[$i],CURLOPT_COOKIE,$cookies);//如果需要登录则加入cookie
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60);//设置连接的等待时间
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//禁止调用时就输出获取到的数据
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);//// 跳过证书检查 (用来连接https类型的网页)
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);//从证书中检查SSL加密算法是否存在(来连接https类型的网页)
$result = curl_exec($ch);//返回的结果就是爬取的网页,你可以把它保存到本地或者直接打印输出,或者用于后续的分析。

svn问题处理

SVN是常用的版本控制软件,一切弄好后,我把网页里的链接直接复制到svn 的url位置,在配置的过程中出现了无法连接的小问题:结果就一直报下面的错误。

svn: E175002: PROPFIND of ‘/’: 405 Method Not Allowed

尝试许久,发现是链接不正确,正确的写法是: https://ip地址/svn/资源库名

CSS样式小知识(一)

CSS全称为“层叠样式表 (Cascading Style Sheets)

外部式css样式(也可称为外联式)就是把css代码写一个单独的外部文件中,这个css样式文件以“.css”为扩展名,在<head>内(不是在<style>标签内)使用<link>标签将css样式文件链接到HTML文件内,如下面代码:

<link href=”base.css” rel=”stylesheet” type=”text/css” />

更有趣的是伪类选择符,为什么叫做伪类选择符,它允许给html不存在的标签(标签的某种状态)设置样式,比如说我们给html中一个标签元素的鼠标滑过的状态来设置字体颜色:

而如果三种样式同时出现它们的优先级又是怎样的呢?

内联式 > 嵌入式 > 外部式

继续阅读CSS样式小知识(一)

Warning: strftime()处理

今天编写PHP程序遇到了如下警告

Warning: strftime(): It is not safe to rely on the system’s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone ‘UTC’ for now, but please set date.timezone to select your timezone. inF:\local\smarty\s\sysplugins\smarty_internal_runtime_codeframe.php on line 44

想起来没有设置正确的时区,遇到相同问题的朋友可以通过如下的命令进行解决。

date_default_timezone_set(‘PRC’);

在Linux系統下配置LAMP

好久没有在使用Linux系统了,比较常用的还是Windows环境。Linux系统有很多有点,上线的大多数产品都是在Linux服务器上的,而Windows环境开发的东西不可避免出现一些大小写的问题。之前一直使用的是Centos 7.0,一直没体验过Ubuntu系统,所以今天就在自己的虚拟机Ubuntu 16.04 搭建LAMP服务器环境,配置一个新的Linux的php开发环境,然后把配置中遇到的问题也顺便说一下。

一、安装Apache2

•安装代码
sudo apt-get install apache2
•更改默认目录
sudo vim /etc/apache2/apache2.conf
 // 将 <Directory /var/www/>
 // 改成 <Directory "你的目录">
 // 可以将/var/www 中的默认网页复制到 你的目录 中
sudo vim /etc/apache2/sites-available/000-default.conf
 // 将 DocumentRoot /var/www/html
 // 改成 DocumentRoot "你的目录"
sudo /etc/init.d/apache2 restart
 // 重启
然后在浏览器中输入127.0.0.1或者localhost查看一下阿帕奇的配置是否成功,
如果有错误在命令行输入apache2ctl configtest它将突出显示错误的具体位置。
Apache2 Ubuntu Default Page_ It works
二、安装PHP

•安装代码
sudo apt-get install php7.0
 // ubuntu16.04中没有php5了,直接装7吧
sudo apt-get install libapache2-mod-php7.0
 // 配置APACHE+PHP7的
sudo apt-get install libapache2-mod-php
 // 这个应该是配置APACHE+PHP5的,一块装吧
sudo /etc/init.d/apache2 restart
 // 重启
•测试php文件 
在 “你的目录”下建一个testphp.php
hello php
<?php
phpinfo();
?>
然后在浏览器中访问进行测试,如果php文件没有解析成功,重启阿帕奇服务或者重新安装apache和php模块

三、安装MySql。

•在终端:
apt-get install mysql-server mysql-client
 // 安装时会要求输入mysql管理员密码,输入即可

注意: 
mysql-server:用来创建和管理数据库实例,提供相关接口供不同客户端调用; 
mysql-client:操作数据库实例的的一个命令行工具,像图形化界面工具有phpmyadmin等; 
mysqld:即MySQL server 
mysql:即mysql-client客户端命令行工具 
- 附mysql服务管理命令
/etc/init.d/mysql stop/restart/start
service mysql stop/restart/start
 // 两条令相同
•推荐自启管理工具
apt-get install sysv-rc-conf

这样就可以啦,我安装过程中遇到了些小问题不过在google之后还是顺利解决了,mysql优化的文章也会过几天给大家推送,谢谢大家的支持。

关于sql防注入和mysql索引优化(一)

今天在被提问的过程中,被问到了sql防注入和mysql索引优化问题,一时间没有太好的答案,感觉平常也对mysql经常使用,但这时候却发现了数据库中的这两个最重要的问题,防注入和搜索的优化。所以,今天特意查找了一些sql防注入和mysql索引优化技术,并自己尝试了一下,一起分享给大家。

首先通过百度百科,我了解了什么是sql注入,其实这个在我之前的工作已经有所涉及,SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。

举几个简单的例子首先后台的正常操作如下。

第一种

user=request(“user”)
passwd=request(“passwd”)
sql=’select admin from adminbate where user=’&”’&user&”’&’ and passwd=’&”’&passwd&”’;

然后如果使用’or ‘a’=’a来做用户名密码的话,那么查询就变成了

select admin from adminbate where user=”or ‘a’=’a’ and passwd=”or ‘a’=’a’

这样的话,根据运算规则,这里一共有4个查询语句,那么查询结果就是 假or真and假or真,先算and 再算or,最终结果为真,这样就可以进到后台了。

第二种
是通过命令尝试猜测数据库的表名和库名等通过返回的错误提示进行判断自己猜测的是否正确。
通过上网的查找,发现了防御sql注入的几种常用方法。
方法一:
防止sql注入最主要的就一点就是变量全部参数化,能根本的解决sql注入问题。比如代码里写sql或数据库层面写存储过程,只要不拼接sql语句,不执行动态sql语句,那就能防止sql注入。
方法二:永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和
双”-“进行转换等。
方法三:永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
方法四:不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
方法五:应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装。
时间太晚,所以没能完成mysql索引优化的学习,所以明天会继续更新mysql索引优化的学习和分享。