首页 > 编程技术 > php

有关在Windows下配置PHP Apache Optimizer失败的问题解决方案

发布时间:2016-11-25 16:15

昨晚在Windows XP Professional [带IIS]下安装了PHP 5.0.5和 Apache 2.0.54[监听端口8088].
今天在安装Discuz论坛时被要求安装Zend-Optimizer以支持加密过的PHP文件.
下载到Zend-Optimizer 2.5.7的Win32安装文件
在安装时,开始很顺利
Apache Root和php.ini选择路径分别为:
E:/Program Files/Apache Group/Apache2
E:/PHP5
可是到后来需要重启Apache的时候,重启失败.手动重启.提示安装成功.可是在phpinfo.php中察看时,发现Optimizer并没有和PHP关联上.有关Zend的提示信息为:
Zend Engine v2.0.5,Copyright(c) 1998-2004 Zend Technologies. 并没有Optimizer的信息.加密文件也无法正确执行.
开始以为是Apache重启的问题,反复试验后发现Apache正常.后来在网上搜索,也没有发现相关的解决方案.后来突然想到之前复制了一个Php.ini文件到了C:/Windows目录下,想是不是实际上使用的那个ini文件.
尝试重装Optimizer,ini文件路径选择C:/Windows.还是手动重启Apache.
安装结束察看phpinfo.php,Zend提示信息为
Zend Engine v2.0.5,Copyright (c) 1998-2004 Zend Technologies.
With Zend Extention Manager v1.0.6,Copyright(c) 2003-2004,by Zend Technologies
With Zend Optimizer v2.5.7,Copyright(C) 1998-2004,by Zend Technologies
成功安装Optimizer,执行Discuz加密文件正常!
总结:在安装Optimizer时,php.ini文件一定要选择在Windows目录下安装的实际使用的那个.其实在安装时它是提示C:/Windows的,不过自己没有注意,因此导致了安装的失败.


写了几个身份证方面的函数,个人感觉挺有用的,特别是在网络问卷调查时,对个人信息里的身份证进行验证很有用,但是应者寥寥,还是收在自己的blog里算了。
 

<?php
// 计算身份证校验码,根据国家标准GB 11643-1999
function idcard_verify_number($idcard_base){
 if (strlen($idcard_base) != 17){ return false; }
 // 加权因子
 $factor = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
 // 校验码对应值
 $verify_number_list = array(’1’, ’0’, ’X’, ’9’, ’8’, ’7’, ’6’, ’5’, ’4’, ’3’, ’2’);
 $checksum = 0;
 for ($i = 0; $i < strlen($idcard_base); $i ){
  $checksum = substr($idcard_base, $i, 1) * $factor[$i];
 }
 $mod = $checksum % 11;
 $verify_number = $verify_number_list[$mod];
 return $verify_number;
}
// 将15位身份证升级到18位
function idcard_15to18($idcard){
 if (strlen($idcard) != 15){
  return false;
 }else{
  // 如果身份证顺序码是996 997 998 999,这些是为百岁以上老人的特殊编码
  if (array_search(substr($idcard, 12, 3), array(’996’, ’997’, ’998’, ’999’)) !== false){
   $idcard = substr($idcard, 0, 6) . ’18’. substr($idcard, 6, 9);
  }else{
   $idcard = substr($idcard, 0, 6) . ’19’. substr($idcard, 6, 9);
  }
 }
 $idcard = $idcard . idcard_verify_number($idcard);
 return $idcard;
}
// 18位身份证校验码有效性检查
function idcard_checksum18($idcard){
 if (strlen($idcard) != 18){ return false; }
 $idcard_base = substr($idcard, 0, 17);
 if (idcard_verify_number($idcard_base) != strtoupper(substr($idcard, 17, 1))){
  return false;
 }else{
  return true;
 }
}
?>

  其中的$idcard_base是指身份证中的本位码,本位码是18位身份证里才有的,也就是18位身份证的前17位,最后一位称为校验码
  一般在使用的时候不用直接调用idcard_verify_number(),平时的应用大多是使用后两个函数,这些函数都没有关心身份证字符串的格式问题,在调用前自行进行格式检查。


片段3。创建新的篮子并向其中增加一条项目
<?php
// 将项目计数设为1
$ses_basket_items=1;
// 填充4个数组的第0个位置,使用从href链接传过来的值
// 链接是在'给你的页面增加链接’部分所讲的
$ses_basket_name[0]=$basket;
$ses_basket_amount[0]=1;
$ses_basket_price[0]=$price;
$ses_basket_id[0]=$id;
// 在session中注册新的篮子
session_register("ses_basket_items");
session_register("ses_basket_name");
session_register("ses_basket_amount");
session_register("ses_basket_price");
session_register("ses_basket_id");
?>
  这样将创建一个篮子,将所以的值填在数组第0个位置上,并利用session注册数组。一个篮子诞生了。
片段4。填充篮子
<?php
$basket_position_counter=0; //篮子中的位置
$double=0; //双重入口标志设为NO
if ($ses_basket_items>0){
// 检查是否篮子包含的项目中有双重入口
foreach ($ses_basket_name as $basket_item){
// 遍历数组所包含的名字,检查是否与从href所传来的相配匹
if ($basket_item==$basket){
// 如果在篮子中已经有了一个项目,将flag设为1
$double=1;
// 记住项目的位置,将进行更新
$basket_position=$basket_position_counter;
}
$basket_position_counter ; //增加篮子中的实际位置
}
}
// 更新篮子
if ($double==1){
// 如果项目在你的篮子中已经存在则更新在$basket_position处理的数量和位置
$oldamount=$ses_basket_amount[$basket_position];
$ses_basket_amount[$basket_position] ;
$amount=$ses_basket_amount[$basket_position];
$oldprice=$ses_basket_price[$basket_position];
//更新价格
$newprice=($oldprice/$oldamount)*$amount;
$ses_basket_price[$basket_position]=$newprice;
}else{
// 如果它不在你的篮子中,则在数组末尾增加新的项目
$ses_basket_name[]=$basket;
$ses_basket_amount[]=1;
$ses_basket_price[]=$price;
$ses_basket_id[]=$id;
$ses_basket_items ;
需要gd库支持.
Image 图像函数
参见http://php.liukang.com/manual/zh/ref.image.php
<?php
// BY PHP 国度 www.phphot.be
//关闭报错
error_reporting(0);
//图片宽度
$x_size=60;
//图片高度
$y_size=20;
//生成4个随机字符
$nmsg=num_rand(4);
//支持安全通连接吗?
$S=$_SERVER['SERVER_PORT']=='443' ? 1:0;
//使用cookie记录随机码
//expire=0 cookie将会在会话结束后(一般是浏览器关闭)失效。
 
setCookie('ck_num',md5($nmsg),0,'/','',$S);
//创建宽:60*20的图片(画布)
$aimg = imagecreate($x_size,$y_size);
//设置图片背景色
$back = imagecolorallocate($aimg, 255, 255, 255);
//设置字体颜色
$border = imagecolorallocate($aimg, 0, 0, 0);
//从0,0点填充59*19的白色矩形区域
imagefilledrectangle($aimg, 0, 0, $x_size - 1, $y_size - 1, $back);
//从0,0点绘制59*19的黑色矩形边框
imagerectangle($aimg, 0, 0, $x_size - 1, $y_size - 1, $border);
for ($i=0;$i<strlen($nmsg);$i++){
     //在图片上写字
     imageString($aimg,5,$i*$x_size/4+3,2, $nmsg[$i],$border);
}
header("Content-type: image/png");
imagepng($aimg);
imagedestroy($aimg);exit;
function num_rand($lenth){
     // 播下一个随机数发生器种子
     //php自4.2.0起,,此参数变为可选项,当该项为空时,会被设为随时数
     mt_srand((double)microtime() * 1000000);
     //产生有4个随机数字的字符串
     for($i=0;$i<$lenth;$i++){
        $randval.= mt_rand(0,9);
     }
     //对含有4个数字的字符串使用md5加密,长度是32位的
     //从3长度为32的字符中,自最小数起或最大数32-$lenth起,取长度为$lenth的字符串
     $randval=substr(md5($randval),mt_rand(0,32-$lenth),$lenth);
     return $randval;
}
?> 


生成6 ~ 16位的用户名若干个,主要是文本操作,同事前提是要有一个字符串包。主要包含三个程序。
程序一:负责从字典中随机提取数据,写入一个新文件。(1.php)
<?php
/* 从字典文件中提取随机值 */
$file1 = "./Words.dic";
$file2 = "./common_pass_mini.dic";
$file3 = "./Sys_Month_Date.Dic";
$rfile = "./5.dic";
$n = 2000;
//提取字典
$basef = file($file1);
$extf = file($file2);
$extf2 = file($file3);
$bf_sum = (count($basef)-1);
$ef_sum = (count($extf)-1);
$ef2_sum =(count($extf2)-1);
//获取随机用户名
for ($i=0; $i<$n; $i++)
{
 $bn = crand(0, $bf_sum);
 $en = crand(0, $ef_sum);
 $en2 = crand(0, $ef2_sum);
 $name = $basef[$bn]."_".$extf[$en];
 $name = str_replace(" ", "", $name);
 $all_name[] = $name;
}
//写入文件
$result = implode(" ", $all_name);
$fp = fopen($rfile, "a+") or die('Open $rfile failed');
if (fwrite($fp, $result)) {
 echo 'Write user succeed!';
} else {
 echo 'Write user failed';
}
//生成随机数字函数
function crand($start, $end)
{
 return mt_rand($start, $end);
}
?>
程序二:负责把上面生成的数个文件的结果合并。(2.php)
<?php
/* 合并所有生成结果 111cn.net*/
$result_file = "./result.dic";
$fp = fopen($result_file, "a+") or die("Open $result_file failed");
//合并 1.dic ~ 5.dic
for ($i=1; $i<=5; $i++)
{
 $cur_file = file_get_contents($i.".dic");
 fwrite($fp, $cur_file);
}
//合并 10.dic ~ 11.dic
for ($i=10; $i<=11; $i++)
{
 $cur_file = file_get_contents($i.".dic");
 fwrite($fp, $cur_file);
}
fclose($fp);
echo 'Write Succeed';
?>
程序三:负责过滤重复值和不属于 6~16 之间的值并且生成最终结果(3.php)
<?php
/* 生成最终结果 */
$file = "./result.dic";
$target = "./target.dic";
标签:[!--infotagslink--]

您可能感兴趣的文章: