Nginx的rewrite规则与Apache有一些区别,特地找来一些资料,学习一下Nginx的rewrite规则。
正则表达式匹配,其中:
~ 为区分大小写匹配
~* 为不区分大小写匹配
!~ 和 !~* 分别为区分大小写不匹配及不区分大小写不匹配
文件及目录匹配,其中:
-f 和 !-f 用来判断是否存在文件
-d 和 !-d 用来判断是否存在目录
-e 和 !-e 用来判断是否存在文件或目录
-x 和 !-x 用来判断文件是否可执行
专注WEB编程开发技术
Nginx的rewrite规则与Apache有一些区别,特地找来一些资料,学习一下Nginx的rewrite规则。
正则表达式匹配,其中:
~ 为区分大小写匹配
~* 为不区分大小写匹配
!~ 和 !~* 分别为区分大小写不匹配及不区分大小写不匹配
文件及目录匹配,其中:
-f 和 !-f 用来判断是否存在文件
-d 和 !-d 用来判断是否存在目录
-e 和 !-e 用来判断是否存在文件或目录
-x 和 !-x 用来判断文件是否可执行
一、建议使用一个索引来满足Order By子句。
在条件允许的情况下,笔者建议最好使用一个索引来满足 Order By子句。如此的话,就可以避免额外的排序工作。这里笔者需要强调的一点是及时Order By子句不确切匹配索引,但是只要Where子句中所有未使用的索引部分和所有额外的 Order by子句中的列为常数,此时就可以使用索引。具体的来说,推荐如下的查询语句。
先看看调用方法:
<img id="vcodeimages" src="vcodeimages.php" onclick="this.src='vcodeimages.php?t='+Math.random()" style="cursor:pointer;" alt="点击刷新验证码" />
上面的代码中,img标签的src指向了一个名为vcodeimages.php的文件,这个文件就是负责实现生成验证码图片的PHP程序,下面我们看看vcodeimages.php文件的代码,也是验证码的实现方法:
<?php session_start(); header("Content-type: image/png"); $VerifyCode = ""; $im = ImageCreate(50, 20); //开始创建图形 $color_bg = ImageColorAllocate($im, 255, 255, 255); //定义背景颜色 $color_font = ImageColorAllocate($im, 0, 0, 0); //定义文字颜色 $color_pixel = ImageColorAllocate($im, 0, 0, 0); //定义干扰像素颜色 for($i=0; $i<4; $i++) { //加入随机数 $RandNum = strval(mt_rand("1", "9")); $VerifyCode .= $RandNum; ImageString($im, 5, ($i * 11) + 4, 2, $RandNum, $color_font); } for($i=0; $i<200; $i++) { //加入干扰象素 ImageSetPixel($im, rand() % 70, rand() % 30, $color_pixel); } $_SESSION["VerifyCode"] = $VerifyCode; //将验证码存入Session ImagePNG($im); //以PNG格式建立图形 ImageDestroy($im); //结束创建图形 ?>
阳光部落原创,更多内容请访问 http://www.sunbloger.com/
下面的代码是一个PHP的远程图片抓取函数:
<?php /** * 抓取远程图片 * * @param string $url 远程图片路径 * @param string $filename 本地存储文件名 */ function grabImage($url, $filename = '') { if($url == '') { return false; //如果 $url 为空则返回 false; } $ext_name = strrchr($url, '.'); //获取图片的扩展名 if($ext_name != '.gif' && $ext_name != '.jpg' && $ext_name != '.bmp' && $ext_name != '.png') { return false; //格式不在允许的范围 } if($filename == '') { $filename = time().$ext_name; //以时间戳另起名 } //开始捕获 ob_start(); readfile($url); $img_data = ob_get_contents(); ob_end_clean(); $size = strlen($img_data); $local_file = fopen($filename , 'a'); fwrite($local_file, $img_data); fclose($local_file); return $filename; } ?>
1.报错
include引入文件时,如果遇到错误,会报出Warning,并继续执行后面的代码;
require引入文件时,如果遇到错误,会报出Error,并停止运行后面的代码。
举例说明,创建两个名为 test-include.php 和 test-require.php 的PHP文件,
注意相同的目录中,不要存在一个名字是test-nothing.php的文件。
test-include.php
<?php include 'test-nothing.php'; //包含一个不存在的文件 echo 'abc'; ?>
test-require.php
<?php require 'test-nothing.php'; //包含一个不存在的文件 echo 'abc'; ?>
使用PHP的cURL库可以简单和有效地去抓网页。你只需要运行一个脚本,然后分析一下你所抓取的网页,然后就可以以程序的方式得到你想要的数据了。无论是你想从从一个链接上取部分数据,或是取一个XML文件并把其导入数据库,那怕就是简单的获取网页内容,cURL 是一个功能强大的PHP库。本文主要讲述如果使用这个PHP库。
下面是一个利用cURL库抓取网页的简单例子:
<?php $curl = curl_init(); //初始化一个cURL对象 curl_setopt($curl, CURLOPT_URL, 'http://cocre.com'); //设置你需要抓取的URL curl_setopt($curl, CURLOPT_HEADER, 1); //设置header curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //设置cURL参数 $data = curl_exec($curl); //运行cURL,请求网页 curl_close($curl); //关闭URL请求 var_dump($data); //显示获得的数据 ?>
这次修改主要是增加了2个新function:
1. getTableEngine(),用于获取表引擎;
2. Replace(),以覆盖方式插入数据。
分享源码,仅供技术交流,下载请移步至:http://www.sunbloger.com/download/
源码如下:
最近用Java写的一个密码生成器,实现方法是首先定义一个候选字符数组,并通过java.util.Random中的nextInt()方法生成一个随机整数做为候选字符数组的键,来实现随机取出字符的功能,详细程序请见下面的源代码:
近期我刚刚完成了一个信息采集的Java项目,其中采集环节是以多线程的方式来运行的。开发时在多线程的控制方面遇到了不少的麻烦,主要是线程同步问题和线程的状态管理,我就这两方面简单谈谈自己的心得。
在Java中,经常会出现多个线程同时对同一资源进行操作,比如同时改变同一个变量,例如线程A刚刚将变量值改为1,紧接着线程B又将变量值改为2,这时线程A继续下面的程序时如果需要用的这个变量,就会出现错误。
因此我们需要让一个线程操作资源时其他线程进行等待,这就需要用到锁的概念,Java中提供了synchronized这个方法让线程对资源操作时进行同步。synchronized具体的用法可以上网搜索一下,相关的技术文章很多很多。这里就不详细举例了。
在我的项目中,还遇到了另外一个问题,就是线程尚未结束,主进程就已经结束了,由于主进程过早结束造成数据库连接被销毁,导致线程无法正常操作数据库而报错。我的解决方案是先构建一个线程池,线程池中记录活动的线程数量,在主进程最后结束前,做一个while循环判断线程池中的活动线程数量,当活动线程为0时,再退出while循环并且结束主进程。
线程池的实现方法简要来说就是每创建一个新的线程,就将线程池中的活动线程数量+1,当线程结束时,通过线程回调,将线程池中的活动线程数量再-1。