关于$this? CI session 写入问题
1.在libraries中有个验证码类verify 里面的一个方法 public function code(){return $this->vCode}//返回验证码在控制器common中 输出验证码:
function verify() {
$this->load->library("Verify");//加载验证码类
$verify = new Verify();//创建对象
$verify->setCheckImageWH("60","20");//设置生成的验证码图片大小,145为宽度,20为高度
$verify->outCheckImage();//输出图片
$this->session->set_userdata('code',$verify->code());//问题:$verify->code()为空
}
现在我只能在verify类中 输出图片的时候 写入session
请问这个原因是?
2.在APMs环境下,数据库带数字 如ci8cms 无法指定数据库。。。。但cicms又可以,请问跟ci有关系吗?
3.在CI中,总觉得类名和文件名的统一性很模糊,控制控制器加前缀时, 文件名又不需带前缀? Verify 不是 CI 自带的。CI 没有 Verify 这个类库。 回复 2# Hex
Verify是自定义类 放在library verify 类库有问题吧。贴一下代码。 回复 4# Hex
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
/**
* 驗證碼生成
*author:haile
*/
class Verify {
//验证码位数
private $vCheckCodeNum = 4;
//产生的验证码
private $vCheckCode = '';
//验证码的图片
private $vCheckImage = '';
//干扰像素
private $vDisturbColor = '';
//验证码的图片宽度
private $vCheckImageWidth = '80';
//验证码的图片宽度
private $vCheckImageHeight = '20';
/**
*
* @brief 产生验证码
*
*/
private function createCheckCode() {
$this->vCheckCode = strtolower(substr(md5(rand()),0,$this->vCheckCodeNum));
return $this->vCheckCode;
}
/**
*
* @brief 产生验证码图片
*
*/
private function createVerifyImage() {
$this->vCheckImage = @imagecreate ($this->vCheckImageWidth,$this->vCheckImageHeight);
imagecolorallocate ($this->vCheckImage, 255, 255, 255);
return $this->vCheckImage;
}
/**
*
* @brief 设置图片的干扰像素
*
*/
private function setDisturbColor() {
for ($i=0;$i<=128;$i++) {
$this->vDisturbColor = imagecolorallocate ($this->vCheckImage,255, 255, 255);
imagesetpixel($this->vCheckImage,rand(2,128),rand(2,38),$this->vDisturbColor);
}
}
/**
*
* @brief 设置验证码图片的大小
*
* @param $width 宽
*
* @param $height 高
*
*/
public function setCheckImageWH($width,$height) {
if($width==''||$height=='')return false;
$this->vCheckImageWidth = $width;
$this->vCheckImageHeight = $height;
return true;
}
/**
*
* @brief 在验证码图片上逐个画上验证码
*
*/
private function writeCheckCodeToImage() {
for ($i=0;$i<$this->vCheckCodeNum;$i++) {
$bg_color = imagecolorallocate ($this->vCheckImage, rand(0,255), rand(0,128), rand(0,255));
$x = floor($this->vCheckImageWidth/$this->vCheckCodeNum)*$i+3;
$y = rand(0,$this->vCheckImageHeight-15);
imagechar ($this->vCheckImage, 5, $x, $y, $this->vCheckCode[$i], $bg_color);
}
}
/**
*
* @brief 输出验证码图片
*
*/
public function outCheckImage() {
$this ->createCheckCode();
$this ->createVerifyImage();
$this ->setDisturbColor();
$this ->writeCheckCodeToImage();
$this ->writeCheckCodeToSession();
header('Content-Type:image/jpeg');
imagejpeg($this->vCheckImage);
}
public function writeCheckCodeToSession()
{
$ci =& get_instance();
$ci->session->set_userdata('verifycode',$this->vCheckCode);//本想在控制器才写入session 但返回不了code 只好在这里 在输出图片之前写入session
}
public function code()
{
return $this->vCheckCode;//这个原是想 在控制器应用到session的 但没有效果控制器里面得到是null,我只好增加 function writeCheckCodeToSession 在这个类里面
}
}
?>
页:
[1]