PHP cURL 库的简单使用

之前写 PHP 的爬虫的时候就有用到 cURl 扩展,然后前几天在写 zhihu-php 的时候也用到了这个,也觉得这个也是用得比较多的一个东西,所以就上网又学习了一下,就顺手把它写下来了。

cURL 是一个功能强大的库,支持很多不同的协议、选项,能提供 URL 请求相关的各种细节信息。常用于网页、数据采集。

安装

可以通过 phpinfo() 来输出 PHP 的配置信息,搜索查看是否开启了 cURL 库。

windows

  • 将 PHP 安装文件夹下的 php_curl.dlllibeay32.dllssleay.dll 复制到 system32 文件夹下。
  • 将 PHP.ini 中的 extension=php_curl.dll 前的 ; 分号去掉。
  • 重启服务器。

CodeIgniter URL 路由

设置 URL 路由规则

CodeIgniter 中的 URL 一般遵循之前说的下面这种规则:
http://example.com/index.php/controllers/method/arguments

但是有些原因会使得我们需要使用不同的规则去让 URl 映射。

当有这种需求的时候,可以在 application/config/router.php$route 数组中设置需要的路由规则,在路由规则中可以使用通配符或正则表达式。

通配符

使用通配符的路由规则:
$route[‘name/:num’] = ‘foo/bar’;

CodeIgniter MVC简单示例

通过使用 CodeIgniter 写一个 Hello World 程序来学习框架的基本使用。

默认该 Hello World 程序放在 Apache 服务器的 www 目录下。

URL

在 Codelgniter 中只有单一的程序入口 index.php,之前说过它是 MVC 架构的框架,所以通常在 URL 中来确定使用的控制器及方法。

例如:
http://example.com/index.php/controllers/method/arguments

controllers表示调用的控制器的类,method表示调用的类中的函数或方法,argument以及后面的表示传给控制器的参数。

CodeIgniter 框架概述

虽然已经学习 CodeIgniter 框架有一段时间了,但是想想还是从头开始学习一下这个轻框架,随便将学习的过程记录下来。

CodeIgniter 是什么?

想知道 CodeIgniter 是个什么东西,首先得明白什么是框架。

框架可以看成是一个半完成的应用程序,大多数需要用到的功能都被封装好,并将整个应用程序分成若干互不相干的层次,减少了各个功能间的耦合性,使代码更容易管理跟维护。在设计模式中,为框架给出了一个定义:“框架就是一组协同工作的类,它们为特定类型的软件构筑了一个可重用的设计。”

在 CodeIgniter 的官方文档上说,该框架包含了一些非常小的库,库都是根据请求动态加载的,所以 CodeIgniter 是一个非常轻量级的框架,相对于不使用框架的 PHP 应用程序,而使用了 CodeIgniter 框架的是简单的实现了 MVC 架构,并降低了代码间的耦合性,更便于维护与修改。

对于正准备接触框架的PHPer,CodeIgniter 是一个不错的选择。

知乎用户动态监控爬虫

根据极客学院的Python爬虫教程写的一个单线程简易爬虫。可以监控知乎用户动态,当有新动态时发送邮件通知。

步骤

  • 根据要关注的知乎用户的主页URL,使用requests模块获取整个用户主页的html。
  • 根据用户主页及其html代码,定位所需要的最新动态的位置。
  • 使用正则表达式比配到需要的数据。
  • 拼接数据,判断是否已经保持在文件中,即判断是否为新动态。
  • 若是新动态,使用python的smtplib模块发送收件到设置的邮箱中并保存到本地文件,否则略过。

phpmyadmin 缺少 mcrypt 扩展

记录,以便下次所需。

今天重装了腾讯云上面的服务器,安装的是Ubuntu server 14.04。搞完apache2 + mysql + PHP 后,安装了phpmyadmin来作为数据库管理。
登录之后发现报错:缺少 mcrypt 扩展。上网查了一下,发现需要安装php-mcrypt、libmcrypt、libmcrypt-devel这三个。

安装mcrypt

sudo apt-get install php-mcrypt libmcrypt libmcrypt-devel

安装后重启apache2服务器后发现依然报错,后面在网上找到了解决办法。原来是在/etc/php5/apache2/conf.d下缺少一个20-mcrypt.ini。该文件是mcrypt.ini的链接。
但是不知道是不是因为是版本不同的关系,这个文件的路径与搜索到的解决方案中不同。我的路径是:/etc/php5/mods-available/mcrypt.ini

PHP 验证码识别2

与之前的位置固定的验证码相比,位置不固定的验证码在分割字符这一步步骤难度有所增加。这次增加了验证码的背景颜色亮度判断,使得预处理过后的验证码是黑白二色图,分割字符时根据它们的宽高取剪切。

获取验证码的背景颜色亮度

通过统计验证码中各个颜色像素的数量,取最大比例的像素颜色为背景颜色,然后根据阀值,判断颜色的亮度。

在这里可能出现验证码内字符的颜色像素为最大比例,可能会导致后面无法获取各个字符的宽度。这个情况在预处理中加入了处理,

PHP 验证码识别1

PHP简单验证码识别,识别字符大小位置固定,干扰小的验证码。

思路

  • 预处理图像:根据颜色深浅度预处理,将一些干扰点去除,将图像转化为黑白两色。
  • 分割验证码:将各个数字分割成单独一个字符的图像。
  • 采集样本:将可能出现的字符采集下来,分成样本图像,图像的名称为该图像的字符。
  • 对比样本:将程序分割出来的图像与样本图像上的像素点做对比,取相似度高的值。

预处理图像:

设定一个RGB的阀值,低于阀值的像素点替换为白色,高于阀值的替换为黑色。将图像转化为黑白。

sudoers is world writable

记录以避免再次犯错

前因

今天修改.bashrc中的环境配置时,不小心把$PATH删除了。后来发现后添加回去后Terminal中出现如下错误:

sudo: /etc/sudoers is world writable
sudo: no valid sudoers sources found, quitting