当前位置:  编程技术>php
本页文章导读:
    ▪php抓取页面的几种方式 -- 小园子        在 做一些天气预报或者RSS订阅的程序时,往往需要抓取非本地文件,一般情况下都是利用php模拟浏览器的访问,通过http请求访问url地址, 然后得到html源代码或者xml数据,得到数据.........
    ▪PHP面试题一[转]      1.用PHP打印前一天的时间,格式如2012-4-12 10:11:22echo date("Y-n-d H:i:s",strtotime("-1 day"));format字符[a:am,pm小写,A:AM,PM大写  g小时,12时制 n月份 前无0]strtotime()用法如下<?phpecho strtotime ("now"), "\n";e.........
    ▪PHP面试题一[转] - CharlesJiang      1.用PHP打印前一天的时间,格式如2012-4-12 10:11:22echo date("Y-n-d H:i:s",strtotime("-1 day"));format字符[a:am,pm小写,A:AM,PM大写  g小时,12时制 n月份 前无0]strtotime()用法如下<?phpecho strtotime ("now"), "\n";e.........

[1]php抓取页面的几种方式 -- 小园子
    来源:    发布时间: 2013-11-07


 



 

在 做一些天气预报或者RSS订阅的程序时,往往需要抓取非本地文件,一般情况下都是利用php模拟浏览器的访问,通过http请求访问url地址, 然后得到html源代码或者xml数据,得到数据我们不能直接输出,往往需要对内容进行提取,然后再进行格式化,以更加友好的方式显现出来。


下面简单说一下php抓取页面的几种方法及原理:


一、 PHP抓取页面的主要方法:


1. file()函数   


2. file_get_contents()函数 


3. fopen()->fread()->fclose()模式 


4.curl方式 


5. fsockopen()函数 socket模式 


6. 使用插件(如:http://sourceforge.net/projects/snoopy/)


二、PHP解析html或xml代码主要方式:


1. file()函数



<?php
$url='http://t.qq.com';
$lines_array=file($url);
$lines_string=implode('',$lines_array);
echo htmlspecialchars($lines_string);


 


2. file_get_contents()函数

使用file_get_contents和fopen必须空间开启allow_url_fopen。方法:编辑php.ini,设置
allow_url_fopen = On,allow_url_fopen关闭时fopen和file_get_contents都不能打开远程文件。



<?php 
$url='http://t.qq.com';
$lines_string=file_get_contents($url);
echo htmlspecialchars($lines_string);


 


3. fopen()->fread()->fclose()模式



<?php 
$url='http://t.qq.com';
$handle=fopen($url,"rb");
$lines_string="";
do{
    $data=fread($handle,1024);
     if(strlen($data)==0) {
        break;
    }
    $lines_string.=$data;
}while(true);
fclose($handle);
echo htmlspecialchars($lines_string);


 


4. curl方式


使用curl必须空间开启curl。方法:windows下修改php.ini,将extension=php_curl.dll前面的分号去掉,而且需
要拷贝ssleay32.dll和libeay32.dll到C:\WINDOWS\system32下;Linux下要安装curl扩展。



<?php 
$url='http://t.qq.com';
$ch=curl_init();
$timeout=5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$lines_string=curl_exec($ch);
curl_close($ch);
echo htmlspecialchars($lines_string);


 


5. fsockopen()函数 socket模式
socket模式能否正确执行,也跟服务器的设置有关系,具体可以通过phpinfo查看服务器开启了哪些通信协议,比如我的本地php socket没开启http,只能使用udp测试一下了。



<?php                                                                                                                                                
$fp = fsockopen("udp://127.0.0.1", 13, $errno, $errstr);
if (!$fp) {
    echo "ERROR: $errno - $errstr<br />\n"
} else {
    fwrite($fp, "\n")
    echo fread($fp, 26)
    fclose($fp)
}



 


6. snoopy插件


使用网上非常流行的snoopy来进行采集,这是一个非常强大的采集插件,并且它的使用非常方便,你也可以在里面设置agent来模拟浏览器信息。
使用实例:
require('Snoopy.class.php'); //引入snoopy的类文件
$snoopy = new Snoopy;        //初始化snoopy类
$url = "http://www.4155999.com";
$snoopy->fetch($url);        //开始采集内容
$con = $snoopy->results;    //保存采集内容到$con
说明:设置agent是在 Snoopy.class.php 文件的第45行,请在该文件中搜索 “var $agent” (引号中的内容)。浏览器内容你可以使用PHP来获得,
使用 echo $_SERVER['HTTP_USER_AGENT']; 可以得到浏览器信息,将echo出来的内容复制到agent里面就可以了。


 


 

本文链接


    
[2]PHP面试题一[转]
    来源:    发布时间: 2013-11-07

1.用PHP打印前一天的时间,格式如2012-4-12 10:11:22

echo date("Y-n-d H:i:s",strtotime("-1 day"));


format字符[a:am,pm小写,A:AM,PM大写  g小时,12时制 n月份 前无0]
strtotime()用法如下


<?php
echo strtotime ("now"), "\n";
echo strtotime ("10 September 2000"), "\n";
echo strtotime ("+1 day"), "\n";
echo strtotime ("+1 week"), "\n";
echo strtotime ("+1 week 2 days 4 hours 2 seconds"), "\n";
echo strtotime ("next Thursday"), "\n";
echo strtotime ("last Monday"), "\n";
?>


2.echo() print() print_f()区别


echo()是一个php语句,所以没有返回值,能打印简单的数据。
print()是一个函数,有返回值,能打印简单的数据。
print_r()是一个函数,能打印复杂的(mix)数据。

3.常见的PHP模板引擎


Smarty EasyTemplatePHP


4.哪些工具可以进行版本控制


SVN CVS


5.实现字符翻转的函数


strrev($str);


6.优化Mysql数据库的常用方法


(1).数据库设计方面,这是DBA和Architect的责任,设计结构良好的数据库,必要的时候,去正规化(英文是这个:denormalize,中文翻译成啥我不知道),允许部分数据冗余,避免JOIN操作,以提高查询效率
(2).系统架构设计方面,表散列,把海量数据散列到几个不同的表里面.快慢表,快表只留最新数据,慢表是历史存档.集群,主服务器Read & write,从服务器read only,或者N台服务器,各机器互为Master
(3).(1)和(2)超越PHP Programmer的要求了,会更好,不会没关系.检查有没有少加索引
(4).写高效的SQL语句,看看有没有写低效的SQL语句,比如生成笛卡尔积的全连接啊,大量的Group By和order by,没有limit等等.必要的时候,把数据库逻辑封装到DBMS端的存储过程里面.缓存查询结果,explain每一个sql语句
(5).所得皆必须,只从数据库取必需的数据,比如查询某篇文章的评论数,select count(*) ... where article_id = ? 就可以了,不要先select * ... where article_id = ?然后msql_num_rows.
只传送必须的SQL语句,比如修改文章的时候,如果用户只修改了标题,那就update ... set title = ? where article_id = ?不要set content = ?(大文本)
(6).必要的时候用不同的存储引擎.比如InnoDB可以减少死锁.HEAP可以提高一个数量级的查询速度

7.用PHP获取客户端IP及服务器IP

客户端:$_SERVER[‘REMOTE_ADDR’]或getenv(‘REMOTE_ADDR’);

服务器:gethostbyname(“baidu.com”);


8.修改session的生存时间



<?php
session_start();
// 保存一天
$lifeTime = 24 * 3600;
setcookie(session_name(), session_id(), time() + $lifeTime, "/");
?>
9.写出发贴数最多的十个人名字的sql,利用下表:members(id,username,posts,pass,email)

SELECT username 
FROM members
GROUP BY id
ORDER BY count(posts) DESC
LIMIT 0 , 10
 
10.简述如何得到当前执行脚本路径,包括所得到参数。
echo $_SERVER['SCRIPT_FILENAME']."?".$_SERVER['QUERY_STRING'];
 
11.mysql_fetch_row() 和mysql_fetch_array之间有什么区别?
mysql_fetch_row() 从和指定的结果标识关联的结果集中取得一行数据并作为数组返回。每个结果的列储存在一个数组的单元中,偏移量从 0 开始。mysql_fetch_array() 是 mysql_fetch_row() 的扩展版本。除了将数据以数字索引方式储存在数组中之外,还可以将数据作为关联索引储存,用字段名作为键名。
 
12.判断以下输出

 $str1 = null;
$str2 = false;
echo $str1==$str2 ? '相等' : '不相等'; //相等
$str3 = '';
$str4 = 0;
echo $str3==$str4 ? '相等' : '不相等'; //相等
$str5 = 0;
$str6 = '0';
echo $str5===$str6 ? '相等' : '不相等'; //不相等
 
13.写出以下结果

<?php
$test = 'aaaaaa';
$abc = & $test;
unset($test);
echo $abc; //aaaaaa
?>
当你 unset 一个引用,只是断开了变量名和变量内容之间的绑定。这并不意味着变量内容被销毁了。

-----------未完待续-------------

本文链接


    
[3]PHP面试题一[转] - CharlesJiang
    来源:    发布时间: 2013-11-07

1.用PHP打印前一天的时间,格式如2012-4-12 10:11:22
echo date("Y-n-d H:i:s",strtotime("-1 day"));

format字符[a:am,pm小写,A:AM,PM大写  g小时,12时制 n月份 前无0]
strtotime()用法如下

<?php
echo strtotime ("now"), "\n";
echo strtotime ("10 September 2000"), "\n";
echo strtotime ("+1 day"), "\n";
echo strtotime ("+1 week"), "\n";
echo strtotime ("+1 week 2 days 4 hours 2 seconds"), "\n";
echo strtotime ("next Thursday"), "\n";
echo strtotime ("last Monday"), "\n";
?>

2.echo() print() print_f()区别

echo()是一个php语句,所以没有返回值,能打印简单的数据。
print()是一个函数,有返回值,能打印简单的数据。
print_r()是一个函数,能打印复杂的(mix)数据。

3.常见的PHP模板引擎

Smarty EasyTemplatePHP

4.哪些工具可以进行版本控制

SVN CVS

5.实现字符翻转的函数

strrev($str);

6.优化Mysql数据库的常用方法

(1).数据库设计方面,这是DBA和Architect的责任,设计结构良好的数据库,必要的时候,去正规化(英文是这个:denormalize,中文翻译成啥我不知道),允许部分数据冗余,避免JOIN操作,以提高查询效率
(2).系统架构设计方面,表散列,把海量数据散列到几个不同的表里面.快慢表,快表只留最新数据,慢表是历史存档.集群,主服务器Read & write,从服务器read only,或者N台服务器,各机器互为Master
(3).(1)和(2)超越PHP Programmer的要求了,会更好,不会没关系.检查有没有少加索引
(4).写高效的SQL语句,看看有没有写低效的SQL语句,比如生成笛卡尔积的全连接啊,大量的Group By和order by,没有limit等等.必要的时候,把数据库逻辑封装到DBMS端的存储过程里面.缓存查询结果,explain每一个sql语句
(5).所得皆必须,只从数据库取必需的数据,比如查询某篇文章的评论数,select count(*) ... where article_id = ? 就可以了,不要先select * ... where article_id = ?然后msql_num_rows.
只传送必须的SQL语句,比如修改文章的时候,如果用户只修改了标题,那就update ... set title = ? where article_id = ?不要set content = ?(大文本)
(6).必要的时候用不同的存储引擎.比如InnoDB可以减少死锁.HEAP可以提高一个数量级的查询速度

7.用PHP获取客户端IP及服务器IP

客户端:$_SERVER[‘REMOTE_ADDR’]或getenv(‘REMOTE_ADDR’);

服务器:gethostbyname(“baidu.com”);

8.修改session的生存时间

<?php
session_start();
// 保存一天
$lifeTime = 24 * 3600;
setcookie(session_name(), session_id(), time() + $lifeTime, "/");
?>
9.写出发贴数最多的十个人名字的sql,利用下表:members(id,username,posts,pass,email)
SELECT username
FROM members
GROUP BY id
ORDER BY count(posts) DESC
LIMIT 0 , 10 10.简述如何得到当前执行脚本路径,包括所得到参数。echo $_SERVER['SCRIPT_FILENAME']."?".$_SERVER['QUERY_STRING']; 11.mysql_fetch_row() 和mysql_fetch_array之间有什么区别?
mysql_fetch_row() 从和指定的结果标识关联的结果集中取得一行数据并作为数组返回。每个结果的列储存在一个数组的单元中,偏移量从 0 开始。mysql_fetch_array() 是 mysql_fetch_row() 的扩展版本。除了将数据以数字索引方式储存在数组中之外,还可以将数据作为关联索引储存,用字段名作为键名。 12.判断以下输出
$str1 = null;
$str2 = false;
echo $str1==$str2 ? '相等' : '不相等'; //相等
$str3 = '';
$str4 = 0;
echo $str3==$str4 ? '相等' : '不相等'; //相等
$str5 = 0;
$str6 = '0';
echo $str5===$str6 ? '相等' : '不相等'; //不相等 13.写出以下结果
<?php
$test = 'aaaaaa';
$abc = & $test;
unset($test);
echo $abc; //aaaaaa
?>
当你 unset 一个引用,只是断开了变量名和变量内容之间的绑定。这并不意味着变量内容被销毁了。

-----------未完待续-------------

本文链接:http://www.cnblogs.com/chalres/p/3142195.html,转载请注明。


    
最新技术文章:
▪PHP函数microtime()时间戳的定义与用法
▪PHP单一入口之apache配置内容
▪PHP数组排序方法总结(收藏)
▪php数组排序方法大全(脚本学堂整理奉献)
▪php数组排序的几个函数(附实例)
▪php二维数组排序(实例)
▪php根据键值对二维数组排序的小例子
▪php验证码(附截图)
▪php数组长度的获取方法(三个实例)
▪php获取数组长度的方法举例
▪判断php数组维度(php数组长度)的方法
▪php获取图片的exif信息的示例代码
▪PHP 数组key长度对性能的影响实例分析
▪php函数指定默认值的方法示例
▪php提交表单到当前页面、提交表单后页面重定...
▪php四舍五入的三种实现方法
▪php获得数组长度(元素个数)的方法
▪php日期函数的简单示例代码
▪php根据键值对二维数组排序的小例子 iis7站长之家
▪php字符串函数的简单示例代码
▪php文件下载代码(多浏览器兼容、支持中文文...
▪php实现文件下载、支持中文文件名的示例代码...
▪php文件下载(防止中文文件名乱码)的示例代码
▪解决PHP文件下载时中文文件名乱码的问题
▪php数组去重(一维、二维数组去重)的简单示例
▪php小数点后取两位的三种实现方法
▪php Redis 队列服务的简单示例
▪PHP导出excel时数字变为科学计数的解决方法
▪PHP数组根据值获取Key的简单示例
▪php数组去重的函数代码示例
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3