【MySQL】字符串截取之substring_index(按给定字符截取)

substring_index(str,delim,count)

  str:要处理的字符串

  delim:分隔符

  count:计数

例子:str=www.wikibt.com

  substring_index(str,'.',1)

  结果是:www

  substring_index(str,'.',2)

  结果是:www.wikibt

  也就是说,如果count是正数,那么就是从左往右数,第N个分隔符的左边的全部内容

  相反,如果是负数,那么就是从右边开始数,第N个分隔符右边的所有内容,如:

  substring_index(str,'.',-2)

  结果为:wikibt.com

 有人会问,如果我要中间的的wikibt怎么办?

 很简单的,两个方向:

  从右数第二个分隔符的右边全部,再从左数的第一个分隔符的左边:

  substring_index(substring_index(str,'.',-2),'.',1);

PHP常用数组

  1. 数组交集、差集:PHP中文网
  2. 反转key、value:array_flip()
    3.从一个数组中取出另一个数组的键值重复项:array_diff()
    4.array_unshift() ——用于向数组插入新元素。新数组的值将被插入到数组的开头。

    $a=array("a"=>"red","b"=>"green");
    array_unshift($a,"blue");
    print_r($a);
    
    Array ( [0] => blue [a] => red [b] => green )

postman 常见使用tips

1.测试https环境下接口

如下图所示,关闭ssl验证即可。

2.测试含session的接口

2.1找到session值

2.2在postman添加session值

把对应的session值放入,保存即可

3.模拟ajax请求

 1)提交模式:POST

 2)Headers增加参数:
 Content-Type    为:application/x-www-form-urlencoded
 X-Requested-With 为:xmlhttprequest

 3)Body选择为:x-www-form-urlencoded,参数为模拟AJAX提交的内容

wamp 配置https环境

生成证书步骤

主要看一下C:/wamp64/bin/apache/apache2.4.37/conf/extra下的http-ssl.conf与httpd-vhosts.conf文件的配置

http-ssl.conf:

<VirtualHost _default_:443>
#   General setup for the virtual host
DocumentRoot "C:\wamp64\www\b2b\admin\img"
ServerName img.ygoffice.com:443
ServerAdmin admin@example.com
ErrorLog "${INSTALL_DIR}/bin/apache/apache2.4.37/logs/img_error.log"
TransferLog "${INSTALL_DIR}/bin/apache/apache2.4.37/logs/img_access.log"
SSLEngine on
SSLCertificateFile "${INSTALL_DIR}/bin/apache/apache2.4.37/conf/ssh/img/1535611_img.ygoffice.com_public.crt"
SSLCertificateKeyFile "${INSTALL_DIR}/bin/apache/apache2.4.37/conf/ssh/img/1535611_img.ygoffice.com.key"
SSLCertificateChainFile "${INSTALL_DIR}/bin/apache/apache2.4.37/conf/ssh/img/1535611_img.ygoffice.com_chain.crt"
<FilesMatch "\.(cgi|shtml|phtml|php)$">
    SSLOptions +StdEnvVars
</FilesMatch>
<Directory "${INSTALL_DIR}/bin/apache/apache2.4.37/cgi-bin">
    SSLOptions +StdEnvVars
</Directory>
<Directory "C:\wamp64\www\b2b\admin\img">
    AllowOverride All
    Require local
    Require all granted
</Directory>
BrowserMatch "MSIE [2-5]" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0
CustomLog "${INSTALL_DIR}/bin/apache/apache2.4.37/logs/img_ssl_request.log" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>

http-ssl.conf下配置443端口(https),httpd-vhosts.conf配置80端口

<VirtualHost *:80>
  ServerName img.ygoffice.com
  ServerAlias img.ygoffice.com
  DocumentRoot "C:\wamp64\www\b2b\admin\img"
  #HTTP_TO_HTTPS_START
    <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteCond %{SERVER_PORT} !^443$
        RewriteRule (.*) https://%{SERVER_NAME}$1 [L,R=301]
    </IfModule>
  #HTTP_TO_HTTPS_END
  <Directory "C:\wamp64\www\b2b\admin\img">
    Options +Indexes +Includes +FollowSymLinks +MultiViews
    AllowOverride All
    Require local
    Require all granted
  </Directory>
</VirtualHost>

当然还要配置一下hosts文件。

最后:在配置过程中,可能会遇到apache重启不了。在C:/wamp64/bin/apache/apache2.4.37/bin目录下执行命令:

httpd -t

即可查看报错信息

win10 cmd修改编码为UTF-8

在win10 cmd命令窗口执行命令,经常遇见编码问题

1.临时修改,只作用于当前打开的窗口

进入cmd窗口后,直接执行“chcp 65001”

执行完后,cmd的编码格式就是UTF-8


2.永久修改,修改注册表。

在运行中输入"regedit",找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor

然后“右键-新建”,选择“字符串值”,“名称”列填写“autorun”, 数值数据填写“chcp 65001”

然后:

再次在运行中输入cmd,就会自动把编码格式设置为UTF-8

php curl爬虫遇到反爬虫被封ip解决方案

在爬取好租网页时,被封禁了ip,导致无法正常访问网站

相关问题解决方案

利用上述方法,模拟成百度爬虫,并随机设置了IP

$ip=mt_rand(11, 191).".".mt_rand(0, 240).".".mt_rand(1, 240).".".mt_rand(1, 240); 
        $header = array(
            'CLIENT-IP:'.$ip,
            'X-FORWARDED-FOR:'.$ip,
        );    //构造ip
        curl_setopt($ch, CURLOPT_USERAGENT, 'Baiduspider+(+http://www.baidu.com/search/spider.htm)');

然后登录路由器管理页面,修改了ip后,继续抓取

编码常见问题

爬取页面的时候,需要比较一下字符串再入库,惊奇的发现两个相同的字符串用strlen()查看长度不一样,首先想到是编码问题。

吐槽一下window的cmd,utf-8会乱码,给调试造成很大不便

首先用mb_detect_encoding查看字符串编码
mb_detect_encoding($val,  array("ASCII","UTF-8","GB2312","GBK","BIG5"));

发现编码是EUC-CN,吼,真不是常见的编码啊。
遂想全转成utf-8岂不是美滋滋,结果华丽丽的乱码了。

于是把要比较的字符串转成EUC-CN了~
mb_convert_encoding('物业类别', 'EUC-CN', 'UTF-8')

(ps:该1个字符两个字节~)