今天的工作是迁移一个PHP站点至新服务器。创建一台Windows Server 2008虚拟机,并在其上停掉net stop http服务(避免争抢80端口),安装配置 Apache + PHP,迁移站点至新服务器,站点正常打开,Apache + PHP运行正常,连接MySql Server正常,一切都美好,本想着半小时完成的工作,紧接着噩梦开始了。该站点使用单点登录,登录过程包含JavaScript异步操作,包含SOAP调用Web Service。登录却直接跳回了登录页面,没有任何错误提示,考虑了以下可能:1、是账户异常?在其他系统测试,账户状态正常。2、是JavaScript异步操作失败?用IE开发人员工具跟踪Javascript返回值,返回值正常。3、是Web Service调用失败?用Fiddler跟踪Web Service的返回值,表明已经验证成功,已经完成本地登录。反复跟踪调试,才开始怀疑该站点SESSION丢失了:1、JavaScript异步操作设置SESSION失败,难道是因为同步访问和异步访问的SESSION ID是不同造成的?这在Flash中进行异步调用才出现过,JavaScript也会吗?输出同步访问和异步访问的SESSION ID值是一样的。2、建2个PHP测试页面,在一个页面中设置SESSION,在另一个页面中却读不到。检查php.ini相关设置,看起来是正常的,查看session.save_path = "C:/php/tmp"路径,却果真没有SESSION相关的文件,设置连tmp目录都没有。结局令人啼笑皆非,没有tmp目录,PHP无法写入SESSION文件,自然SESSION就丢失了。为什么没有tmp目录,因为安装包里没有……我的3小时。以上所述就是本文的全部内容了,希望能够对大家学习php有所帮助。

创建者模式:在创建者模式中,客户端不再负责对象的创建与组装,而是把这个对象创建的责任交给其具体的创建者类,把组装的责任交给组装类,客户端支付对对象的调用,从而明确了各个类的职责。应用场景:创建非常复杂,分步骤组装起来。复制代码 代码如下:<?php/** * 创建者模式 *///购物车class ShoppingCart {       //选中的商品    private $_goods = array();    //使用的优惠券    private $_tickets = array();       public function addGoods($goods) {              $this->_goods[] = $goods;       }    public function addTicket($ticket) {           $this->_tickets[] = $ticket;    }    public function printInfo() {           printf("goods:%s, tickets:%sn", implode(',', $this->_goods), implode(',', $this->_tickets));    }}//假如我们要还原购物车的东西,比如用户关闭浏览器后再打开时会根据cookie还原$data = array(       'goods' => array('衣服', '鞋子'),       'tickets' => array('减10'),);//如果不使用创建者模式,则需要业务类里一步步还原购物车// $cart = new ShoppingCart();// foreach ($data['goods'] as $goods) {//   $cart->addGoods($goods);// }// foreach ($data['tickets'] as $ticket) {//   $cart->addTicket($ticket);// }// $cart->printInfo();// exit;//我们提供创建者类来封装购物车的数据组装class CardBuilder {       private $_card;       function __construct($card) {              $this->_card = $card;       }       function build($data) {              foreach ($data['goods'] as $goods) {                     $this->_card->addGoods($goods);              }              foreach ($data['tickets'] as $ticket) {                     $this->_card->addTicket($ticket);              }       }       function getCrad() {              return $this->_card;       }}$cart = new ShoppingCart();$builder = new CardBuilder($cart);$builder->build($data);echo "after builder:n";$cart->printInfo();?>可以看出,使用创建者模式对内部数据复杂的对象封装数据组装过程后,对外接口就会非常简单和规范,增加修改新数据项也不会对外部造成任何影响。

今天使用代码进行PHP生成校验码功能的实现,发现firefox一直提示“图像.......因其本身有错无法显示”的问题,作者也提示了说“如果浏览器显示“图像XXX因其本身有错无法显示”,可尽量去掉文中空格”,但把代码中所有空格都去掉了还是不能显示检验图片。于是深度google,大部分的解决方案也是将“<?”这句代码前的空格回车一切都删掉以防止有html输出,但这根本解决不了我的问题,后来看到有人在Header("Content-type: image/PNG");这句代码前使用ob_clean()清除输出,结果一试之下果然成功。现将原代码修改后贴到下面,以备不时之需:确认码生成文件checkNum_session.php复制代码 代码如下:Header("Content-type: image/png");/** 初始化*/$border = 1; //是否要边框 1要:0不要$how = 4; //验证码位数$w = $how*15; //图片宽度$h = 20; //图片高度$fontsize = 6; //字体大小$alpha = "abcdefghijkmnopqrstuvwxyz"; //验证码内容1:字母$number = "023456789"; //验证码内容2:数字$randcode = ""; //验证码字符串初始化srand((double)microtime()*1000000); //初始化随机数种子$im = ImageCreate($w, $h); //创建验证图片/** 绘制基本框架*/$bgcolor = ImageColorAllocate($im, 255, 255, 255); //设置背景颜色ImageFill($im, 0, 0, $bgcolor); //填充背景色if($border){    $black = ImageColorAllocate($im, 0, 0, 0); //设置边框颜色    ImageRectangle($im, 0, 0, $w-1, $h-1, $black);//绘制边框}/** 逐位产生随机字符*/for($i=0; $i<$how; $i++){       $alpha_or_number = mt_rand(0, 1); //字母还是数字    $str = $alpha_or_number ? $alpha : $number;    $which = mt_rand(0, strlen($str)-1); //取哪个字符    $code = substr($str, $which, 1); //取字符    $j = !$i ? 4 : $j+15; //绘字符位置    $color3 = ImageColorAllocate($im, mt_rand(0,100), mt_rand(0,100), mt_rand(0,100)); //字符随即颜色    ImageChar($im, $fontsize, $j, 3, $code, $color3); //绘字符    $randcode .= $code; //逐位加入验证码字符串}//把验证码字符串写入sessionsession_start();$_SESSION['authnum_session'] = $randcode;/** 添加干扰*/for($i=0; $i<1; $i++)//绘背景干扰线{       $color1 = ImageColorAllocate($im, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255)); //干扰线颜色    ImageArc($im, mt_rand(-5,$w), mt_rand(-5,$h), mt_rand(20,300), mt_rand(20,200), 55, 44, $color1); //干扰线}   for($i=0; $i<$how*40; $i++)//绘背景干扰点{       $color2 = ImageColorAllocate($im, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255)); //干扰点颜色     ImageSetPixel($im, mt_rand(0,$w), mt_rand(0,$h), $color2); //干扰点}//关键代码,防止出现'图像因其本身有错无法显示'的问题ob_clean();/*绘图结束*/Imagegif($im);ImageDestroy($im);/*绘图结束*/确认码调用文件sessionValidate.php复制代码 代码如下:<span style="font-size:14px;"><?phpsession_start();//在页首先要开启session,//error_reporting(2047);session_destroy();//将session去掉,以每次都能取新的session值;//用seesion 效果不错,也很方便?><html><head><title>session 图片验证实例</title></head> <body> 此例为session验证实例<form action="" method="post">验证码:<input type="text" name="validate" value="" size=10> <img src="checkNum_session.php"><br><input type="submit"></form><?php//打印上一个session;echo "上一个session:<b>".$_SESSION["authnum_session"]."</b><br>";$validate="";if(isset($_POST["validate"])){$validate=$_POST["validate"];echo "您刚才输入的是:".$_POST["validate"]."<br>状态:";if($validate!=$_SESSION["authnum_session"]){//判断session值与用户输入的验证码是否一致;echo "<font color=red>输入有误</font>"; }else{echo "<font color=green>通过验证</font>"; }} /*//打印全部session;PrintArr($_SESSION);function PrintArr($aArray){echo '<xmp>';print_r($aArray);echo '</xmp>';}*/?

本文实例为大家分享php在线通信录编写代码,供大家参考,具体内容如下<?phpsession_start();define("N", TRUE);if(empty($_SESSION["uid"])) { header("Location: ./login.html");}?><!doctype html><html><head><title>添加</title><meta http-equiv="content-type" content="text/html;charset=utf-8"><link rel="stylesheet" href="css/index.css" /><script type="text/javascript" src="js/calendar.js"></script></head><body><?php require_once "header.php";?><div id = "add"><h2 class = "title">添加信息</h2><form method = "post" action = "add_do.php"><table cellpadding = "0" cellspacing = "0"> <tr> <td>姓名:</td> <td><input type = "text" name = "username" /></td> </tr> <tr> <td>性别:</td> <td> 男<input type = "radio" name = "usersex" value = "1" checked = "checked" /> 女<input type = "radio" name = "usersex" value = "0" /> </td> </tr> <tr> <td>生日:</td> <td><input type = "text" onclick="new Calendar().show(this);" name = "userbirth" /></td> </tr> <tr> <td>电话:</td> <td><input type = "text" name = "usertel"></td> </tr> <tr> <td>地址:</td> <td><input type = "text" name = "useraddr"></td> </tr> <tr> <td colspan = "2" style = "text-align:center;"> <input type = "submit" name = "sub" value = "提 交" /> </td> </tr></table></form></div> <?php require_once "footer.php";?></body></html>源码下载:在线通讯录以上就是本文的全部内容,希望对大家学习php程序设计有所帮助。

本文实例讲述了PHP生成条形图的方法。分享给大家供大家参考。具体实现方法如下:复制代码 代码如下:<?php   // create an array of values for the chart. These values    // could come from anywhere, POST, GET, database etc.    $values = array(23,32,35,57,12,3,36,54,32,15,43,24,30);    // now we get the number of values in the array. this will    // tell us how many columns to plot      $columns  = count($values);    // set the height and width of the graph image      $width = 300;      $height = 200;    // Set the amount of space between each column      $padding = 5;    // Get the width of 1 column      $column_width = $width / $columns ;    // set the graph color variables      $im        = imagecreate($width,$height);      $gray      = imagecolorallocate ($im,0xcc,0xcc,0xcc);      $gray_lite = imagecolorallocate ($im,0xee,0xee,0xee);      $gray_dark = imagecolorallocate ($im,0x7f,0x7f,0x7f);      $white     = imagecolorallocate ($im,0xff,0xff,0xff);    // set the background color of the graph      imagefilledrectangle($im,0,0,$width,$height,$white);     // Calculate the maximum value we are going to plot    $max_value = max($values);    // loop over the array of columns      for($i=0;$i<$columns;$i++)          {     // set the column hieght for each value          $column_height = ($height / 100) * (( $values[$i] / $max_value)  *100);      // now the coords         $x1 = $i*$column_width;          $y1 = $height-$column_height;          $x2 = (($i+1)*$column_width)-$padding;          $y2 = $height;          // write the columns over the background          imagefilledrectangle($im,$x1,$y1,$x2,$y2,$gray);          // This gives the columns a little 3d effect          imageline($im,$x1,$y1,$x1,$y2,$gray_lite);          imageline($im,$x1,$y2,$x2,$y2,$gray_lite);          imageline($im,$x2,$y1,$x2,$y2,$gray_dark);          }     // set the correct png headers     header ("Content-type: image/png");    // spit the image out the other end    imagepng($im);  ?>运行效果如下图所示:希望本文所述对大家的PHP程序设计有所帮助。

分类:腾博会官方网

时间:2016-06-14 09:28:01