PHP采集程序常用的采集函数

这几天关注了一下PHP的采集程序,才发现用PHP采集内容是这么方便,把经常用到的采集函数在这里总结一下,方便以后使用!

获取所有链接内容和地址

function getAllURL($code){
preg_match_all('/<a\s+href=["|\']?([^>"\' ]+)["|\']?\s*[^>]*>([^>]+)<\/a>/i',$code,$arr);
return array('name'=>$arr[2],'url'=>$arr[1]);
}

获取所有的图片地址

function getImgSrc($code){
$reg = "/]*src=\"(http:\/\/(.+)\/(.+)\.(jpg|gif|bmp|bnp|png))\"/isU";
preg_match_all($reg, $code, $img_array, PREG_PATTERN_ORDER);
return $img_array[1];
}

当前的脚本网址

function getSelfURL(){
if(!empty($_SERVER["REQUEST_URI"])){
$scriptName = $_SERVER["REQUEST_URI"];
$nowurl = $scriptName;
}else{
$scriptName = $_SERVER["PHP_SELF"];
if(empty($_SERVER["QUERY_STRING"])) $nowurl = $scriptName;
else $nowurl = $scriptName."?".$_SERVER["QUERY_STRING"];
}
return $nowurl;
}

继续阅读

获取网页内的图片地址 | 打包下载图片

最近开发了一个在线的采集工具,可以根据URL来获取当前页面里的图片信息,比如说图片地址,图片标签里的属性,以及通过打包(zip)的形式下载请求页面中获取到的图片。有兴趣的朋友可以查看一下下面的DEMO页面,来进行采集图片:

http://www.ityizhan.com/demo/download-image/

这个DEMO页面只是实现了最基本的两个部分:采集地址和打包下载。目前尚在测试阶段,还在进行的更新,希望大家发现问题能及时反馈,成为大家采集图片的方便工具。

根据不断的测试,以后还可能增加的新功能有,自动调整图片的大小,设置打包图片的名称规则,合并和分解图片。。。。反正想添加的功能挺多的,有什么好的建议也希望大家能留言。

下面说一下这个工具现有功能的实现方法:

1. 获取地址

这个功能最主要的就是用正则表达式来匹配页面源码里的图片地址了,这里用到得正则表达式是:

/<img.*src="(.*)"\\s*.*>/iU

首页通过PHP自带的读取文件函数来获得请求页面的html代码,然后用正则表达式来匹配里面的src地址,这里有两个注意点:

  • file_get_content 只能获取到静态的页面内容,也就是说如果你在页面里看到的是图片是通过Javascript来展示的,通过这个工具是获取不到图片信息的
  • 有的网站对file_get_content 这个函数做了些限制,如果不是通过浏览器打开的网页,服务器是拒绝请求的,这个时候我们就需要给php 程序添加一个配置信息,让采集的程序能够模拟一个留言器的UA(user agent),具体的做法可以通过下面的代码来实现://现在模拟的是一个Window 环境下的浏览器
    ini_set('user_agent','Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; 4399Box.560; .NET4.0C; .NET4.0E)');

继续阅读

PHPExcel生成和读取Excel文件[实例]

在网站的管理后台经常会使用到报表的生成和读取,CSV和Excel都是常用的报表格式,CSV相对来说比较简单,如果大家有疑问我会相继发布一些CSV的实例,这里主要介绍用PHP 来生成和读取Excel文件。

要执行下面的函数,首先要引入一个类库:PHPExcel,PHPExcel是一个强大的PHP类库,用来读写不同的文件格式,比如说Excel 2007,PDF格式,HTML格式等等,这个类库是建立在Microsoft’s OpenXML和PHP 的基础上的,对Excel提供的强大的支持,比如设置工作薄,字体样式,图片以及边框等等,下面来看看它是如何读写Excel文件的:

首先来看如果生成Excel文件:

下面这代码中函数arrayToExcel的功能是把一个二维数组的数据生成一个excel文件,并且保存在服务器上。
require_once 'Classes/PHPExcel/Reader/Excel2007.php';
require_once 'Classes/PHPExcel/Reader/Excel5.php';
include 'Classes/PHPExcel/IOFactory.php';
function arrayToExcel($data){
$objPHPExcel = new PHPExcel();
$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->setTitle('firstsheet');
$objPHPExcel->getDefaultStyle()->getFont()->setName('Arial');
$objPHPExcel->getDefaultStyle()->getFont()->setSize(10);
//add data
$i = 2;
foreach ($data as $line){
$objPHPExcel->getActiveSheet()->setCellValue('A'.$i, $line['From']);
$objPHPExcel->getActiveSheet()->getCell('A'.$i)->setDataType('n');
$objPHPExcel->getActiveSheet()->setCellValue('B'.$i, $line['To']);
$objPHPExcel->getActiveSheet()->getCell('B'.$i)->setDataType('n');
$i++;
}
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$file = 'excel.xls';
$objWriter->save($file);
}

继续阅读

php中引用(变量和函数名前加&符号)的用法

在 PHP 中引用意味着用不同的名字访问同一个变量内容。这并不像 C 的指针,它们是符号表别名。注意在 PHP 中,变量名和变量内容是不一样的,因此同样的内容可以有不同的名字。PHP的引用是通过在变量名或者函数名前加&符号来实现的。下面解释一下引用的几种用法:
首先是变量的简单引用,允许你用两个变量来指向同一个内容,举个简单的例子:

  1. < ?php
  2. $a = 5;
  3. $b = &$a;
  4. echo $b;
  5. $a++;
  6. echo $b;
  7. ?>

运行这段代码是让$b来引用$a的内容,然后改变$a的内容,$b的内容也会随之变化。同样的语法可以用在函数中,它返回引用,以及用在 new 运算符中:

  1. < ?php
  2. $bar =& new fooclass();
  3. $foo =& find_var ($bar);
  4. ?>

引用做的第二件事是用引用传递变量。这是通过在函数内建立一个本地变量,并且该变量在呼叫范围内引用了同一个内容来实现的。说的通俗点就是一个函数的参数是一个本地变量的引用。下面再举例说明一下
继续阅读

PHP rawurlencode()和urlencode()函数区别

今天在阅读开源代码时发现了一个URL的编码函数:rawurlencode(),以前一直没有注意过,因为在平时的开发上主要使用的是 urlencode(),故专门研究了一番。

其实这两个函数的区别很简单,它们两个都会把URL中的非英文字符进行转义,替换成”%”后跟两位十六进制数,不同的是:rawurlencode 遵守是94年国际标准备忘录RFC 1738,对空格的转义是’%20′;而urlencode的编码实现的是传统做法,和POST表单数据一样会把空格转义成”+”号。

举个例子:
如果URL地址源的形式是:http://ityizhan.com/PHP 编码区别
rawurlencode($url):
http%3A%2F%2Fityizhan.com%2FPHP%20%E7%BC%96%E7%A0%81%E5%8C%BA%E5%88%AB%2B
urlencode($url):
http%3A%2F%2Fityizhan.com%2FPHP+%E7%BC%96%E7%A0%81%E5%8C%BA%E5%88%AB%2B

继续阅读

PHP遍历文件目录

[ad#content]最近几天正在找PHP工作,把遇到的一些面试题在这里晒晒!
前两天有一道题是这样的:用PHP遍历目录下的所有文件和目录

这道题主要考察文件函数的操作和递归函数的运用,下面用两种方法实现一下:

第一种实现办法:用dir返回对象

  1. function tree($directory){
  2. $mydir=dir($directory);
  3. echo "<ul>\n";
  4. while($file=$mydir->read()){
  5. if((is_dir("$directory/$file")) AND ($file!=".") AND ($file!="..")){
  6. echo "<li><font color=\"#ff00cc\"><b>$file</b></font></li>\n";
  7. tree("$directory/$file");
  8. }else{
  9. echo "<li>$file</li>\n";
  10. }
  11. }
  12. echo "</ul>\n";
  13. $mydir->close();
  14. }
  15. $dir = '/var/www/evan';
  16. tree($dir);

继续阅读

UCenter 1.5.0 数据库结构说明

想要了解一个应用,首先应该熟悉它的数据库,这里是我总结的UCenter 1.5.0 的数据库结构,以供大家参考:
首先UCenter 库里一共包含一下这些表:
+———————+
| uc_admins |
| uc_applications |
| uc_badwords |
| uc_domains |
| uc_failedlogins |
| uc_feeds |
| uc_friends |
| uc_mailqueue |
| uc_memberfields |
| uc_members |
| uc_mergemembers |
| uc_newpm |
| uc_notelist |
| uc_pms |
| uc_protectedmembers |
| uc_settings |
| uc_sqlcache |
| uc_tags |
| uc_vars |
+———————+
继续阅读

PHP和jQuery实现截图自定义头像

在一些SNS网站上常会有一些自定义头像的功能,这里介绍一个用PHP和jQuery实现截图自定义头像的方法,需要的环境和前提如下:

1,PHP 需要 GD 2.0.1 或更高版本
2,jQuery库
3,jQuery图片处理插件imgareaselect

其中imgareaselect插件可以参考其官方网站:http://odyniec.net/projects/imgareaselect/ ,也可浏览本博客的相关内容:jQuery的截图插件imgAreaSelect,这里介绍了设置 imgAreaSelect 插件里所有参数及其描述。

HTML头需要引入的文件:

  1. <head>
  2. <link rel="stylesheet" type="text/css" href="css/imgareaselect-default.css" />
  3. <script type="text/javascript" src="scripts/jquery.min.js"></script>
  4. <script type="text/javascript" src="scripts/jquery.imgareaselect.pack.js"></script>
  5. </head><head>
  6. </head>

其中CSS文件是jQuery的截图插件imgAreaSelect压缩包里自带的CSS样式,jquery.min.js 是jQuery库文件,jquery.imgareaselect.pack.js是imgareaselect插件的文件。

继续阅读

PHP,Linux 虚拟主机

本站域名和空间马上就要到期了,经常来这里的人也许知道,目前本站使用的是Windows主机,经过一年的使用时间,感觉PHP在Windows上完全发挥不了一点优势,所以想要换成Linux虚拟主机,昨天在网上找了一些主机空间,发现EBL主机 专业双线Linux/PHP空间,购买之前可以试用一周,而且这里的价位不是很高,基础型++300M的空间¥200/年,相信这点容量对于一个个人站点或是公司网站已经是足够的了,而且还送数据库和邮箱,我试用了一下感觉挺不错的,基本上所有常用PHP的函数在上面都可以直接运行,对mail()函数,.htaccess及mod_rewrite伪静态的支持那更是没的说,LAMP组合才是硬道理!

不错不错,而且刚和客服联系到EBL主机这周正在推出岁末迎春促销活动:


继续阅读

PHP获取Google 建议的函数

PHP获取Google 建议的函数

function GoogleSuggest($qu)
{
$handle=@fopen(“http://www.google.cn/complete/search?hl=zh-CN&client=suggest&js=true&qu=”.$qu,”r”);
if($handle)
{
while(!feof($handle))
{
$str = fgets($handle);
}
fclose($handle);
$str = substr($str,19,-1);
$tmp = json_decode($str);
$result = array();
if(empty($tmp[1])) return array();
foreach($tmp[1] AS $val){$result[] = $val[0];}
unset($str,$val,$tmp);
shuffle($result);
return $result;
}
return null;
}

继续阅读