码迷,mamicode.com
首页 > Web开发 > 详细

php long time(1)

时间:2015-11-12 21:58:21      阅读:291      评论:0      收藏:0      [点我收藏+]

标签:

好久好久没有发表新的文章了,主要是懒得在这里写,都记在记事本上,所得都是自己理解的情况下写的,如今借此闲暇记录下来,;;;;

 

 

****************PHP************************************************************************************************
********************包含了php的基础知识点的自我理解*****还有自我mysql数据库的强化**********************************
实际上从10月19号就开始了
……………………………………………………partOne…………………………
#######环境(2015.10.20)
*代码写于<?php ?> 中,就像js写在<script></script>中一样 echo打印在页面上
*在php中字符串的链接用.号,用于其他语言当中的+;php中变量$来规定,像js一样轻量,只用$
即使在使用 变量的时候,也要带着$;
*php集成开发环境 WAMPserve开发包,w:window a:apache m:mysql p:php www.wampserve.com
*php的代码实际上是和服务分开的,集成环境的默认的服务器是在安装目录的www文件下,但是可以改,
在apache的目录内找到httpd.conf文件可以改服务器路径。找到DocumentRoot的路径改变成一个文件夹下,
同时,找到directory,路径也是改在同一个文件夹下,然后就可以localhost:what.php(无需输入那个路径了,那个路径就是主目录了)。
*要改变php的wamp的主目录的快捷路径,在wamp安装目录下找到wampmanager.ini和wampmanager.tpl在其中找到Menu.Left项下修改相关名字和
路径即可,默认是www
*注意,文件路径格式必须写规范:E:/modle/fuck/
***************这下面的多站点管理功能失败了,为了不影响进度,以后用到又弄,*****
*能够用wamp进行多站点的管理,能在上面运行多个网站:::步骤如下:些许复杂,慢慢称述如此:
(格式如此:<VirtualHost *:80>
ServerAdmin 3223572855@qq.com
DocumentRoot "E:/sherlock/Sherlock"
ServerName sherlock.com
ErrorLog "logs/dummy-host2.example.com-error.log"
CustomLog "logs/dummy-host2.example.com-access.log" common
</VirtualHost>)
step1:现在apache的conf文件中找到httpd-vhosts.conf文件,进行主机相关配置(复制下来填写)
step2:打开apache主要配置httpd.conf,允许将conf/extra/httpd.conf的注释(#)去掉,就可以使上个文件生效
step3;找到allow override all 下面,写地址访问权限是 allow from all/127.0.0.1之类
step4:在相应已经规定好的项目目录下创建相应名字的站点。
step5:在C:中的windows中system32的driver下的ETC下,打开host文件,添加域名给对应的 ip如:
127.0.0.1 Sherlock.com 遇到Sherlock.com时候优先到127.0.0.1下请求资源
老子成功啦!!!
***************所以下面也变成了不确定的东西*****************!
*出现You don‘t have permission to access的解决,打开httpd.php,将
<Directory />
AllowOverride none
Require all denied
</Directory>,
将Require all denied改成Allow from all即可,还有 onlineoffline tag - don‘t remove
Allow from all处也要相应改变
/*******************************/
*apache的默认端口号码是80;如果要修改,则打开httpd.conf文件,找到listen 80 将80修改如:8080;然后再找到
servername 80 将此处之80再写成8080 保存可以。(新版本的80很多,全部都改成8080 亲测)
#######语法(2015.10.21)
*var_dump($变量)可以将变量的类型打印出来。$var,用时候不可var单独搞,$var都是变量
*变量的命名和java一样,在$后,不以数字开头,不可空格,特殊符号,区分大小写;
*可通过方法得到变量使用的内存:$var = memory_get_usage();echo $var;可得到$var所占有内存;
*false和true,echo输出时候,true为1,false为什么都不输出;
*对于int型,十进制正常如:$ten = 12;$eight=0123(前面加0);$sixteen = 0x23(前面加0x);
*科学计数法:1.23e3 =1.23*10^3
*引号的用法:单中有双,双中有单。。或者$modle=‘she said:\‘i am a hore\‘‘(单双同理);实际上也就是:在父亲引号的里边,要用引号,就在之前加个\
*还有一种字符串的命名方法GOd命名法:$string = <<<GOD
夜空中最亮的星星,现在我在敲这里的时候,隔壁租房邻居姑娘在洗衣服,唱着夜空中最亮的星
GOD;以<<<GOD ....和GOD(此个的缩进和变量一致)结束;
*一种特殊的类型:资源,不需要时候应该释放,如:打开文件:$file_open = fopen(‘psth‘,‘r‘);连接数据库:#con = mysql_connect(‘localhost‘,‘root‘,‘root‘);
打开图像$img=imagecreate(100,100)
*php 的null的情况:1,被写成null,2,没有赋值,3,用了方法unset():如unset($hello);
*php 常量的设定:define(‘modle‘,‘the hero‘,false[默认是false,此常量不能大小写通吃])
*php中的一些系统常量:__FILE__;(两条下划线。此文件路劲) 。__LINE__;(此语句在第几行)。PHP_VERSION;(此php版本);PHP_OS;(所在操作系统)
*php中常量的引用方法,1,直接用,2,constant(‘常量‘),人言更加灵活,我却没有体会到。
*判断一个常量是否被定义的方法:defined(‘常量名‘)【是当字符串一样放进去】;
*可以将几个变量都指向一个地址用&,这个地址里面的值都是这几个变量的值 如:$a=‘hello‘;$b=&$a; $c=&$b;echo的话都是hello;
*php中一些陌生的运算符:==等于 ===全等 !=不等 <>不等 !==不全等于。!=值同类型不同可以 !==值同类型同才行
*三元运算符:$a = $b>60?‘及格‘:‘不及格‘;
*如果不确定的错误会出现,那么在表达式之前加个@,不会将错误报给用户,忽略掉,不过在使用前要在代码的前面加个 ini_set(‘track_errors‘, 1);才看的处于不同。
*php中时间的设置:$now = date(‘Y-m-d h:i:s‘);echo $now;输出2015-12-21 11:47:38; time()函数现实的是时间的格式
*php中取得随机数:$luck = rand(1,9);取得1到9的;
*在数组当中:数组规定:$ha=array(‘key‘=>‘value‘);=>所以这个的意思就是key对应value;遍历foreach($ha as $show){}或者foreach($ha as $key=>$show);
*zend.studio的使用各种outline(在Navigate的show in中)功能窗口是好得,各种方法都显示了。problem中查看错误信息;
*php断点功能;在debug时候,先大断点然后在debug as,在一步一步执行时候,f5,单步试调,进入函数内部(在执行遇到函数时候使用);
f7跳出函数(在函数内部时候使用 );f6单步失调,不进入函数。可以debug来查看各个变量在某个步骤是否work?就像js的alert();
*emmet是html的快捷输入的插件,寡人复制一个网址:于help的install new soft来输入这个链接来安装:http://emmet.io/eclipse/updates/site.xml,之后重新启动,之后检测

…………………………………………Part Two…2015.12.21………………………………………
*数组:(以下两种数组的命名都是根据键位来命名的)
1、索引数组:数组的键是整数,而且顺序是从零开始的。(而且php的数组命名有点怪:$ hello = array(‘‘,‘‘,‘‘));
print_r($array);是输出数组及其键的。索引数组的三种赋值方式(array(‘0‘=>‘apple‘)),这种方式就等于另外一种(array(‘apple‘)键直接是0,1,2.。。);
($array[0]=‘apple‘);取数组的值也是一样的,$arr[key];
2、关联数组:数组的键是字符串的形式。关联数组的赋值:$arr[‘apple‘];或者:$arr = array(‘a‘=>‘apple‘,‘b‘=>‘banana‘);如:$arr[‘apple‘]=‘苹果‘;
*函数:大部分思想和java js一样
*可变函数:调用这个函数可以通过他的名字来调用。如:function name(){};$replace=‘name‘;(这里就将函数给了$replace),之后,$replace(),调用之。
*可变函数在类上的使用:class you{function name(){}},$modle=‘name‘;$u = new you();$u->$modle();(注意此处->和=>的不同)
*php的内置函数:有许多许多,如外部拓展的mysql函数,email函数等,此写一个:str_replace(),书写如下:
$str=‘I love zhongyaji‘;$str=str_replace(‘zhongyaji‘,‘zhaonan‘,$str);echo $str输出i love zhaonan;
*一些内置的方法;function/file/class/method_exists(‘‘) 可以判断是否存在方法或者函数。。。。输出Boolean
*定义的一个类,1类中的属性。例子class car{$a=‘a‘;protected $b=‘b‘;private $c=‘c‘}实例化:$ok = new $Car = new car();echo $Car->a;可访问之public属相的,
protected和private不可以外部访问,默认是public型,注意访问的方式。$Car->a(注意:实例化后这里没哟$了);static属性用::调用,$this指向自己
2,类中的方法,实际上在面向对象的过程中,函数叫做方法。function的权限也是public private protected;方法的使用和属性一样,静态的方法的使用,
也和属性一样,可以直接使用,直接echo Car::show();
*(类和属性不用加$来命名)
*多年的构造函数总是理清楚了:
php5当中有:
1,__construct()类的构造函数,在类的对象被构造时候执行的函数,如此:
function __construct(){your way},子类的构造函数不会调用父类的,若要使用,则使用parent::__construct()...
但是发现构造函数的定义方法还可以和类名相同。在实例化时候给类的参数就是构造函数的参数
2,__destruct(),有构造就有购销函数,当一个类的对象引用不在时候执行的。

**在php中的类中的属性要加访问控制符,方法不一定需要。
*在php中的私有的变量和受保护的变量不能够直接被访问,但是可以在自身类的内部暴露给外向者(public),让其执行其心愿;
*继承,就像汽车是一个泛的类,宝马啊,奔驰啊,就是继承这个类的。子类就有了父类的方法,而且自己可以新写方法,以实现代码的复用。继承父类来的子类当中,用关键字:parent::method();
来调用父类当中的方法;然后$var->是调用继承当中的子类的方法。
*重载:在继承当中,父类的方法子类不适用了, 子类可以重写父类的!同名!方法,重写的方法的开发性(访问控制)要大于等于父类,php当中构造函数可以被继承,
但是当子类被实例化时候,只有自己的构造函数会被调用。
*引用静态的属性时候,是car::$name,实例化之后是$c->name;不加$了,饮用方法时候一样。
*聪厚之言:php框架:IC 及其www.github/suconghou.com 好老师啊
................more use ...2015.10.22.............................
*php的字符串的一个,echo strpos(‘hello fuck‘,‘fuck‘);可以查看这个串种是否有fuck
*php的数组的排序方法:如:$me=(‘love‘,‘hate‘,‘tall‘);sort($me);//升序;rsort($me);//降序同理,asort/arsort(按值升降 ).ksort/krsort(按key升降)
*trim(‘word‘);去除两边的空格,rtrim(‘‘);去右边空格,ltrim()去左边空格
*获取字符串长度1,中文 mb_strlen(‘string‘,‘utf-8‘);英文strlen(‘it‘);
*取得某个位置的数:如:英文:substr($string,startplace,how many);如$u=‘i love you‘;echo substr($u,2,4);得到love
这描述的意思是:$u这个字符的第二个位置开始(从零开始算),向后数4个。中文也差不多 ,mb_substr($u,2,4,‘utf-8‘);
*查找字符串里面是否有某个数,在从零开始的那个位置,如:$str=‘show‘;echo strpos($str,‘o‘);输出2;
*字符串的替换,$s=‘huang is a sb‘;echo str_replace(‘a‘,‘big‘,$s);
*将数组转化为字符串,implode();$i=array(‘a‘,‘b‘,‘n‘);echo empolde(‘_‘,$i);其中,连接符是_
*将字符串华为数组,explode();如:$i=a b c;echo expolde(‘ ‘,$i);其中‘ ‘是转化符,遇到空格就拆开。
**********************more use 2015.10.23****************
*全局变量有点疑惑。???全局变量实际上是个数组,存储着变量的数组,数组,数组,数组,数组!:如$_GLOBAL[‘z‘];$_COOKIE[‘it‘];
*Cookie实际上也不难,让老子一点一点剖析:
1,通过Http headers返回给客户端,通常存储会话session的ID来辨别用户,其有时间限制,时间到自己删除。
2,设置的格式:setcookie(‘cookieOne‘,‘modle‘,time()+1800,‘path‘,‘www.modle.com‘);前三个参数必须,是cookie的key,cookie的value,和有效时间(
默认是0,即当网页关闭时候就失效),之后是路径,即(cookie)有效的路径,若是‘/‘,则整个网站有效,若是/path,则只在/path下和/path/son之类有效;
最后一个参数是有效的域名,如:modle.com,实际意思是在modle.cxom的子域名下有效,诸如:email.modle.com;在调用cookie时候,则:$_COOKIE[‘cookieOne‘];因为是从请求头中send过来的,所以
说,是可以用header来设置的。header(‘Set-Cookie:cookie_name=""‘);这个设置方法实际讲的不是详细;
3.删除cookie,可以:用setcookie(‘delete‘,‘‘,time()-1);直接将有效时间设置为负的值就可以。亦可以通过消息头来搞定header();...不是很详细讲述的

cookie传送要占用带宽,容易被盗用,然后还只能存储4k大小;Session会话是存在服务端,无大小限制,session id 默认情况存储于cookie中。

*Session:启用session时,用 session_start()开始,然后,就可以用$_SESSION[],进行读写session_id();可查其id(规定了一个session后自动生成的);session在
服务器中的存在形式是文件,当一个页面打开了session,然后会使得其他并发访问的用户无法访问而等待,可以用缓存或者数据库来解决此。。。未完待续
session的销魂:立刻销毁用:unset($_SESSION[‘nani‘]);若要全部而且下次访问时候才销毁,用session_destroy();
有时候如在用户退出的时候,存在cookie中的session用setcookie()来销毁所存储的id,
*关于个东西:数组可以序列化(serialize)成字符串,转化成类似于数组样子的字符串,之后可用于加密,然后,也可以反序列化回来(unserialize);回原来格式。
*字符串加密,方法 base64_encode($string) 是加密,base64_decode($string)是解密。
*文件操作:感觉用的少,日后在弥补。
*时间和日期:
*unix时间戳,实际上就是名字虚浮,内容简单,简言之,就是1970年到现在的描述等于方法:time();所以可以理解了time()+3600为什么是一小时后了。
*实际上,date()有有参数,如:echo (‘Y-m-d h:i:s‘,time());收个字符串参数规定的是输出时间的格式,第二个参数是时间戳的秒数,可以来用我规定的
格式来输出时间。
*用strtotime()可以做到将输入的一个时间格式换成多少多少秒。。。如:strtotime(‘2015-10-10‘); 21341234123s,最特殊的是,它可以接受字符的参数,
如:strtotime(‘+ 5 seconds‘)现在时间加上5s的时间戳;
*异常的处理: 纸上谈兵得来的:try{}catch(){},就是说,throw 也是,也要对应至少一个catch;它的作用是:若是异常的部分不被处理,则就会使得程序被迫停止,
若是处理了,则会可以等待用户指令??
*public:没有什么限制。。pravate:仅仅在自己这个类中可以用。。protected:可以自己类和自己的子类中可以用。
*self 和 $this 和 parent、及其::什么时候使用的区分:看了这么多得到
$this 是指向对象本身,可以用它的属性,除了静态的属性;
self是指向 类 本身,只可以在类中使用,引用类的静态属性或者方法;
parent只在 类 中用,发生在继承时候,引用父类的静态方法方法。
$this是变量,而self啊 parent啊 是常量
**php和mysql
*mysql的php扩展实际上是个函数,所以检查扩展是否存在看用function_exists(mysql_connect);
*php的数据库连接有很多拓展(也就是写好的框架方法),方法大概相同
*首先,php都到了7版本,所以所学不是最新,但是了解也是必要的。先学完。之后再新之。
*补充:给mysql的root用户设置初始密码 :set password for root@localhost = password(‘happiness‘);
*在之前的版本当中,数据库在操作前的php代码:mysql_query(‘set names "utf8"‘);之后再mysql_query(各种语句);在这里的query不是查询,是执行的意思。
*虽然说php会自动的关闭数据库连接在执行完,但是要高性能,必须自己关 mysql_close($con);这里的$con = mysql_connect(‘localhost‘,‘root‘,‘fsdfas‘);
********************************2015.10.24**************************************************
*文件操作函数: file_put_contents(‘文件名‘,‘写入值‘);写入文件——覆盖原有数据写入 file_get_contents();文件读出函数
*$_SERVER[‘REMOTE_ADDR‘];获取到机器ip;
*全局变量啊 $_POST【‘username‘】获取的是提交过来的name为username的信息$_GET[]以此类推
*若要使得没有乱码,则需要html的部分用<meta charset=‘utf-8‘> 然后php部分用 header("Content-Type: text/html; charset=utf-8");
*ltrim rtrim($what,‘@‘)出去左边或者右边的空格或者是规定字符
*url传参数若此:他们教的老几把错的,我自己拼接的如此:echo ‘<td><a href=‘.‘"‘.‘delete.php?id=‘.$index.‘"‘.‘>删除</a>‘;
*实际上,主要的就是把文件当成一个数据库,然后,取出数据来的时候进行整理,存入的时候也进行整理。
***********************2015.10.25*****算是做了个php的小项目了,明日继续做几个,然后开始框架***********
*mktime();使用如此:*mktime(0,0,0,12,23,2001);将这种形式转换成时间戳;date()作用很多啊,如:date(‘Y-m-d‘,time());date(‘Y-m-d‘,mktime(0,0,0,12,30,2015))
若是date的参数换成(‘t‘) 或者(‘w‘)得到的是本页几天或者本月第一天周几
*判断变量是否声明或者是否被赋值了用isset(variable);若是没有,则返回的是false,否则true;
*再做一个输出日历的时候,了解到了一个编程的思想:是什么呢?就是:
1,将功能的形容词去掉,比如 我要实现由什么什么什么的一个数字输入,那我就先输出数字;
2,在这个基础上一点一点的添加功能。一点一点的修饰以条件即可。
*页面可以自己提交给自己url参数的;
*在表单提交过程当中:$_SERVER[‘PHP_SELF‘],是指向脚本执行本身文件,就是指向这个自己了,表单提交里面常用:
<form method =‘post‘ action = ‘<?php echo htmlspecialchars("$_SERVER[‘PHP_SELF‘]")?>‘><\form>里面的指向自身页面,然后htmlspecialchars为了防止xxs
攻击,来进行转码。
*你看看 都出现了三次了 $_SERVER[‘PHP_SELF‘]脚本本身文件名 $_SERVER[‘REQUIRE_METHOD‘]得到提交的方式是什么$_SERVER[‘REOMOTE_ADDR‘]得到ip
*empty()顾名思义,判断是否定义或者空,空则返回true;
*在之后的版本当中。mysql_connect()这个扩展要被丢弃,要换其他的,叫做:mysqli扩展或者PDO扩展,日后要看看这个东西。


*#*#*#*#*#*#*#*#*#**#*#*#*#*#**#*#*php new words*#*#*#*#*#*#*#*#*#*#*#*#**#*#
*看了php手册之后,发现mysqli才是极力推荐而且也是用的最多的。
*所以接下来都讲mysqli
*为了避免操作数据库时候出现乱码,用$mysqli->query(‘SET NAMES utf8‘);
*mysql 在编程当中有种方法,叫做预处理,其中在需要执行多条参数的时候,不用重复写sql语句,直接写值就行了。还比较安全
*mysql数据库要存储中文,以前我是迷惑了半天了,最么在命令行设置都不对,然后,最终发现在mysql的可视化工具sqlYOG建表时候直接可以规定,那么的简单。
*php基础的数据库的操作:

##**FIRST:增:
$mysqli = new mysqli(‘localhost‘,‘root‘,‘password‘,‘databaseName‘);//是新建个mysqli对象给$mysqli,之后链接对象就用$mysqli
mysqli_query($mysqli,‘SET NAMES utf8‘);//设置这个解决的是查询时候出现乱码的问题 是utf8 而不是utf-8
if(mysqli_connect_errno()){ echo ‘连接错误信息‘.mysqli_connect_error;}//检测连接成功,不成功输出错误信息。
$statement = $mysql->prepare("insert into tablename values(?,?)");//预处理功能,问是等待着之后的量来代替,避免重复写sql;
$statement = $mysql->bind_param(‘ss‘,$username,$password);//第一个参数ss是指上面两个文浩分别的类型,后面两个参数是指后面两个问号的值。
$statement->execute();//执行预处理中语句
echo $statement->affected_rows;输出插入了几行
mysql_close($mysqli);//关闭数据库

##**SECOND:查:
$mysqli = new mysqli(‘localhost‘,‘root‘,‘password‘,‘databaseName‘);
mysqli_query($mysqli,‘SET NAMES utf8‘);
if(mysqli_connect_errno){echo mysqli_connect_error}
$statement = $mysqli->prepare(select * from tableName);
$statement->execute();//还记得吗?查询和其他都有所不同,限制性查询。
$statement->bind_result($showONe,$showTwo);//将查询出来的结果绑定到这两个上
while($statement->fetch())//只要还有满足查询条件的
{
一条一条的进行操作。。
}
mysql_close($mysqli);
*php总传参数,在php标签中,则进行字符串拼接即可,若是在html中,则:<a href="index.php?id=<?php echo $id ?>">返回</a>
*php的重定向 Header("Location:$url");这里的url一定要写详细,他妈的从http:开始写到com结尾

*#*#*#**#*MVC*#*#*#*#**#*#
*mvc in php:可以实现开发分离,易于维护,各层分离,结构清晰,都用它:在需求变化时候,更改相对的层就行,互不干涉。
*include 和require实际和node的require差不多,是讲那些语句全部整过来,也想java 的import
include 的错误了会警告,require的引入会极度报错,在mvc当中,极度依赖引入,所以用require好。require_once();之引入一次;

*control控制器规范:入 testController.class.php test是控制器名字,Controller是表明只是控制器,class是类文件,php是拓展名,控制器就是包装类名和方法等。
调用模型,调用试图,讲模型返回的东西传给试图,是一个领导者,中间的调和者。
*model模型规范: testModel.class.php 同理,如上。
*view视图规范:testView.class.php 同理如上啊。
*然后最后还有个入口文件test.php来集大成,就像node的app,js
*让我汇总一下,control就是node当中的routes,讲两者集合,得到model数据和对view的操作,views就是node的views,model就是node当中models,test.php就是app.js
mvc流程:first,浏览者-》调用控制器,对其发指令,
second,控制器-》按指令选模型
third,模型-》按照指令选择数据
forth,控制器-》选取相应视图
fifth->显示出来。
*入口程序:如:index.php,单一入口,所有的网页都是index.php?......类似于node的app.js
*php——mvc的目录机构:
mvc(root)
libs(放类)
Controller(控制类)
Model(模型类)
View(视图类)
ORG(第三方类库)
config.php(配置文件)
index.php(入口文件)
*php的eval()方法能将在其中的字符串当代码执行,但是不安全。
*在mnv当中,可能会存在多个的控制器类,所以,用的时候避免不了复杂的实例化和文件得引入,所以,写一个函数
function C($name,$method){}来执行将controller引入和实例化并且执行方法的操作。打包此方法很方便;
类似的,视图和modle层都如此,很方便,只是他们function V/M($name){...},只有一个参数,因为如果要传方法的
话,他们方法可能有参数,就复杂了,就返回他们实例化对象就行了。
*in_array(‘某值‘,‘某数组‘);若是require了文件,就等于我这里有了所有被require的对象了
*为了避免有害的侵入,我们需要对所获得的$_GET[]参数进行过滤, 过滤器如下,避免用户传入有害的参数。
function filter($string)
{
return (!get_magic_quotes_gpc())?addslashes($string):$string;
}
*除此之外,我们还用数组来装着我们规定可以访问的controller和method,控制用户非法访问啊。

*#*#*php视图引擎,专门进行php view层的开发。类似于jade,也是视图引擎。。Smarty,作用是为了使得前后的代码分离,所以用视图引擎,,,
*官网:www.smarty.net smarty.class.php是主文件,可以调用其它功能,smartyBC.class.php是兼容旧版本,plugins是为了拓展。
*这个smarty用着是比较迷惑,不知道它到底是想要干什么。用时候,自己new一个php文件,然后引入smarty.class.php,然后,写5个配置,2个方法,之后,
就可以操作了,$smarty->assign(‘modle‘,‘wuruijie‘);定义变量的,$smarty->display(‘显示在哪个模板文件名‘);
smarty配置的文件名如下:
<?php
require(‘../smarty/Smarty.class.php‘);
header(‘Content-Type:text/html;charset=utf-8‘);
$smarty = new Smarty();

$smarty->left_delimiter = ‘{‘;//左界定符
$smarty->right_delimiter = ‘}‘;//右界定付
$smarty->template_dir = ‘tpl‘;//模板存放文件
$smarty->compile_dir = ‘template_c‘;//编译生成文件处
$smarty->cache_dir =‘cache‘;//缓存
//以下是缓存开启的两个配置,不过smarty缓存用得少
$smarty->caching = true;//开启缓存
$smarty->cache_lifetime = 120;//缓存时间
*smarty语法:(d都在模板文件中用)
*注释 {*hello*}
*数组{$arr[‘key1‘][‘key2‘]}
*smarty变量调节器
$smarty->assign($fuck,‘i love you‘);
*首字母大写:{$fuck|capitalize} =I Love You
*链接字符串:{$fuck|cat:‘world‘} = i love you world
$time = time();
*日期格式化:{$time|date_format:"%Y-%B%e %H:%M:%S"}
*对空的变量于初值:{$fuck|default:‘他是空的不可为空啊‘}
*转码调节器:{$hello|escape:‘url‘}url是参数,代表转码方式url,还可以是javascript,html;为了避免产生误会。
*全部大写全部小写调节器:{$hello|lower/upper}
*换行符换成html标签:{$space|nl2br}
*smarty条件修饰符:
*样式{if modle eq fuck}I will be strong {elseif $age gt 25}I fight!{elseif $m lt 30 & $m neq me}haah
eq是等于 gt大于 lt小于
**感觉smarty有毛线作用,到时候有用到的时候在看。
**PHP 与mysql Again
$mysqli = mysqli_connect(‘localhost‘,‘root‘,‘hello‘,‘test‘);

//更改操作的数据库,mysqli_select_db(‘库名‘);被坑了 没有那么多。。。
die();作用相当于echo() + exit();

*****CICICICI(CodeIngniter)***************************
*哈哈 ci不要要学习模板引擎哈哈。。。。
*通过入口文件对C的名字的指令和方法的使用来达到访问的目的;
*实际上就是model层处理数据,然后包含并且实例化到control层,之后,在view层操作显示,
然后在包含到control层当中,也就是:先接受用户参数,之后找属于哪个控制器,之后,控制器引用
对应的model,实例化之后,此时在view层中得到应用,之后,control层在引入view层,之后,在index中引入实例化并且返给入口文件,
是的,就是如此的。
**mvc中,入口文件是唯一一个让浏览器请求的文件。
*在他妈的形象点,就是所谓的index.php是曹操,controller是荀彧,荀彧有很多计谋,每个计谋要调动,views和modles是许褚和张辽和郭嘉和贾诩等等
*MVC Clear
1,入口文件:唯一一个给浏览器请求的脚本文件
2,controller
协调视图和模型
3,model
提供数据,保存数据
4,视图views
只负责渲染
5,动作action
是控制器中的方法,用于被请求的。
*******2015.10.28.php***************
*在写url传参数的时候,www.baidu.com?user=modle&action=manage,不加‘‘,不然传过去的参数就会带引号
*在control层当中进行require_once(‘directory‘)可以引用视图层;
*php代码也是从上到下执行的啊,我再控制层先得到了model的数据,然后再引入视图文件,然后再在view中用就可以了,,哈哈哈哈哈哈哈哈
*在很多时候往往会不能摒弃在java上的坏脾气,直接乱搞,注意在封装函数时候变量的写法。。。。。。
*现在跑通了mvc的流程了,需要学习框架了。。。哈哈 见文件 mvcAgain 总总做了第三次才ok
*将数据存入数组的方法是 $parent[ ] = $variable; 用遍历可以将$variable(可以是字符串,或者数组对象都行)的各个值(也许是数据库中得到的值放入$parent),
*CI(CodeIgniter)继续:
*CI是需要的是其目录下的:system,application,index.php,将其拷贝到站点目录即可。
*开发目录是application,系统文件夹是system,不可动,以后ci升级靠它
*ci的pathInfo方式访问网站:
入口文件:http://localhost/index.php/welcome/test welcome是控制器名称,test是控制器下的方法名(动作)。。。若是放在服务器
的跟目录上,则可以隐藏index.php这入口文件。
*mvc在application中,一个控制器,是一个大类 (功能,写博客),大类中许多方法(动作,页面,修改,添加),方法中就包含了许多require或者include来的modelclass或者是viewclass
*默认控制器是welcome,默认动作是index
**CI控制器(controller):
1,控制器文件名字要小写;一个单词搞定,不加什么controller和class,
2,类名直接是名字了,。。。那就都小写了。此处名字都与URL相关
3,所有控制器需要直接或者间接继承CI_controller类,(ci 提供的类全部以CI_作为前缀);
4,要被浏览器访问的动作(控制器)中的方法,只能是public类,类名也不能以下划线开头,除非被public合法名字的类所暴露。方法名可以不区分大小写。
5,总而言之啊,就是被url所用的controllername和functionname名字要被url认可。
*******2015.20.29
*CI视图(views):
****我发现,若是在控制器类中再次执行构造了方法,然后再来$this->load->view();就会报错,
原因是自己执行了构造方法,继承来的构造方法没有作用了,于是就错误了。所以,不要将方法取名和类名同。
*一个控制器有可能有很多的视图,于是乎,在view中对于每个功能,最好建立个文件夹来包含。
只是在$this->load->view(‘user/index‘) 写个路径而已。
*controller给视图层传送数据是:$this->load->vars(数据对象);有时候有多个变量如:$array $name $int,可以定义一个关联数组:$data[array] = array(‘‘,‘‘);$data[‘name‘]=‘name‘,$data[‘int‘]=1;
然后到了视图层,直接可以用$title就是其值
*数据到了试图层之后,渲染方法如此:
<?php foreach ($array as $item) :?>
<td><?=$item[‘id‘]?></td>
<td><?=$item[‘email‘]?></td>
<?php endforeach ;?>
因为数据库里面存着许多信息,而每条信息又有多个字段,所以,慢慢可以体会为什么若此
*php的代码的执行顺序也是从上到下的,对于视图的加载,可以$this->load-view(‘‘)多次,
而且在一个方法(页面里)加载的多个view是按照顺序拼接起来的啊,所以CI框架可以
像是node里面的layout一样,来进行视图的多次复用。
**view层的实现:经过实践后的坑点:
*$this->load->view(是数据不是view文件名);
*关联数组实际上就像是全局变量一样存放着传递的变量名;
*在取数据时候容易写错:
<?php foreach ($lover as $item):?> 有括号和引号
<td><?=$item[‘id‘]?></td> $item[‘helo‘] 有中括号,之中变量有引号
<td><?=$item[‘email‘]?></td>
<?php endforeach ;?>
*传言什么if啊 else啊也可以像上面的用法
******2015.10.30**
CI模型(model):
*模型文件名字要全小写,但是其中的类首字母大写(是由源文件控制的),为了和控制器(不加后缀)不冲突,在模型类后面加后缀如:user_model(文件名),如果不加的话,ci在记载发现相同的类名就会报错了 类名:User_model其继承类 CI_Model();
*CI模型中可以直接使用超级对象的属性(后续讲)。。。
*此处强调一哈,model文件名假若为:sherlock_model.php,类名为Sherlock_model,在控制层引用时候:$this->load->model(‘类名的名字,大写首字母的那个‘),这样以后,Sherlock_model就放在了全局对象里面(模型加载好自动成为超级对象的属性),;在controller调用其方法时候,就:$this->Sherlock_model->myway();
*controller层当中加载模型的方法$this->load->model(‘User_model‘,[second‘]);第二个参数是引进来后引用时候的名字。这种意思就是讲这个东西弄到超级变量里面;只要加载好直接成为超级对象属性
然后调用时候,就可以直接$this->User_model....
*$this->load->view(‘user/index‘,array(关联数组));
***###哎呀,忍不住说句,实际上命名没有那么复杂,就是控制器的文件名和类名一样都小写,模型的是文件名后面加个_model,都小写,然后类名首字母大写。
*在实际的操作中,除了关联的数据库,其他数据库,基本上一个表对应一个model
*CI超级对象:(CI的控制器对象。)--就是mvc中controller对象。就是controller中的$this
$this这个超级对象的属性:
$this->load装载器,装在视图啊,装载数据啊。。。
->
view()
vars()分配变量导视图
database()装载数据库对象(就是连接数据库)
model()装载模型
helper()加载帮助文件
**$this->uri
CI中传参数是pathInfo;
controller中得到参数:CI方法
$this->uri->segment(number);number是段数,就是从index.php后的第几段 以‘/‘为分割;
*传统的pathInfo方式
入口.php/控制器/动作/参数1/值1/参数2/值2
获取信息时候任然要知道key才行。
*CI中的
*法1:
入口.php/控制器(1)/动作(2)/值1(3)/值2(4)到底是第几段看我的括号标注
*法2:
获取到url中ci先进法穿的参数,可以再控制器相应的方法中当中
加入变量参数来接受参数的值,可以多个。在放参数的时候,若是不一定传参数,那么,可以像less中一样先给形参赋值。
*input属性(对视超级对象的属性)对input表单的获取类
$this->input->post(‘username‘);获取提交的username
等价于 $_POST[‘username‘];
所以 $this->input->server(‘PHP SELF‘);
等价于 $_SERVER[‘PHP_SELF‘];
哎哟 讲半天不就是不用框架时候的全局变量么 ?。。。。。只要是$this->....都是以前的全局变量演化来的,这么想就好了。之所以这么写,是因为,虽然效果是一样,但是CI框架将我们方法做了安全处理。更安全。
*超级对象真的非常超级,$this视图里面也可以用。
**IC在数据库中的使用:
*数据库的设置文件可以在application的config文件夹下的找到database.php,可以在里面进行配置,在使用ci的这个之前要对数据库进行设置才行。
*$this->load->database();是装载(连接)数据库了。只要装载成功,就可以存在超级变量 $this->db中了 db就是属性
*$this->db->query();查询返回(操作数据库了)的是一个对象。不是数组了
若是想要转换成数组,则需要$obj=$this->db->query(‘‘);$userObj = $obj->result();就转换成了一个由每条记录(多个girls)组成的数组;
*补充:在原生代码中,mysql_fetch_assoc()返回关联数组
mysql_fetch_object()返回对象
*注,上面是连接一个配置文件中已经写好的数据库,如要连接多个数据库,则需要
在配置文件中再复制一分那个$db[‘default‘]...一连串,然后,在
$this->load->database(‘ ‘)时候,参数写上代替defualt的位置即可。
*将数据传到视图层的另外种方法:$this->load->view(‘pagePath‘,$data);
*在页面上渲染数据时候,若是数组性,则需要$array[‘name‘] 若是对象,则可以
$array->name;
$obj=$this->db->query(‘‘);
$userObj = $obj->result();返回数组中的记录对象
$userObj = $obj->result_array();返回数组中的数组;
$userObj = $obj->row() 返回第一条对象
$userObj = $obj->row_array();反回第一条数组
*注:需要从controller传数据给view不能得到这个数据就直接传,而是要将数据放在一个关联数组中
才能穿过去,我都被坑了。
************2015.10.31******************
*增加删除修改的都是$this->db->query()返回的值是true或者false,而查的返回的对象。所以增删改时候可以进行成功或者是失败的判断。
*查看受影响的行数:$this->db->affeted_rows():
*mysql会给每个新增的记录一条id叫做自增id,可用$this->db->insert_id()查到;
*在数组库操作的过程中还面临安全问题,关于查询的字符串要处理和表前缀(系统安装时候要用户输入标签追,若是没输对,就全废了)问题
*每个方法都写$this->load->database()是很麻烦的,所以啊,可以再apllication的config文件中找到autoload。php文件,将要自动加载的类库给添加了就不用每次麻烦写了
*安全问题一:对于传入的数据,再写mysql语句时候啊,变量要以??代替,然后在执行query时候啊,可以传入一个穿放着变量的数组来作为第二个参数,$sql是第一个参数,就可以替换掉?处的变量
*安全问题二:对于表前缀的问题啊,首先,怕在开发过程当中修改表前缀引发的麻烦,所以,引入了一个东西,叫做表前缀的替换,怎么替换呢?任然是在application当中的database.php文件当中,修改一个配置,‘swap_pre‘ => ‘swap_‘,给它添加一个表前缀,如,然后在sql语句当中的我原来的ci_girls,写成swap_girls,就算database中的实际表前缀改了,也会被自动替换成所改的,也比较方便。。。
//数据库的操作到此就告一段落的
*********AR模型******
*引言:上面的方法是一种操作数据库的方法,现在ar又是一种,可以简化许多sql语句的方法。
*要启动ar方法,要在config的database中确保Active_recod = ‘true’才行,否则是用不了ar方法
*查询:$result=$this->db->get(‘tableName‘)【查询全部就只有一个参数就是表名】可以获取所有表中数据,这里ar模型不需要写表前缀了这个东西得到的也是对象,也需要用$res=$result->result();之后才能使用
*插入:$bool = $this->db->insert(‘tableName‘,$data)【两个参数表名和包装了数据的关联数组】;$data=array(‘username‘=>‘zhannan‘,‘password=‘=>‘Iloveyou‘);将要插入数据组装成数组就行了
*修改:$bool = $this->db->update(‘表名‘,‘包装了所要修改的参数的关联数组’,‘array("id"=>1)[就是修改的地方时那个]‘)
*删除也容易就是:$this->db->delete(‘tableName‘,array(delete condition));
*他妈的,我的数据库的基本语句只是需要提升啊。哈哈哈,,,,
**AR中sql的连贯查询。。。
*如:sql:select name,pswd from user where id>=3 order by id desc limit 2,3(跳过前两条取后三条)
limit 2,3 跳过两条去三条 limit 1只取一条
SELECT * FROM ci_girls WHERE emotion LIKE ‘%我%‘ ORDER BY id DESC
’%我%‘代表中间有我字样的信息。。。还有很多 看来需要个专题慢慢弥补
*如phpCI要读取如此数据,如此
$this->db->select(‘girlname,id‘)
->from(‘girl‘)
->where(‘id >=‘,$id)
->order_by(‘id desc‘)
->limit(3,2)//要注意这里,跳过两条去三条和正常的sql语句相反
->get();
若是要输出上一条sql语句:echo $this->db->last_query();
*重大发现:我发现了,只要是设计参数的传递的,ci当中都靠array来完成!
*在写连贯查询的时候,要注意where地方的参数,直接用数组去传递参数了,
而且啊,注意,由于框架当中的正则,所以,where(‘name =‘,‘zhongyaji‘),符号和字段名要空格!!!!!!!
*如果还是遇到了非常负责的语句,那么还是直接写sql语句,? 那种去做了
****CI框架的拓展
引言:在ci当中,发现某各类不好用的时候,可以自己扩展他。如何扩展,如,我想要扩展CI_controller,就要看看system文件夹中系统的CI_controller类是在哪个文件夹中,在core中,于是,我回到application文件夹中找到core文件,就可以对应的在里面写controller的拓展。session在system下是在librarie目录下,所以啊要扩展session的方法,在application下也是要写在其下面的libraries下;扩展仅仅是扩展,就是在原有的功能上添加一些功能,,所以,如,我的拓展代码是:
注意,在php中子类继承了父类之后,子类的构造函数会覆盖父类的
BUT啊 为什么要用前缀MY_而不是其他呢?在config文件夹下的config.php有一个属性叫做
:$config[‘subclass_prefix‘] = ‘MY_‘;的地方规定了拓展方法的前缀都是MY_
文件名是MY_Controller.php
class MY_Controller extends IC_Controller
{
//注意,要保留原来的方法,就要写构造函数
public function __construct()
{
//第一句一定就要继承父类
parent::__construct();
//在未来的学习中,一般的权限验证啊。。登录验证啊,一般都是再次
}
//之后就可以写自己的方法了哦
}
***************2015.11.1*****************
*url函数
*这个东西是为了在写地址如post的action或者是a的href时候为了磨合主目录变而产生的东西,用了
它,就算主目录变了,也可以不用改路径。
*site_url()首先在controller的action中需要$this->load->helper(‘url‘) 这个东西也可以在autoload.php里面 配置自动load;然后在view中的post的action中就如此写:
<form action=‘<?php echo site_url(‘controller/action‘) ?>‘>然后页面就会是controller下的action中那个,在通过$this->input->post[]获取参数。
*base_url()这个东西是为了表示资源在的路径(是代表根目录,而不是../了),如<img src = ‘<?php echo base_url()?>img/left/hello.png‘>base_url()方法自己就带了下划线,所以啊 不需要在后面再加下划线了。
*#*#*#**#*#*#*#*下面是一些日常设计中常用的方法。
*php分页的使用:非常的常用啊这个东西也是啊
。。。。。。这个东西有点复杂擦了。。。慢慢来。
**复杂的写法若此于方法中:
first:装载分页类:
$this->load->library(‘pagination‘);
second:每页显示的记录数:
$page_size = 10;//每页显示十条
third配置项目config
//哪个目录下的分页,目录设置
$this->load->helper(‘url‘);
$config[‘base_url‘] = site_url(‘controller/action‘);
//总共几条记录
$config[‘total_rows‘] = ‘‘;
//每页显示几条
$config[‘per_page‘]=‘‘;
//初始化方法
$this->pagination->initialize($config);
//上述的设置基本完成之后,就可以显示分页的那些标签了
$data[‘link‘]=$this->pagination->create_links();
$this->load->vars($data);将这个link样式传递给视图层
***experience of url:
常用的有两个方法,在用之前,都要加载
$this->load->helper(‘url‘);
之后直接用(这里比较特殊:)
1.site_url(‘controller/action‘);//是得到方法的url地址是什么?常用于超链接之泪的
2,base_url();得到的通常是地址根目录,绝对地址。
*日了狗了,原来limit是更多的用来控制分页显示的。
*还有的,分页,点击页码的时候,url上会出现一个参数,是个int数字
代表着跳过了几条。intval()方法可以转为整数,所以更具这个可以在数据库中进行数据的查找了。
*要将点击控制页码的link转变,需要:
config[‘fitst/last_link‘]=‘首页/尾页‘ config[‘pre/next_link‘]=上/下一页
*分页产生的在url的偏移一般是第三段,所以啊,若不是第三,需要配置
config[‘uri_segment‘]=4;

*做这个页码倒是亲自做了出来了,但是啊,哈哈,还是有些疑问,暂时把代码考下来了,供参考

public function showpages()
{
//加载页码类
$this->load->library(‘pagination‘);

//页码的一些设置
//加载页码所在的页面
$this->load->helper(‘url‘);

$config[‘base_url‘] = site_url(‘paginationuse/showpages‘);
//link处的名字变成自定义
$config[‘prev_link‘]=‘上一页‘;
$config[‘next_link‘]=‘下一页‘;
$config[‘first_link‘]=‘首页‘;
$config[‘last_link‘]=‘尾页‘;
//加载总共几页
$config[‘total_rows‘] = 100;//这里是可变的,可以变量赋值之
//加载每页鸡条记录
$per_page = 3;
$config[‘per_page‘] = $per_page;//这里是可变的,可以变量赋值之
//初始化配置

$this->pagination->initialize($config);

//从数据库中取出来试试
$this->load->database();
//获取url空页码控制的条数,来数据库中查询
$offset = intval($this->uri->segment(3));
$sql = ‘select * from swap_girls limit ‘.$offset.‘,‘.$per_page;
echo ‘查询的语句是:‘.$sql.‘<br/>‘;
$end = $this->db->query($sql);
$result = $end->result();
$data[‘result‘] = $result;

//上述完成,基本就设定好了初等的模型,然后需要数据库的配合,然后换成链接,得到渲染,此处县换成链接

$data[‘links‘] = $this->pagination->create_links();
//将数据传到view
$this->load->view(‘pagination/pagination‘,$data);
}
CI文件上传:
*文件上传必须有form,而form类当中,必有:
<form action=‘‘,method=‘‘,enctype=‘multipart/form-data‘>//必须有enctype这句
<input type=‘file‘ name=‘picture‘>//其中的有个input属性是file。。。。。
</form>
*上传上传,就是传到服务的期某个目录,所以呀,自己要在某个地方创建个目录。专门放上传的东西的
*注意,在ci中index入口文件,所以写相对路劲时候都是以其为基本写的。
*上传也是要配置一些东西:
(传来哪个页面哪个页面做这些操作。)
$config[‘upload_path‘]=‘./upload‘;//看,这个路劲就印证了上一点
$config[‘allowed_types‘]=‘gif|png|jpg|jpeg‘;//允许的文件
$config[‘file_name‘]=uniqid();使得文件名是唯一的。
$this->load->library(‘upload‘,$config);
$this->upload->do_upload(‘picture‘);//这里括号里面的参数,是刚刚type=file表单里面的参数
$this->upload-data()可以得到刚刚上传的文件的属性

******2015.11.02***********************************
*设置路由:可以随意配置url,可以设置隐藏index.php或者设置文件是html结尾
*在config文件当中的route.php当中可以设置网站默认的控制器是哪个,原来默认的是welcome.php
*在config的route.php文件中写$route[‘正则写出来的实际显示的url‘]=‘原来的url‘
*如:$route[‘news/[\d][6]/[[\d]+]\.html‘] = ‘article/show/$1‘;
***哎哟 我的正则表达式太弱了 ,要枪火枪火;
*真实项目的url是根据需求来:所以说正则表达式很重要的,正则填坑:
1,preg_match(‘正则规则‘,‘匹配源‘);//判断某个正则规则是否存在
2,正则表达式由分隔符(/,#,~)和元字符(最基础的字符)组成
3,如果模式当中需要有分隔符字符出现,那么要用\进行转移,就像是引号多个时候用\转移。
4, 分隔符后面可以用模式修饰符,如:‘/http/i‘ (i是忽略大小写),可以匹配Http,
5,元字符 \ ,转译字符,只在方括号类可用,
^开始正则的位置,外部表示开始,在方括号内入:[^\s]表示取反,非空白符,
$正则结束出:
.匹配除了换行之外的任何字符
[ ]开始和结束字符类的定义
( )【】内子组的定义
*0或者多次
+1或者多次
{}自定义量词的开始结束
/i是忽略大小写 /s是空白 /d是匹配数字
正则表达式我是日了狗了:看着晕得很,,,拷贝下来个大神的,以后用的时候查询了。。。。


1. 平时做网站经常要用正则表达式,下面是一些讲解和例子,仅供大家参考和修改使用:
2. "^\d+$"  //非负整数(正整数 + 0)
3. "^[0-9]*[1-9][0-9]*$"  //正整数
4. "^((-\d+)|(0+))$"  //非正整数(负整数 + 0)
5. "^-[0-9]*[1-9][0-9]*$"  //负整数
6. "^-?\d+$"    //整数
7. "^\d+(\.\d+)?$"  //非负浮点数(正浮点数 + 0)
8. "^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$"  //正浮点数
9. "^((-\d+(\.\d+)?)|(0+(\.0+)?))$"  //非正浮点数(负浮点数 + 0)
10. "^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$"  //负浮点数
11. "^(-?\d+)(\.\d+)?$"  //浮点数
12. "^[A-Za-z]+$"  //由26个英文字母组成的字符串
13. "^[A-Z]+$"  //由26个英文字母的大写组成的字符串
14. "^[a-z]+$"  //由26个英文字母的小写组成的字符串
15. "^[A-Za-z0-9]+$"  //由数字和26个英文字母组成的字符串
16. "^\w+$"  //由数字、26个英文字母或者下划线组成的字符串
17. "^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$"    //email地址
18. "^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$"  //url
19. /^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/ // 年-月-日
20. /^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/ // 月/日/年
21. "^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$" //Emil
22. /^((\+?[0-9]{2,4}\-[0-9]{3,4}\-)|([0-9]{3,4}\-))?([0-9]{7,8})(\-[0-9]+)?$/ //电话号码
23. "^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$" //IP地址
24.
25. 匹配中文字符的正则表达式: [\u4e00-\u9fa5]
26. 匹配双字节字符(包括汉字在内):[^\x00-\xff]
27. 匹配空行的正则表达式:\n[\s| ]*\r
28. 匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/
29. 匹配首尾空格的正则表达式:(^\s*)|(\s*$)
30. 匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
31. 匹配网址URL的正则表达式:^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$
32. 匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
33. 匹配国内电话号码:(\d{3}-|\d{4}-)?(\d{8}|\d{7})?
34. 匹配腾讯QQ号:^[1-9]*[1-9][0-9]*$
35.
36.
37. 元字符及其在正则表达式上下文中的行为:
38.
39. \ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个后向引用、或一个八进制转义符。
40.
41. ^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的Multiline 属性,^ 也匹配 ’\n’ 或 ’\r’ 之后的位置。
42.
43. $ 匹配输入字符串的结束位置。如果设置了 RegExp 对象的Multiline 属性,$ 也匹配 ’\n’ 或 ’\r’ 之前的位置。
44.
45. * 匹配前面的子表达式零次或多次。
46.
47. + 匹配前面的子表达式一次或多次。+ 等价于 {1,}。
48.
49. ? 匹配前面的子表达式零次或一次。? 等价于 {0,1}。
50.
51. {n} n 是一个非负整数,匹配确定的n 次。
52.
53. {n,} n 是一个非负整数,至少匹配n 次。
54.
55. {n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。在逗号和两个数之间不能有空格。
56.
57. ? 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。
58.
59. . 匹配除 "\n" 之外的任何单个字符。要匹配包括 ’\n’ 在内的任何字符,请使用象 ’[.\n]’ 的模式。
60. (pattern) 匹配pattern 并获取这一匹配。
61.
62. (?:pattern) 匹配pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。
63.
64. (?=pattern) 正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。
65.
66. (?!pattern) 负向预查,与(?=pattern)作用相反
67.
68. x|y 匹配 x 或 y。
69.
70. [xyz] 字符集合。
71.
72. [^xyz] 负值字符集合。
73.
74. [a-z] 字符范围,匹配指定范围内的任意字符。
75.
76. [^a-z] 负值字符范围,匹配任何不在指定范围内的任意字符。
77.
78. \b 匹配一个单词边界,也就是指单词和空格间的位置。
79.
80. \B 匹配非单词边界。
81.
82. \cx 匹配由x指明的控制字符。
83.
84. \d 匹配一个数字字符。等价于 [0-9]。
85.
86. \D 匹配一个非数字字符。等价于 [^0-9]。
87.
88. \f 匹配一个换页符。等价于 \x0c 和 \cL。
89.
90. \n 匹配一个换行符。等价于 \x0a 和 \cJ。
91.
92. \r 匹配一个回车符。等价于 \x0d 和 \cM。
93.
94. \s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。
95.
96. \S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
97.
98. \t 匹配一个制表符。等价于 \x09 和 \cI。
99.
100. \v 匹配一个垂直制表符。等价于 \x0b 和 \cK。
101.
102. \w 匹配包括下划线的任何单词字符。等价于’[A-Za-z0-9_]’。
103.
104. \W 匹配任何非单词字符。等价于 ’[^A-Za-z0-9_]’。
105.
106. \xn 匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。
107.
108. \num 匹配 num,其中num是一个正整数。对所获取的匹配的引用。
109.
110. \n 标识一个八进制转义值或一个后向引用。如果 \n 之前至少 n 个获取的子表达式,则 n 为后向引用。否则,如果 n 为八进制数字 (0-7),则 n 为一个八进制转义值。
111.
112. \nm 标识一个八进制转义值或一个后向引用。如果 \nm 之前至少有is preceded by at least nm 个获取得子表达式,则 nm 为后向引用。如果 \nm 之前至少有 n 个获取,则 n 为一个后跟文字 m 的后向引用。如果前面的条件都不满足,若 n 和 m 均为八进制数字 (0-7),则 \nm 将匹配八进制转义值 nm。
113.
114. \nml 如果 n 为八进制数字 (0-3),且 m 和 l 均为八进制数字 (0-7),则匹配八进制转义值 nml。
115.
116. \un 匹配 n,其中 n 是一个用四个十六进制数字表示的Unicode字符。
117.
118. 匹配中文字符的正则表达式: [u4e00-u9fa5]
119.
120. 匹配双字节字符(包括汉字在内):[^x00-xff]
121.
122. 匹配空行的正则表达式:n[s| ]*r
123.
124. 匹配HTML标记的正则表达式:/<(.*)>.*</1>|<(.*) />/
125.
126. 匹配首尾空格的正则表达式:(^s*)|(s*$)
127.
128. 匹配Email地址的正则表达式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*
129.
130. 匹配网址URL的正则表达式:http://([w-]+.)+[w-]+(/[w- ./?%&=]*)?
131.
132. 利用正则表达式限制网页表单里的文本框输入内容:
133.
134. 用正则表达式限制只能输入中文:onkeyup="value=value.replace(/[^u4E00-u9FA5]/g,‘‘)" onbeforepaste="clipboardData.setData(‘text‘,clipboardData.getData(‘text‘).replace(/[^u4E00-u9FA5]/g,‘‘))"
135.
136. 用正则表达式限制只能输入全角字符: onkeyup="value=value.replace(/[^uFF00-uFFFF]/g,‘‘)" onbeforepaste="clipboardData.setData(‘text‘,clipboardData.getData(‘text‘).replace(/[^uFF00-uFFFF]/g,‘‘))"
137.
138. 用正则表达式限制只能输入数字:onkeyup="value=value.replace(/[^d]/g,‘‘) "onbeforepaste="clipboardData.setData(‘text‘,clipboardData.getData(‘text‘).replace(/[^d]/g,‘‘))"
139.
140. 用正则表达式限制只能输入数字和英文:onkeyup="value=value.replace(/[W]/g,‘‘) "onbeforepaste="clipboardData.setData(‘text‘,clipboardData.getData(‘text‘).replace(/[^d]/g,‘‘))"
141.
142. =========常用正则式
143.
144.
145.
146. 匹配中文字符的正则表达式: [\u4e00-\u9fa5]
147.
148. 匹配双字节字符(包括汉字在内):[^\x00-\xff]
149.
150. 匹配空行的正则表达式:\n[\s| ]*\r
151.
152. 匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/
153.
154. 匹配首尾空格的正则表达式:(^\s*)|(\s*$)
155.
156. 匹配IP地址的正则表达式:/(\d+)\.(\d+)\.(\d+)\.(\d+)/g //
157.
158. 匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
159.
160. 匹配网址URL的正则表达式:http://(/[\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?
161.
162. sql语句:^(select|drop|delete|create|update|insert).*$
163.
164. 1、非负整数:^\d+$
165.
166. 2、正整数:^[0-9]*[1-9][0-9]*$
167.
168. 3、非正整数:^((-\d+)|(0+))$
169.
170. 4、负整数:^-[0-9]*[1-9][0-9]*$
171.
172. 5、整数:^-?\d+$
173.
174. 6、非负浮点数:^\d+(\.\d+)?$
175.
176. 7、正浮点数:^((0-9)+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
177.
178. 8、非正浮点数:^((-\d+\.\d+)?)|(0+(\.0+)?))$
179.
180. 9、负浮点数:^(-((正浮点数正则式)))$
181.
182. 10、英文字符串:^[A-Za-z]+$
183.
184. 11、英文大写串:^[A-Z]+$
185.
186. 12、英文小写串:^[a-z]+$
187.
188. 13、英文字符数字串:^[A-Za-z0-9]+$
189.
190. 14、英数字加下划线串:^\w+$
191.
192. 15、E-mail地址:^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$
193.
194. 16、URL:^[a-zA-Z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\s*)?$
195. 或:^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\‘:+!]*([^<>\"\"])*$
196.
197. 17、邮政编码:^[1-9]\d{5}$
198.
199. 18、中文:^[\u0391-\uFFE5]+$
200.
201. 19、电话号码:^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$
202.
203. 20、手机号码:^((\(\d{2,3}\))|(\d{3}\-))?13\d{9}$
204.
205. 21、双字节字符(包括汉字在内):^\x00-\xff
206.
207. 22、匹配首尾空格:(^\s*)|(\s*$)(像vbscript那样的trim函数)
208.
209. 23、匹配HTML标记:<(.*)>.*<\/\1>|<(.*) \/>
210.
211. 24、匹配空行:\n[\s| ]*\r
212.
213. 25、提取信息中的网络链接:(h|H)(r|R)(e|E)(f|F) *= *(‘|")?(\w|\\|\/|\.)+(‘|"| *|>)?
214.
215. 26、提取信息中的邮件地址:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
216.
217. 27、提取信息中的图片链接:(s|S)(r|R)(c|C) *= *(‘|")?(\w|\\|\/|\.)+(‘|"| *|>)?
218.
219. 28、提取信息中的IP地址:(\d+)\.(\d+)\.(\d+)\.(\d+)
220.
221. 29、提取信息中的中国手机号码:(86)*0*13\d{9}
222.
223. 30、提取信息中的中国固定电话号码:(\(\d{3,4}\)|\d{3,4}-|\s)?\d{8}
224.
225. 31、提取信息中的中国电话号码(包括移动和固定电话):(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,14}
226.
227. 32、提取信息中的中国邮政编码:[1-9]{1}(\d+){5}
228.
229. 33、提取信息中的浮点数(即小数):(-?\d*)\.?\d+
230.
231. 34、提取信息中的任何数字 :(-?\d*)(\.\d+)?
232.
233. 35、IP:(\d+)\.(\d+)\.(\d+)\.(\d+)
234.
235. 36、电话区号:/^0\d{2,3}$/
236.
237. 37、腾讯QQ号:^[1-9]*[1-9][0-9]*$
238.
239. 38、帐号(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
240.
241. 39、中文、英文、数字及下划线:^[\u4e00-\u9fa5_a-zA-Z0-9]+$
**//虽然说我对正则掌握度不高,但是我还是把视频上的copy下来然后以后参考了
如:原来的网址是:http://localhost:80/modle/index.php/welcome/index
我们为了客户需求,要转化为:http://localhost:80/modle/index.php/news/2015/12.html
就在config的route.php文件中改正则,如:
*******醉了 我先记着是这么写 之后的再说了
不过这种写法,在controller中的方法有个参数,$id,就是url最后的id
$route[‘news/[\d]{6}/(/[\d]+)\.html‘] = ‘welcome/index/$1‘;这就是用前面那串的正则来代替welcome/index这种写法。实际上我记住这种简单的就行了 其他的许多情况应该也就写得出来了。
将后面的那一串改成前面那一串
解释下:news/ 6个数字/多个数字.html
通过正则来定制url
*隐藏前面的入口文件是由apache来配置的,它其中的一个文件rewrite中说明了所示找不到就指向index.php,,哎哟 不对哦 怎么隐藏呢?apache当中的httpd.conf文件当中配置rewrite,upupw中不知道呢。
*****session 于CI
*嘿老子一跳,传说这里的session不好用,,,,擦擦,与一个页面(action)设置的session,此页不能立即获取,要么重新刷新,要么跳转页面。。。
而且啊,session是放在cookie中的,cookie又可见,所以说啊,我擦嘞,要加密,要加密,must
$thit->load->library(‘session‘);
$this->session->set_userdata(‘key‘,‘value‘);这里的value可以是数组或者对象。一定要有key
取出数据时候,$this->session->userdata(‘key‘);如此便可以获取了此key对应值。
*md5()这是php中加密的函数,直接放在里面就可以进行加密字符串,配合uniqid()(以微妙为单位生成随机名字);,md5(uniqid());就可以生成很复杂的字符串
*生成了这个字符串之后,在config文件中的config.php中的config[‘encryption_key‘]=‘‘;中
*之后存储在cookie当中之后,当改了之后才根据配置的字符串知道是否改了来限制不能改。就是md5(cookie中的字符串.config中的部分)看看连接起来是不是等于cookie中的最后一段。来保障安全
*还有一个加密cookie的 设置config中的$cookie[‘sess_encrypt_cookie‘]=true
*this->session->set_flashdata[‘key‘,‘value‘]是用来设置这个session只使用一次就销毁
*得到:$this->session->flashdata[‘key‘];

**表单验证:
*有专门的类帮忙,使得我们不需要再去看看是否空啊,之类的。。。
*首先写个表单,然后要引入方法$this->load->library(‘form-vailidation‘);
****!!!记住 凡是这些工具类都在library库中
*$this->form_vailidation->set_rules(‘name‘,‘用户名‘,‘required‘) 第一个参数是表单的name,第二个是label的名称 第三个限制是规则
第三个参数是限制规则,还有matches匹配 max/min-lenght vaild_number vaild_email....多得很
**之后的之后,$bool=$this->form_validation->run(),看其false或者true来看是否满足规则决定下一步。
若是符合规则,就调用模型来存储数据,若是不符合规则,就加载刚才那个视图,然后啊,在视图层显示
<?php echo form_error(‘表单name处的值‘)?>只有当触发错误时候才有form_error
*在form验证当中,有时候错误提示啊,种种都默认输出英文,我们要下载个语言包,然后在config中放入这的language中放此语言包,然后在config的config文件中的$config[‘lang‘]=‘zh-cn‘就是这个包的名字即可。
*实际上上面这种思路是错误了调了一次页面了,为了使得值还在(刚放填入的)要设置value=‘<?php echo set_value(‘name‘)?>‘
*再写错误信息时候,若是<?php echo form_error(‘name‘,‘<span>‘,‘</span>‘) ?>这样就不会换行了,默认是<p>提示错误信息会换行
*<?php echo validation_errors()?>输出所有错误
*若是验证的条件比较多,那么啊,可以写成2维数组,data中 ,然后在$this->form_vailidation->set_rules($data);就可以判断了如果不对的话,在视图层就可以输出错误了哦

public function judgeform()
{
$this->load->helper(‘url‘);
$this->load->library(‘form_validation‘);
//以后就像数组这么写吧 多好
$config= array(
array(
‘field‘=>‘username‘,
‘label‘=>‘username‘,
‘rules‘=>‘required‘
),
array(
‘field‘=>‘password‘,
‘label‘=>‘password‘,
‘rules‘=>‘required‘
),
array(
‘field‘=>‘email‘,
‘label‘=>‘email‘,
‘rules‘=>‘valid_email‘
)
);
$this->form_validation->set_rules($config);
$bool = $this->form_validation->run();
if($bool)
{
$this->load->view(‘formuse/success‘);
}
else
{
$this->load->view(‘formuse/formuse‘);
}
}
*检查一个变量是否被设置isset()只能对变量使用,empty()查看变量是否为空
**********2015*11*03**********************************
*clone有时候啊,比如有一个类,我将它实例化了之后,为$a 若是$b=$a,我若是用b来进行一些属性的设置,会影响到a,我若$b = clone $a;在进行操作就不会影响到a了
*final protected function __construct(){}这样写禁止外部调用此构造函数
***又认知了一个集成开发环境 现在有三个了 xammp wampserver upupw
**$_SERVER[‘REQUEST_METHOD‘]得到表单请求的方式,可以判断是那种方式提交的,然后啊,调用函数实际上是很方便的。有点像js又。
*定义全局变量要global以下才可以。除了系统自带的超全局变量
**关于ajax再解,哪里向其他页面或者是controller或者是方法发送了get请求,夹带参数,那就等于是向那个地方(方法、页面、controller)发送个参数,那个地方有得到请求的判断,受到了get的请求它必须要发送个相应回去,比如:ajax不动,老子不动,它一动,不论好坏我都要跑跑自己的方法,给他一个说法。我的说法跑出来的结果就是给它的值,在php中是跑完后输出的echo的地方。也就相当是我把控制台的response看成一个网页,隐形给它输出我得到的值。我只是在我现在的网页得到那个来处理罢了
**在写css和jquery要引入外联的试样时候,都要用url类来定根目录,写法如:<link rel="stylesheet" type="text/css" href="<?php echo base_url();?>org/bootstrap.min.css">
******2015.11.05****************************************************
*临时的建立一个php服务器:
命令行,进入到要运行的php的根目录下,然后啊,输入命令php -S 0.0.0.0:8080就相当于在http://0.0.0.0:8080搭建了一个临时的服务器。
*在php中的view当中$this->load->view(‘what‘)可以进行项include于node中一样的拼接
*mysql填坑:
去重查询 :select distinct(Username) from table;只能查询一个字段,
分组 select user,password from table group by id 最后查询到的只有经过id分组的user和password
选择并且统计重复 select a count(b)/sum(b) from table group by a 选出a 将所有a对应的b有几个,a对应b的和为几何?
join 貌似无论是否是外键都可以jion,是为了给两张表建立起来关系的查询。
如:select * from a left join(左边右连接就是以右边(后选择的表)为标准为标准) on(怎么连接的条件) a.aid =(<>可以是任何条件) b.bid;
select * from a,b where a.aid = b.bid (这叫做inner join)也就是说啊,两边是平等的 两个标的不同会被舍弃 不会偏倚谁。
子查询:就是用另外一个查询到的东西设为现在的查询条件,select * from tableA where conditionOne in(select * from tableB)
*关于mysql的索引,没有索引的,就相当于翻看一本没有目录的书本,select起来是很麻烦的,查找个东西是很费时间的,
有索引的,就相当于一本有目录的书了,可以很快的查阅。
索引的分类:簇索引和数据一起留在一起,因为数据为了簇索引而重新排列了,簇索引占的空间更大了,一个表只能够有一个簇索引。
非簇索引,结构独立,占用空间更多,时间会更慢点,但是啊,一个表需要多个索引的时候啊,只能用非簇索引了哦
触发器,绑定给某个表某个事件(insert delete ...),一旦此表出现了这个事件,就触发规定事件

*****###数据库设计:
stepOne:
需求分析:1,实体实体间关系,2属性几何?3,那些属性和属性组合可以唯一表示实体,
逻辑设计:之后画出er图。,2,范式:第一范式:只能2维表;第二范式:当不是一个字段充当主键的时候,每个主键中的字段都不能和外部的其他信息关联,不然啊,会产生add,delete update等异常。如果有关联,会导致(以主键中一部分)增加则都增。3:第三范式:就是主键,不能和属性有任何的关系,,,任意一点函数关系都不能。
<<<<<<< HEAD
****2015.11.6*****
*看到了苏从后的数据库设计,全部是id自增为主键,以后老子也先效仿哈
*juicer是一个js的模板引擎,可以批量的显示得到的数据。
*在填入动态数据到数据库的时候,php是<?=$itme->what?>;没有php字符了!
*defined(‘BASEPATH‘) OR exit(‘No direct script access allowed‘);在ci中是为了防止不经过index.php直接访问类
*想要在类中集成自己定义的类,要先引入:require_once(APPPATH.‘controller/hello‘)APPPATH代表了application的路劲,在index.php中有规定
=======

**#*#*#CI实战开始:2015.11.6******
1,在config的route里面可以修改默认的进入的controller
2,在页面的时候应该可以$this->load->view()某个部分来进行拼接 直接用/来代表主页面
3,defined(‘BASEPATH‘) OR exit(‘No direct script access allowed‘);这句话是为了组织不经过index.php入口文件就访问controller
4,require_once(APPPATH.‘/controller/console/admin.php‘);//要继承自己写的类的时候要这么搞 ,apppath代表application目录
****再次注意 model层只负责取得数据,逻辑是controller 视图展示是views
***今晚花了点时间,真是日了狗了,首先啊,数据库中取到的东西是个对象或者数组,他们之中还包含取到的记录形成的数组或者对象,所以啊,要去除其中某个值时候,比如$result = $end->result_array();$result[0][‘password‘];
***2015.11.08虽然还是有很多的bug,但是啊,还是实现了权限管理了 哈哈哈沃日勒

php long time(1)

标签:

原文地址:http://www.cnblogs.com/modle-sherlock/p/4960193.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!