一切福田,不離方寸,從心而覓,感無不通。

Category Archives: Programming Language

curl实现站外采集的方法和技巧

curl是专门用来进行网络交互的库,提供了一堆自定义选项,用来应对不同的环境,稳定性自然要大于file_get_contents。 选择curl的理由 关于curl与file_get_contents,摘抄一段通俗易懂的对比: file_get_contents其实是一堆内置的文件操作函数的合并版本,比如file_exists,fopen,fread,fclose,专门提供给懒人用的,而且它主要是用来对付本地文件的,但又是因为懒人的原因,同时加入了对网络文件的支持; curl是专门用来进行网络交互的库,提供了一堆自定义选项,用来应对不同的环境,稳定性自然要大于file_get_contents。 使用方法 1、开启curl支持 由于php环境安装后默认是没有打开curl支持的,需修改php.ini文件,找到;extension=php_curl.dll,把前面的冒号去掉,重启服务即可; 2、使用curl进行数据抓取 复制代码代码如下: // 初始化一个 cURL 对象 $curl = curl_init(); // 设置你需要抓取的URL curl_setopt($curl, CURLOPT_URL, 'http://www.cmx8.cn'); // 设置header curl_setopt($curl, CURLOPT_HEADER, 1); // 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上。 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 运行cURL,请求网页 $data = curl_exec($curl); // 关闭URL请求 curl_close($curl); 3、通过正则匹配找到关键数据 复制代码代码如下: //$data是curl_exec返回的的值,即采集的目标内容 preg_match_all("/<li class=\"item\">(.*?)<\/li>/",$data, $out, PREG_SET_ORDER); foreach($out as $key => $value){ //此处$value是数组,同时记录找到带匹配字符的整句和单独匹配的字符 echo '匹配到的整句:'.$value[0].' '; echo '单独匹配到的:'.$value[1].' '; } 技巧 1、超时的相关设置 通过curl_setopt($ch, opt) 可以设置一些超时的设置,主要包括: CURLOPT_TIMEOUT 设置cURL允许执行的最长秒数。 CURLOPT_TIMEOUT_MS 设置cURL允许执行的最长毫秒数。 (在cURL 7.16.2中被加入。从PHP 5.2.3起可使用。 ) CURLOPT_CONNECTTIMEOUT 在发起连接前等待的时间,如果设置为0,则无限等待。 CURLOPT_CONNECTTIMEOUT_MS 尝试连接等待的时间,以毫秒为单位。如果设置为0,则无限等待。 在cURL 7.16.2中被加入。从PHP 5.2.3开始可用。 CURLOPT_DNS_CACHE_TIMEOUT 设置在内存中保存DNS信息的时间,默认为120秒。 复制代码代码如下: curl_setopt($ch, CURLOPT_TIMEOUT, 60);   //只需要设置一个秒的数量就可以 […]

龙生   09 Oct 2015
View Details

phpstorm配置Xdebug进行调试PHP教程

运行环境: PHPSTORM版本 : 8.0.1 PHP版本 : 5.6.2 xdebug版本:php_xdebug-2.2.5-5.6-vc11-x86_64.dll ps : php版本和xdebug版本一定要相对应,且要看清64位和32位哦~ 1. PHP安装xdebug扩展 php.ini的配置,下面的配置仅供参考,路径要换成自己的! [xdebug] zend_extension=”D:\wamp\php-5.6.2-x64\ext\php_xdebug-2.2.5-5.6-vc11-x86_64.dll” xdebug.remote_enable = On xdebug.remote_handler = dbgp xdebug.remote_host= localhost xdebug.remote_port = 9000 xdebug.idekey = PHPSTORM ps :  remote_handler 、 remote_host、 remote_port 这些都有默认值,但还是建议设置下,至少知道要设置这些参数~ 查看phpinfo~ 2.PHPSTORM设置 楼主以前一直用zendstudio,刚开始用phpstorm非常蛋疼,用了一段时间后发现还挺好用的~ 1.首先检查phpstorm的xdebug配置 这里的debug port要和php.ini里面的 xdebug.remote_port相一致!默认是9000,如果9000端口被占用的话,可以改成其他端口。 2. 设置debug. 添加本地的 web server~ www.51open.pcom 是我本地的 web server~ ~ 3.开始调试 打好第一个断点,shift + F9就可以了 打好 第一个断点 ,选中配置的debug,  按旁边的臭虫 按钮 总结: 根据断点配置,或在打开 Debug URL 的过程中,或在 POST 之后,如果 PhpStorm 监听到了 Debug 连接,就会立即切换到编辑器界面,并跳转到设置的断点处,浏览器端会等待 PhpStorm 的操作。 你可以随时中断 PhpStorm 的调试,或方便的进行 Step Into / Step Over / Run to cursor(这个刁爆了): […]

龙生   09 Oct 2015
View Details

phpstorm 502 bad gateway 最简单解决办法

问题: 解决办法: 1.电脑左下角开始--搜索”php.exe“,记录下路径,如我的是C:\xampp\php\ 2.点击phpstorm里的configured PHP Interpreter(见下图) 3.点击下图里的红框 4.在下图红框输入步骤1里的php的文件夹路径确认即可。   PS:本人是新手在自学PHP,有什么说得不对的,麻烦各位指出。谢谢。   from:http://www.bubuko.com/infodetail-649755.html

龙生   08 Oct 2015
View Details

PhpStorm 默认快捷键

<?php /** * Created by JetBrains PhpStorm. * User: Administrator * Date: 12-9-18 * Time: 上午11:03 * To change this template use File | Settings | File Templates. */ //  ctrl+j            插入活动代码提示 //  ctrl+alt+t        当前位置插入环绕代码 //  alt+insert        生成代码菜单 //  ctrl+q            查看代码注释 //  ctrl+d            复制当前行 //  ctrl+y            删除当前行 //  shift+F6          重命名 //  ctrl+shift+u      字母大小写转换 //  ctrl+f            查找 //  ctrl+r            替换 //  F4                查看源码 //  ctrl+shift+i      查看变量或方法定义源 //  ctrl+g            跳转行 //  ctrl+alt+F12      跳转至当前文件在磁盘上的位置 //  alt+down          查看下一个方法 //  alt+up            查看上一个方法 //  ctrl+alt+l        重新格式化代码 //  ctrl+shift+down   statement向下移动 //  ctrl+shift+up     statement向上移动 //  alt+shift+down    line向下移动 //  alt+shift+up      line向上移动 //  ctrl+/            行注释 //  ctrl+shift+/      块注释 //  ctrl+shift+n      打开工程中的文件 //  ctrl+b            跳到变量申明处 //  ctrl+[]           匹配 {}[] //  ctrl+shift+]/[    选中块代码<table>….</table> //  ctrl+x            剪切行 //  ctrl+shift+v      复制多个文本 //  alt+left/right    标签切换 //  ctrl+p            显示默认参数

龙生   08 Oct 2015
View Details

phpstorm 设置多项目并存

phpstorm 设置多项目并存 phpstorm 或 webstorm设置多个项目可以并存: File -> settings -> Directories -> Add Content Root 中添加你当前的工程目录。   from:http://www.bestphper.cn/article-46.html

龙生   08 Oct 2015
View Details

c#中枚举类型的定义与使用

介绍 枚举是一个指定的常数,其基础类型可以是除 Char 外的任何整型。 如果没有显式声明基础类型,则使用 Int32。 编程语言通常提供语法来声明由一组已命名的常数和它们的值组成的枚举。 定义 默认基数从O开始,也可指定数值。 enum Days { Saturday=1, Sunday, Monday, Tuesday, Wednesday, Thursday, Friday }; enum Colors { Red = 1, Green = 2, Blue = 4, Yellow = 8 }; 使用 Colors myColors = Colors.Red; string strColor=myColors.tostring(); int    IntColor=(int)myColors ;  位或 Colors myColors = Colors.Red | Colors.Blue | Colors.Yellow; 位与 Colors myColors = Colors.Red & Colors.Blue & Colors.Yellow; 遍历  foreach (string s in Enum.GetNames(typeof(Days)))   Response.Write(s + "--" + Enum.Parse(typeof(Days), s).ToString()); 转换 Colors mc=Colors Enum.Parse(typeof(Colors ), "red");   if (System.Enum.IsDefined(typeof(Days), "Monday"))    Days ds= (Days)Enum.Parse(typeof(Days), "Monday"); 实例二:     public enum NoticeType    {        Notice = 'A',        LabRule = 'H',        HotInformation = 'N',        Column = 'C',        All = '1',        Null = '0'    }      //新建枚举类型         NoticeType noticeType1 = NoticeType.Column;         //把枚举类型转换为string d="Column"         string d = noticeType1.ToString();         //取得枚举类型的基数 dd=’C'         char dd = (char)noticeType1;         //通过基数取得对应的枚举类型 noticeType2 = NoticeType.Notice         //(NoticeType)’A';  两种方式都可以         NoticeType noticeType2 = (NoticeType)Char.Parse("A");      //通过名称取得枚举类型 noticeType3 = NoticeType.Notice         NoticeType noticeType3 = (NoticeType)Enum.Parse(typeof(NoticeType), "Notice"); from:http://www.cnblogs.com/an-wl/archive/2011/04/14/2015815.html

龙生   02 Oct 2015
View Details

MVC中的@Html.DisplayFor等方法如何控制日期的显示格式

在Sql Server2005中,如果将某字段定义成日期 时间 类型DateTime,那么在视图中会默认显示成年月日时分秒的方式(如  2013/8/6 13:37:33) 如果只想显示成年月日形式,不要时分秒,那么该怎么办呢? 第一种方法:先设置一个时间显示的模板,然后在需要显示时间的地方调用这个模板就行了。 1、在Share文件夹下,创建一个文件夹DisplayTemplates 2、在DisplayTemplates文件夹下,创建一个视图LongDateTime.cshtml 3、在视图LongDateTime.cshtml中输入代码

当然,后面那句也可以换成@Model.ToShortDateString()或其它日期格式。 4、在需要显示日期的地方,由原来的

替换成

这样就完成了时间格式的显示转换。由原来的显示方式(2013/8/6 13:37:33)显示成了(2013年8月6日) 第二种方法:model类上面添加DisplayFormat的attribute. 如:

显示出来后,照样是2013年8月6日这种格式。 from:http://www.cnblogs.com/Rising/p/3722299.html

龙生   01 Oct 2015
View Details

php判断数组中是否存在指定键(key)的方法

本文实例讲述了php判断数组中是否存在指定键(key)的方法。分享给大家供大家参考。具体分析如下: php中有两个函数用来判断数组中是否包含指定的键,分别是array_key_exists和isset array_key_exists语法如下 1 array_key_exists($key, $array) 如果键存在返回true isset函数语法如下 1 isset($array[$key]) 如果键存在返回true 演示代码如下: 1 2 3 4 5 6 7 <?php $array = array("Zero"=>"PHP", "One"=>"Perl", "Two"=>"Java"); print("Is 'One' defined? ".array_key_exists("One", $array)."\n"); print("Is '1' defined? ".array_key_exists("1", $array)."\n"); print("Is 'Two' defined? ".isset($array["Two"])."\n"); print("Is '2' defined? ".isset($array[2])."\n"); ?> 返回结果如下: 1 2 3 4 Is 'One' defined? 1 Is '1′ defined? Is 'Two' defined? 1 Is '2′ defined? from:http://www.jb51.net/article/62372.htm

龙生   25 Sep 2015
View Details

解决Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future:

php 5个版本,5.2、5.3、5.4、5.5,怕跟不上时代,新的服务器直接上5.5,但是程序出现如下错误:Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in,看意思就很明了,说mysql_connect这个模块将在未来弃用,请你使用mysqli或者PDO来替代。 解决方法1: 禁止php报错 display_errors = On 改为 display_errors = Off 鉴于这个服务器都是给用户用的,有时候他们需要报错(…都是给朋友用的,^_^),不能这做,让他们改程序吧,看方案2. 解决方法2: 常用的php语法连接mysql如下 <?php $link = mysql_connect('localhost', 'user', 'password'); mysql_select_db('dbname', $link); 改成mysqi <?php $link = mysqli_connect('localhost', 'user', 'password', 'dbname'); 常用mysql建表SQL如下 <?php //  老的 mysql_query('CREATE TEMPORARY TABLE table', $link); // 新的 mysqli_query($link, 'CREATE TEMPORARY TABLE table'); 解决方法三: 在php程序代码里面设置报警级别 <?php error_reporting(E_ALL ^ E_DEPRECATED); Deprecated的问题就这样解决掉了,不过还是建议大家尽快取消mysql的用户,全部都走向mysqli或者mysqlnd等等。mysql确实是太不安全而且太老旧了。 转载请注明出处:http://www.ttlsa.com/html/2502.html

龙生   21 Sep 2015
View Details

ASP.NET MVC3 Model验证总结

ASP.NET MVC3中的Model是自验证的,这是通过.NET4的System.ComponentModel.DataAnnotations命名空间完成的。 我们要做的只是给Model类的各属性加上对应的验证标记(Attributes)就可以让MVC3框架帮我们完成验证。我以MVC3项目模板自带的登录 做例子讲解Model的验证。 一、启用客户端验证: 客户端验证主要是为了提高用户体验,在网页不回刷的情况下完成验证。 第一步是要在web.config里启用客户端验证,这在MVC3自带的模板项目中已经有了: <add key="ClientValidationEnabled" value="true"/> <add key="UnobtrusiveJavaScriptEnabled" value="true"/> 然后在被验证的View页面上要加入这样两个JavaScript,注意,他们是依赖于JQuery的: <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 验证消息的显示有两种,一种是ValidationSummary,它可以显示一份验证消息的汇总,包括从后台Action里返回的消息。 @Html.ValidationSummary(true, "Login was unsuccessful. Please correct the errors and try again.") 另一种是Model中各属性对应HTML控件的验证消息: @Html.ValidationMessageFor(m => m.UserName) 二、在Model中加入验证标记 MVC3项目模板自带的登录模型类如下: public class LogOnModel {     [Required]     [Display(Name = "User name")]     public string UserName { get; set; }     [Required]     [DataType(DataType.Password)]     [Display(Name = "Password")]     public string Password { get; set; }     [Display(Name = "Remember me?")]     public bool RememberMe { get; set; } } 对比普通的C#类,我们发现每个属性上都多了被方括号“[]”包围的标记。其中,[Required]是验证标记的一种,而[Display]、[DataType]则是为了显示对应的HTML控件,这不在本文讨论范围之内。 除了Required,我们还可以在Model中添加其他有用的验证标记。下面是个较完整的列表: Model类中可以添加的验证标记: 1. 必填字段 [Required] public string FirstName { […]

龙生   15 Sep 2015
View Details
1 129 130 131 177