当前位置:  编程技术>php
本页文章导读:
    ▪php使用fopen、curl获取网站及远程服务器信息的实例代码      例1,fopen获取网站内容。 <?php /** * 获取网站内容 fopen函数示例 * edit www. */ $handle = fopen ("http://www./", "rb"); $contents = ""; while (!feof($handle)) { $contents .= fread($handle, 8192); } fclose($handle); ech.........
    ▪php防sql注入函数mysql_real_escape_string解析      在php与mysql的编程中,一般都要接受用户输入的数据,此时必须严格过滤用户的数据,以确保网站的安全。 PHP中可以使用 mysql_real_escape_string 函数来过滤非法字符。 本函数将 string 中的特殊字.........
    ▪PHP CURL获取cookies模拟登录的方法介绍      利用PHP的curl函数实现模拟登录的方法。 需要先提取 cookies 并保存,然后利用保存下来的这个cookies再次发送搜索命令即可正常抓数据了。 这其实和论坛的模拟登录一个道理,先POST登录,获取.........

[1]php使用fopen、curl获取网站及远程服务器信息的实例代码
    来源: 互联网  发布时间: 2013-12-24

例1,fopen获取网站内容。

<?php
/**
* 获取网站内容 fopen函数示例
* edit www.
*/
$handle = fopen ("http://www./", "rb");
$contents = "";
while (!feof($handle)) {
$contents .= fread($handle, 8192);
}
fclose($handle);
echo $contents; //输出获取到得内容。
?>

代码2,

//适用于 PHP 5 及更高版本
<?php
$handle = fopen("http://www.", "rb");
$contents = stream_get_contents($handle);
fclose($handle);
echo $contents;
?>

注意:
以上代码,容易报:failed to open stream: HTTP request failed!错误。

解决方法,可以参考下面的介绍。

有朋友建议在php.ini中,有两个选项:allow_url_fopen =on(表示可以通过url打开远程文件),user_agent="PHP"(表示通过哪种脚本访问网络,默认前面有个 " ; " 去掉即
可。)重启服务器。
但操作后,还是会有警告信息,还得设置php.ini中的user_agent,php默认的user_agent是PHP,把它改成Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)来模拟浏览
器:
user_agent="Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"

例2、通过curl来实现获取远程服务器信息。
代码:

<?php
/**
* curl获取网站内容
*/
$url = "http://www.";
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT,10);
$dxycontent = curl_exec($ch);
echo $dxycontent;
?>

这里还有个方法,linux下可以这样:
exec("wget {$url}");

有关wget的用法,大家可以参考如下的文章:
Linux的下载命令wget详解及例子
linux的wget命令详解
使用wget做站点镜像及wget的高级用法
linux下的下载利器wget的使用
wget下载文件时重命名的方法

不得不推荐下wget这个命令啊,那是相当的好用,建议大家牢固掌握。

下面说说,PHP抓取外部资源函数fopen / file_get_contents / curl 的区别:
fopen / file_get_contents 每次请求都会重新做DNS查询,并不对DNS信息进行缓存。
但是CURL会自动对DNS信息进行缓存。对同一域名下的网页或者图片的请求只需要一次DNS查询。如此便大大减少了DNS查询的次数。
因此,CURL的性能比fopen / file_get_contents要好很多。

有了以上的分析,在用php获取网站内容时,对这几个函数如何取舍,你现在的思路是否清晰很多呢?!


    
[2]php防sql注入函数mysql_real_escape_string解析
    来源: 互联网  发布时间: 2013-12-24

在php与mysql的编程中,一般都要接受用户输入的数据,此时必须严格过滤用户的数据,以确保网站的安全。

PHP中可以使用 mysql_real_escape_string 函数来过滤非法字符。
本函数将 string 中的特殊字符转义,并考虑到连接的当前字符集,因此可以安全用于mysql_query()。
mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符。
下列字符受影响:
\x00
\n
\r
\
'
"
\x1a
如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。

使用下在贩函数,即可有效过滤。
代码:用到了php函数--stripslashes()

<?php
function safe($s){ //安全过滤函数
if(get_magic_quotes_gpc()){ $s=stripslashes($s); }
$s=mysql_real_escape_string($s);
return $s;
}
//edit by www.
?>

或在conn公共连接文件里加入,这样就无需修改代码了:
 

<?php
if(get_magic_quotes_gpc()) { $_REQUEST = array_map( 'stripslashes', $_REQUEST); }
$_REQUEST = array_map( 'mysql_real_escape_string', $_REQUEST);
//edit by www.
?>

附,mysql_real_escape_string 语法
mysql_real_escape_string(string,connection)
参数 描述
string 必需。规定要转义的字符串。
connection 可选。规定 MySQL 连接。如果未规定,则使用上一个连接。

其实,一般的还可以利用这个函数 addslashes() 进行转义。作用同样为对GET、POST、COOKIE过来的字符串进行转义处理,通常与 magic_quotes_gpc 结合使用。

下面讲述下addslashes  、magic_quotes_gpc、mysql_real_escape_string 三者之间的区别:

1、addslashes  与 mysql_real_escape_string,同样的作用是经过转义后,可直接插入数据库, 国内很多PHP coder是使用addslashes函数防止SQL注入,但是建议大家使用
后者转义数据。

举例:
addslashes的问题在于可以用0xbf27来代替单引号,而addslashes只是将0xbf27修改为0xbf5c27,成为一个有效的多字节字符,其中的0xbf5c仍会被看作是单引号,所以
addslashes无法成功拦截。
两者何时用:addslashes也不是毫无用处,它是用于单字节字符串的处理,多字节字符还是用mysql_real_escape_string更加安全。

2、magic_quotes_gpc的说明,在首次客户端运行时,可用第一条的举例,对 magic_quotes_gpc 进行 $_['name'] 判断,可转义处理。

3、 mysql_real_escape_string和 mysql_escape_string 这2个函数的区别:
mysql_real_escape_string 必须在(PHP 5以上、PHP 4 >= 4.3.0)版本的情况下才能使用。否则只能用 mysql_escape_string 。
两者区别:mysql_real_escape_string 考虑到连接的当前字符集,而 mysql_escape_string 不考虑。

4、实际开发中,正确的逻辑处理,如下:
首先,检查 magic_quotes_gpc 是否配置为自动转义斜线,若为on,应该调用stripslashes去掉$_REQUEST、$_GET,$_POST、$_COOKIE的转义斜线;然后,查询/写入/更新数据
至mysql时,再使用mysql_real_escape_string进行字符转义。


    
[3]PHP CURL获取cookies模拟登录的方法介绍
    来源: 互联网  发布时间: 2013-12-24

利用PHP的curl函数实现模拟登录的方法。

需要先提取 cookies 并保存,然后利用保存下来的这个cookies再次发送搜索命令即可正常抓数据了。
这其实和论坛的模拟登录一个道理,先POST登录,获取cookies并保存,然后利用这个cookies访问就可以了。

完整代码如下:

<?php
/**
* curl获取cookie,模拟登录
* edit www.
*/
header('Content-Type: text/html; charset=utf-8');

$cookie_file = dirname(__FILE__).'/cookie.txt'; 
//$cookie_file = tempnam("tmp","cookie");

//先获取cookies并保存
$url = "http://www.";
$ch = curl_init($url); //初始化
curl_setopt($ch, CURLOPT_HEADER, 0); //不返回header部分
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //返回字符串,而非直接输出
curl_setopt($ch, CURLOPT_COOKIEJAR,  $cookie_file); //存储cookies
curl_exec($ch);
curl_close($ch);

//使用上面保存的cookies再次访问
$url = "http://www./search?oe=utf8&ie=utf8&source=uds&hl=zh-CN&q=qq";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); //使用上面获取的cookies
$response = curl_exec($ch);
curl_close($ch);

echo $response;
?>

有关curl的用法,大家可以参考如下文章:
php中开启curl扩展的方法详解
php curl post的简单示例
php curl应用实例分析
php curl用法的实例代码
php curl中post与get应用实例代码
php curl模拟登录discuz并模拟发帖的实现方法
php中通过curl smtp发送邮件的例子
Linux curl 常用命令应用举例
PHP中用CURL伪造IP来源的方法
php使用curl判断远程文件是否存在的代码
php使用curl伪造IP来源的代码
php模拟登录qq邮箱(curl命令详解)
php curl 学习总结
curl命令模拟表单上传文件


    
最新技术文章:
▪PHP函数microtime()时间戳的定义与用法
▪PHP单一入口之apache配置内容
▪PHP数组排序方法总结(收藏)
▪php数组排序方法大全(脚本学堂整理奉献)
▪php数组排序的几个函数(附实例)
▪php二维数组排序(实例)
▪php根据键值对二维数组排序的小例子
▪php验证码(附截图)
▪php数组长度的获取方法(三个实例)
▪php获取数组长度的方法举例
▪判断php数组维度(php数组长度)的方法
▪php获取图片的exif信息的示例代码
▪PHP 数组key长度对性能的影响实例分析
▪php函数指定默认值的方法示例
▪php提交表单到当前页面、提交表单后页面重定...
▪php四舍五入的三种实现方法
▪php获得数组长度(元素个数)的方法
▪php日期函数的简单示例代码
▪php数学函数的简单示例代码
▪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