首页 > 编程技术 > php

php 执行CutyCapt命令网页截图的方法

发布时间:2016-11-25 16:16

下面我们来看一篇关于php 执行CutyCapt命令网页截图的教程希望这篇文章能够帮助到各位朋友,希望 文章对各位有帮助。

用php使用exec执行命令

PS.默认情况下exec函数是禁用的,打开php.ini检查disable_function是否包含这个还是,有就去除

 exec('xvfb-run --server-args="-screen 0, 1024x768x24" CutyCapt --url=http://www.111cn.net --out=2.jpg');

这个里一个问题我的的图片只有首屏就好了,所以裁剪图片

 yum install ImageMagick

使用convert -crop进行裁剪

 convert -crop 1024x768+0+0 2.jpg 22.jpg

使用convert -resize进行图片缩放

 convert -resize 15%x15% 22.jpg 22.jpg

目前这个功能已经嵌入到互推博客的网站里了,效果图 

PHP分词软件有许多了,如有一个名为PHPAnalysis分词系统类,我们下面一起来看看这个PHPAnalysisP分词系统类的使用方法。

PHPAnalysis分词程序使用居于unicode的词库,使用反向匹配模式分词,理论上兼容编码更广泛,并且对utf-8编码尤为方便。 由于PHPAnalysis是无组件的系统,因此速度会比有组件的稍慢,不过在大量分词中,由于边分词边完成词库载入,因此内容越多,反而会觉得速度越 快,这是正常现象。

PHPAnalysis的词库是用一种类似哈希(Hash)的数据结构进行存储的,因此对于比较短的字符串分词,只需要占极小的资源, 比那种一次性载入所有词条的实际性要高得多,并且词库容量大小不会影响分词执行的速度。

PHPAnalysis分词系统是基于字符串匹配的分词方法进行分词的,这种方法又叫做机械分词方法,它是按照一定的策略将待分析的汉字串与 一个“充分大的”机器词典中的词条进行配,若在词典中找到某个字符串,则匹配成功(识别出一个词)。

按照扫描方向的不同,串匹配分词方法可以分为正向匹配 和逆向匹配;按照不同长度优先匹配的情况,可以分为最大(最长)匹配和最小(最短)匹配;按照是否与词性标注过程相结合,又可以分为单纯分词方法和分词与 标注相结合的一体化方法。常用的几种机械分词方法如下:

正向最大匹配法(由左到右的方向)。
逆向最大匹配法(由右到左的方向)。
最少切分(使每一句中切出的词数最小)。
还可以将上述各种方法相互组合,例如,可以将正向最大匹配方法和逆向最大匹配方法结合起来构成双向匹配法。由于汉语单字成词的特点,正向最小匹配和逆向 最小匹配一般很少使用。一般说来,逆向匹配的切分精度略高于正向匹配,遇到的歧义现象也较少。

统计结果表明,单纯使用正向最大匹配的错误率为1/169, 单纯使用逆向最大匹配的错误率为1/245。但这种精度还远远不能满足实际的需要。实际使用的分词系统,都是把机械分词作为一种初分手段,还需通过利用各 种其它的语言信息来进一步提高切分的准确率。

另一种方法是改进扫描方式,称为特征扫描或标志切分,优先在待分析字符串中识别和切分出一些带有明 显特征的词,以这些词作为断点,可将原字符串分为较小的串再来进机械分词,从而减少匹配的错误率。

另一种方法是将分词和词类标注结合起来,利用丰富的词类 信息对分词决策提供帮助,并且在标注过程中又反过来对分词结果进行检验、调整,从而极大地提高切分的准确率。

PHPAnalysis分词先对需要分词的词进行粗分,然后对粗分的短句子进行二次逆向最大匹配法(RMM)的方法进行分词,分词后对分词结果进行优化,然后才得到最终的分词结果。

API文档

成员变量

变量 默认值 描述
$resultType 1 生成的分词结果数据类型
1 为全部
2为词典词汇及单个中日韩简繁字符及英文
3 为词典词汇及英文
这个变量一般用 SetResultType( $rstype ) 这方法进行设置。

$notSplitLen 5 切分句子最短长度
$toLower false 把英文单词全部转小写
$differMax false 使用最大切分模式对二元词进行消岐
$unitWord true 尝试合并单字(即是新词识别)
$differFreq false 使用热门词优先模式进行消岐
成员函数

__construct()

public function __construct($source_charset='utf-8', $target_charset='utf-8', $load_all=true, $source='')
函数说明:构造函数

参数列表:
$source_charset 源字符串编码
$target_charset 目录字符串编码
$load_all 是否完全加载词典(此参数已经作废)
$source 源字符串

如果输入输出都是utf-8,实际上可以不必使用任何参数进行初始化,而是通过 SetSource 方法设置要操作的文本

SetSource()

public function SetSource( $source, $source_charset='utf-8', $target_charset='utf-8' )
函数说明:设置源字符串

参数列表:
$source 源字符串
$source_charset 源字符串编码
$target_charset 目录字符串编码

返回值:bool

StartAnalysis()

public function StartAnalysis($optimize=true)
函数说明:开始执行分词操作

参数列表:
$optimize 分词后是否尝试优化结果
返回值:void

一个基本的分词过程:

$pa = new PhpAnalysis();
$pa->SetSource('需要进行分词的字符串');
//设置分词属性
$pa->resultType = 2;
$pa->differMax  = true;
$pa->StartAnalysis();
//获取你想要的结果
$pa->GetFinallyIndex();
SetResultType()

public function SetResultType( $rstype )
函数说明:设置返回结果的类型,实际是对成员变量$resultType的操作

参数 $rstype 值为:

1 为全部
2为 词典词汇及单个中日韩简繁字符及英文
3 为词典词汇及英文
返回值:void

GetFinallyKeywords()

public function GetFinallyKeywords( $num = 10 )
函数说明:获取出现频率最高的指定词条数(通常用于提取文档关键字)

参数列表:
$num = 10 返回词条个数

返回值:用”,”分隔的关键字列表

GetFinallyResult()

public function GetFinallyResult($spword=' ')
函数说明:获得最终分词结果

参数列表:

$spword 词条之间的分隔符

返回值:string

GetSimpleResult()

public function GetSimpleResult()
函数说明:获得粗分结果

返回值:array

GetSimpleResultAll()

public function GetSimpleResultAll()
函数说明:获得包含属性信息的粗分结果

属性(1中文词句、2 ANSI词汇(包括全角),3 ANSI标点符号(包括全角),4数字(包括全角),5 中文标点或无法识别字符)

返回值:array

GetFinallyIndex()

public function GetFinallyIndex()
函数说明:获取hash索引数组
返回值:array(‘word’=>count,…) 按出现频率排序

MakeDict()

public function MakeDict( $source_file, $target_file='' )
函数说明:把文本文件词库编译成词典

参数列表:
$source_file 源文本文件
$target_file 目标文件(如果不指定,则为当前词典)

返回值:void

ExportDict()

public function ExportDict( $targetfile )
函数说明:导出当前词典全部词条为文本文件

参数列表:
$targetfile 目标文件
返回值:void

简单示例

require_once 'phpanalysis2.0/phpanalysis.class.php';
$pa=new PhpAnalysis();

$pa->SetSource("PHPAnalysis分词系统是基于字符串匹配的分词方法进行分词的,这种方法又叫做机械分词方法,它是按照一定的策略将待分析的汉字串与 一个“充分大的”机器词典中的词条进行配,若在词典中找到某个字符串,则匹配成功(识别出一个词)。按照扫描方向的不同,串匹配分词方法可以分为正向匹配 和逆向匹配;按照不同长度优先匹配的情况,可以分为最大(最长)匹配和最小(最短)匹配;按照是否与词性标注过程相结合,又可以分为单纯分词方法和分词与 标注相结合的一体化方法。常用的几种机械分词方法如下: ");
$pa->resultType=2;
$pa->differMax=true;
$pa->StartAnalysis();
$arr=$pa->GetFinallyIndex();
echo "<pre>";
print_r($arr);
echo "</pre>";

远程图片指的是远端服务器上的数据我们可以通过php的许多函数来读取下载了,这里整理了两个可以自动下载远程图片并下载保存到本地的例子。

例子一,可以自动识别图片类型然后进行对应的保存

 代码如下 复制代码

/*
*功能:php完美实现下载远程图片保存到本地
*参数:文件url,保存文件目录,保存文件名称,使用的下载方式
*当保存文件名称为空时则使用远程文件原来的名称
*/
function getImage($url,$save_dir='',$filename='',$type=0){
    if(trim($url)==''){
  return array('file_name'=>'','save_path'=>'','error'=>1);
 }
 if(trim($save_dir)==''){
  $save_dir='./';
 }
    if(trim($filename)==''){//保存文件名
        $ext=strrchr($url,'.');
        if($ext!='.gif'&&$ext!='.jpg'){
   return array('file_name'=>'','save_path'=>'','error'=>3);
  }
        $filename=time().$ext;
    }
 if(0!==strrpos($save_dir,'/')){
  $save_dir.='/';
 }
 //创建保存目录
 if(!file_exists($save_dir)&&!mkdir($save_dir,0777,true)){
  return array('file_name'=>'','save_path'=>'','error'=>5);
 }
    //获取远程文件所采用的方法
    if($type){
  $ch=curl_init();
  $timeout=5;
  curl_setopt($ch,CURLOPT_URL,$url);
  curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
  curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
  $img=curl_exec($ch);
  curl_close($ch);
    }else{
     ob_start();
     readfile($url);
     $img=ob_get_contents();
     ob_end_clean();
    }
    //$size=strlen($img);
    //文件大小
    $fp2=@fopen($save_dir.$filename,'a');
    fwrite($fp2,$img);
    fclose($fp2);
 unset($img,$url);
    return array('file_name'=>$filename,'save_path'=>$save_dir.$filename,'error'=>0);
}

例子2,如果不是图片会自动跳过

 代码如下 复制代码

<?php
function GrabImage($url, $filename = "") {
 if ($url == ""):return false;
 endif;
 //如果$url地址为空,直接退出
 if ($filename == "") {
 //如果没有指定新的文件名
 $ext = strrchr($url, ".");
 //得到$url的图片格式
 if ($ext != ".gif" && $ext != ".jpg"):return false;
 endif;
 //如果图片格式不为.gif或者.jpg,直接退出
 $filename = date("dMYHis") . $ext;
 //用天月面时分秒来命名新的文件名
 } 
 ob_start();//打开输出
 readfile($url);//输出图片文件
 $img = ob_get_contents();//得到浏览器输出
 ob_end_clean();//清除输出并关闭
 $size = strlen($img);//得到图片大小
 $fp2 = @fopen($filename, "a");
 fwrite($fp2, $img);//向当前目录写入图片文件,并重新命名
 fclose($fp2);
 return $filename;//返回新的文件名

$img = GrabImage("http://www.111cn.net /6648d73db0edd1e89f3d62f7.jpg", "");
if ($img):echo '<pre><img" width=100% src="' . $img . '"></pre>';
//如果返回值为真,这显示已经采集到服务器上的图片
else:echo "false";
endif;
//否则,输出采集失败
?>

其实上面的下载方式小编最喜欢的不是这两个而是curl保存异步下载图片会比较好。

下面我们一起来看一篇关于现代 PHP 新特性Trait 概览的详解希望这篇文章能够帮助到各位朋友,有兴趣的朋友可以进来看看。

为什么使用Trait

PHP语言使用一种典型的单继承模型,在这种模型中,我们先编写一个通用的根类,实现基本的功能,然后扩展这个根类,创建更具体的子类,直接从父类继承实现。这叫做继承层次结构,很多编程语言都使用这个模式。大多数时候这种典型的继承模型能够良好运作,但是如果想让两个无关的PHP类具有类似的行为,应该怎么做呢?

Trait就是为了解决这种问题而诞生的。Trait能够把模块化的实现方式注入多个无关的类中,从而提高代码复用,符合DRY(Don’t Repeat Yourself)原则。比如Laravel底层用户认证相关逻辑以及软删除实现等地方都使用了Trait来实现。以Laravel自带的AuthController为例,其中的登录、注册以及登录失败尝试次数都是通过Trait实现:

trait-userauthencation

如何创建Trait

创建Trait很简单,跟创建类有点类似,只不过使用的关键字是trait而不是class,以上述ThrottlesLogin为例:

trait-throttleslogin
我们通过trait声明定义的是一个Trait,然后我们可以在这个Trait中像类一样定义要使用的属性和方法。

此外Trait支持嵌套和组合,即通过一个或多个Trait(多个用,分隔)组合成一个Trait,比如AuthenticatesAndRegistersUsers即是如此:

trait-authcontroller

使用多个Trait可能会引起命名冲突问题,上面的代码给出了解决方案:使用insteadof关键字,如果AuthenticatesUsersRegistersUsers中都定义了redirectPathgetGuard方法,那么将从AuthenticatesUsers中获取对应方法而不是RegistersUsers。另外还可以使用as关键字为方法起个别名,这样也可以避免命名冲突。
此外,这里可能没有完整列出,Trait中还支持定义抽象方法和静态方法,其中抽象方法必须在使用它的类中实现。
这里还需要声明的一点是调用方法的优先级:调用类>Trait>父类(如果有的话),方法可以覆盖,但属性不行,如果Trait中定义了一个属性,如果调用类中也定义这个属性则会报错。

如何使用Trait

Trait的使用方法也很简单,上面已经显示的很清楚明了,即使用use关键字。

可能你已经注意到,命名空间和Trait使用的都是use关键字,不同之处在于导入位置,命名空间在类的定义体外导入,而Trait在类的定义体内导入。
 代码如下 复制代码
注:PHP解释器在编译时会把Trait复制到类的定义体中,但是不会处理这个操作引入的不兼容问题,如果Trait假定类中有特定的属性或方法,需要先确保类中确实有相应的属性或方法。
标签:[!--infotagslink--]

您可能感兴趣的文章: