PHP定时更新程序设计

说道定时器,我以前一直进入一个死胡同,而且一直迷惑不解的是:“服务器怎么能直接去执行PHP代码?”

现在回想起来,我以前的想法是错误的,网页的执行流程

 打开WEB页面 —- 加载HTML代码 (包括CSS,javascript)— 执行PHP代码 — 完成 

粗约的就先理解成上面的这个样子。

我们都知道PHP做成服务器端的脚本,它是有超时设置的,可以通过 set_time_limit() 函数来处理。但这样处理PHP代码十分

消耗CPU资源。所以不建议通过循环处理PHP代码来实现。

一般的情况是用javascript来处理。

 $(function(){
	var tims = 1000*60*60*10; //设置延迟处理的时间,这里设置的是10个小时
	  setInterval(function(){
    //要执行的码
        $.post("./data.php",{ postdata },function(datas){
			if(id.data == 1)
			{
			  $("body").append(id.info+"<br/>");
			}
	 });
},tims);
	},json);

上面是WEB前台要执行的javascript代码,通过延时执行ajax来达到自动处理的效果 继续阅读

中国银联支付平台开发和实现

日志

这几天一直在研究chinapay 这个支付平台,根据他们提供的开发文档写,了解业务流程等等,应该是很简单的东西。

后来直到做了以后才发现我自己想的太简单了。

但,庆幸的是还是做事完了,我现在总结一下心得

  1. 遇到问题不要着急,要淡定,这个说的简单但做起来确实有点难。
  2. 遇到问题要等一等,如果实在是想不出方法,还可以把问问放一放,过几天回头再看看。
  3. 检测错误的时候要常把数据打印出来,看看有没有数据没有。

就chinapay的平台,我发现几个问题

数据用CURL模拟POST发送的时候,一定要注意字符的顺序,并且中文字符串都要用urlencode()函数进行编码,不然

chinapay的服务器就是报HTTP 500的错误。

这个问题,我是怎么发现的呢?其实做javascript非跨域发送数据的时候,我就用firebug看过数据传输了

curl_post

curl_post

仔细看看上面POST传输的数据。中间没有中文字符,但是有特殊字符都是通过urlencode()处理过的。 继续阅读

PHP处理数字

PHP 是一门脚本语言,但它很神奇,你用POST一串数字过去,用var_dump()打印出来,你会发现,这串数字的格式是string。

今天,我要做一个功能,把12位数字,如:000000100000

像上面这种以分为单位的数字,一般人看起来很麻烦,所以,我们要处理一下显示成如下的样子

数字处理后的效果图

数字处理后的效果图

像这样,就看起来方便一点。要怎么处理,我本打算用正则,但/d 是匹配出0-9的数字,我要从新写匹配方式,再三反思,还是用

简单的方式


function transAmt($value)

{

//将字符串转换成数组

$array = str_split($value);

//对数组进行遍历

foreach($array as $key=>$va)

{

if($va != 0)

{

$start = $key;

break;

}

}
//对字符串组进行分割
$len = strlen($value) - $start;
$substr =  substr($value,$start,$len);
 //对数据进行处理,先获取子串的长度
  $smallnum = substr($substr,-2,2);
   $bignum = substr($substr,0,$len-2);
   return $bignum.".".$smallnum;
 }

这样就完事了,就是把字符串转换成数组,再操作数组。

这应该算是PHP 操作字符串的惯用手法。

编程的最简单的思路:遇到问题,针对问题提出解决问题的方法,再多个问题总结,得到共同点。

总的来说,就是把面向过程的函数转换成面向对象的类。

图片新闻的设计与实现

今天项目中要做一个图片新闻的,就是把文字新闻里面的图片匹配出来。存在数据库里面,就不要手动在上传图片

只要做到在新闻编辑器上传的新闻代码中匹配出 SRC=后面的路径就可以了。

这里要用到正则表达式,不懂正则表达式的,可以先搜索一下资料了解一下。

  /**模式匹配**/
$regex = "/src=(.+?).(jpg|gif|png|bmp)/i";
$str = '<img src="hnaz/Public/images/xnlogo.gif" width=\"100\" height=\"200\"  />';
$matches = array();
echo '<pre>'
if(preg_match_all($regex, $str, $matches)){
    var_dump($matches);
}else
{
   echo "木有匹配出来";
}
echo $str;
?>

继续阅读

PHP在线打包下载

昨天晚上,为了弄这个打包下载的事,弄的事焦头烂额。有几个问题,第一个是开始PHP_ZIP.dll的问题。话说只要把PHP.INI里面的extend_dir里面的前的”;”号去掉。再重启IIS或者apache就可以了。

问题是老是找不到系统配置的真正的PHP.INI。

PHP配置图

PHP配置图

第二个是告诉你配置文档的路径,按着找就可以了。我当时脑袋秀逗了,浪费了很多时间。

这个开启PHP_ZIP扩展库以后,就可以开始打包下载了。

 $filename= date("YmdHis");  
  
 $zip = new ZipArchive();//使用本类,linux需开启zlib,windows需取消php_zip.dll前的注释  
 
   $zip->open($filename.".zip", ZipArchive::OVERWRITE); //$data 就是从数据库里面读出的数字
    
   foreach( $data as $val){  
   
      $attachfile = "E:\bysj\bysj".$val['fileaddr'].$val['filename']; //写硬路径,但建议用PHP环境变量
 
        $attachfile=iconv("UTF-8","GBK",$attachfile); //转码,是打包中文文档的关键

	    $zip->addFile( $attachfile , basename($attachfile)); //压栈

	                       }

    $zip->close();//关闭  

header("Content-type:text/html;charset=utf-8");//设置页面编号

header("Cache-Control: public");

header("Content-Description: File Transfer");

header('Content-disposition: attachment; filename='.basename($filename)); //文件名  

header("Content-Type: application/zip"); //zip格式的  

header("Content-Transfer-Encoding: binary"); //告诉浏览器,这是二进制文件   

header('Content-Length: '. filesize($filename)); //告诉浏览器,文件大小  

@readfile($filename.".zip");

上面的代码基本就可以实现文档打包下载了,也解决了中文文档无法打包下载的问题。
但我数据库里面明明是用UTF-8存储的数据,但为嘛读出了,ZIP老是找不到文档呢?一直困惑。

SQL虚表–视图

很多人在做网站的时候,用到过连表查询。在关系型数据库中,根据3NF的要求,数据要尽量的分开,因为原子性。

但在多表,多数据连接的时候,就会出现一个问题,查询速度直线下降。1s-2s还是可以接受,但10s我真接受不了。

今天介绍一个方法对付多表联查速度过慢的情况的解决方法–建立视图

视图是虚拟的表,是不存在的,在PHPmyadmin里面,你可以在数据库里面看到你建立的视图。

视图图片

视图图片

建立视图很简单一行SQL代码

  create view [V_name] as (select);

上面就是说了一个公式,看不懂没关系,我下面会接着说

  create view v_table as select * from dwz_tong

继续阅读

一个价值900的ASP仿站

本来不打算做ASP网站的,但既然辅导员推荐那就做吧~

自从有了laoY这个“伟人”以后,一个ASP网站都是美工问题。所有“腾讯精神”就显得尤为重要了。

说实话,这个也没什么意思,除了忽悠自己以外和外行以外,真没什么。不建议大家学我,我是逼于无赖。

做了一个宅男,我还是要发扬“人人为我,我为人人”的P2P精神,给大家共享一个东西。

发现,laoY的文章管理系统2.5的数据库和3.0的数据是不一样的。有字段增加,不能直接移植。 继续阅读

在Apache中隐藏thinkphp中ULR的index.php

日志

在thinkphp中的配置中,用到了目录分页,就基本用了不__URL__这个全局变量了,很源码,后来发现是index。php的问题

在网上找了一个方式隐藏起来,就四部。如果是window的环境,就要改Apache配置

1.httpd.conf配置文件中加载了mod_rewrite.so模块


//在APACHE里面去配置

#LoadModule rewrite_module modules/mod_rewrite.so把前面的警号去掉

2.AllowOverride None 讲None改为 All


//在APACHE里面去配置 (注意其他地方的AllowOverride也统统设置为ALL)

<Directory >

AllowOverride none  改   AllowOverride ALL

Options None

Order allow,deny

Allow from all

</Directory>

继续阅读