thinkphp一句话疑难解决笔记 3
错误调试, E($msg)?
这个是tp内置的E 方法, E 函数. 它是tp抛异常 的另外一种方式. 默认的异常处理方式是, 在 框架下的 ThinkPHP/Tpl/think_exception.tpl, 其中的提示消息是: $e['message'], 而 E($msg)的使用场合是: 抛自定义异常消息: 如果你不想显示系统默认的 $e['message'], 那么你可以用 E 方法,显示自定义的异常消息. 而实际上, E方法,还是走的异常 途径, 它是: E($msg, $code=0) { throw new Think\Exception($msg, $code); }. 就是说, 如果你判断某个条件或执行出错, 你可以自己手动抛异常, 只是异常的提示消息由E方法的第一个参数确定, 当然不一定是$msg变量名. 后面的$e['file', 'line', 'trace']等, 跟think_exception.tpl是一样的.
php本身就有异常类, \Exception, 基本的使用方法是, 直接抛出异常 throw new Exception($except_msg) , 同样会显示异常消息和trace信息.....(如果不处理, 将会导致程序终止, 如果用 catch...处理则不终止). 而thinkphp的异常处理则是, 直接继承(实际上就是利用php原生的exception类), 在显示页面, 则做了一些包装而已.
抛异常时, 是 throw new \Think\Exception($msg,$code);, 注意写模块时, 要加上根路径, 如果不加, 就表示是当前路径(可能是当前模块...), 如果加上,表示是根路径, 而系统默认的根路径就是 THINK_PATH.'Library/', 这个就正好!
性能调试,查看代码运行时间, 和内存占用情况?
G
模型调试, 查看sql语句和数据库错误?
如果要判断 “常量”是否dingyi, 使用 defined, isset是判断变量的,它后面要跟 $变量的, 如果用 isset(__FILE__)就会报错。
__FILE__, __LINE__, 的性质:不是常量,因为用 defined(__FILE__)判断会返回 false, 也不是普通变量, 因为用 isset(__FILE__)来判断会返回语法错误, 他是php语言自己在系统内部定义的 全局变量, 只可以在php脚本程序的函数 中使用! 表示当前使用这个 全局变量的 文件(跟包含/不包含无关)本身的 在服务器上的物理磁盘上的 绝对路径。
---* IpLocation的用法 *---
Wry ['rai]:讽刺的,挖苦的;扭曲的,歪斜的: with a wry smile, wry face, wry nose, make a wry face.
QQWry 可以是一个php扩展,用来读取QQWry.dat数据文件。
QQWry.dat是彩虹QQ外挂文件使用的 显IP地址的QQ
将qqwry.dat的扩展名修改为mdb, 用access打开时提示输入密码:...
QQWry.dat文件,分成:文件头,索引区,记录区. 由于记录不是等长的,所以不能直接通过记录区查找到记录,要通过索引,才能查找到.
---* IpLocation的用法 *---
获取位置/地址的方法是: getlocation, 注意 中间的location的开头字母l, 不用大写的.
默认的ip地址库是UTFWry.dat, 如果不是, 则要在 new IpLocation('这里写上 qqwry.dat数据库文件').
不用去专门找 utf-8的编码的dat文件, 如qqwry.dat也可以, 它是gbk编码, 把信息取出来后, 用iconv作一次转化就可以了...
开启文件支持模块, 是php的扩展, 名字叫 fileinfo, 不是finfo, tp提示说, 为了更好的使用文件上传功能, 建议服务器开启 finfo模块。
对比记忆 文件上传和图片处理类:
都是先创建一个对象, 然后设置配置, 最后引用 一个动作方法: 上传的动作 函数是: uploda(), 图片的动作 函数是: crop(...)/thumb(...)/water(...)/text(...)-> save(...). 最后,返回的结果不同: 上传返回的是 由上传文件的信息(即使是一个) 组成的数组, 图片动作返回的是 对象本身 $this(包括通常最后的save方法), 所以支持连贯操作.
seliux的配置命令中,是 enforce, 不是force!
常量的定义方式, 全局常量和 类里面的常量定义方式是不同的: 全局的用 define(CONST_NAME, value). 类里面的就不能用define了, 而要用 const IMAGE_THUMB_SCALE
我觉得很无语的是, dw的cs5,(cs5比cs3好用), 安装时放在桌面的快捷方式, 不能删,也不能改名,也不能移动位置,甚至你将快捷方式移动到开始菜单后再放到桌面上来, 都会失效!(或许是删除了注册项什么的? 一旦检查到移动位置, 就令快捷方式失效吗?)
$_SERVER的几个容易混淆的元素?
$_SERVER['SCRIPT_NAME'], = [PHP_SELF], 表示只是(脚本的本身, php文件自己)文件名称本身: /index.php
['SCRIPT_FILENAME'], 是完整的包括文件路径的名称: C:/wamp/www/index.php
protected function templateContentReplace($content) {
// 系统默认的特殊变量替换
$replace = array(
'ROOT' => ROOT, // 当前网站地址
'APP' => APP, // 当前应用地址
'MODULE' => MODULE,
'ACTION' => ACTION, // 当前操作地址
'SELF' => htmlentities(SELF), // 当前页面地址
'CONTROLLER'=> CONTROLLER,
'URL' => CONTROLLER,
'PUBLIC' => ROOT.'/Public',// 站点公共目录
);
文件上传,有两个数组,不要搞混了: 一个是上传文件的配置数组, 一个是上传文件信息的数组.即使是同名的key含义也不同, 前者表示属性的配置, 后者表示属性的获取.
即使你不设置upload的任何上传配置, 也会有默认的上传配置信息, 那就是Upload类的私有成员: private $config, 里面有默认的配置信息, 如: rootPath='./Uploads', savePath='', saveName=array('uniqid',''),等等.
而 Upload在实例化的时候, 构造函数会要求输入一个用户自定义的配置, 然后会将类对象默认的$config和自定义上传配置进行合并...
public function __construct($config=array(),...){
$this->config = array_merge($this->config, $config);
}
php虽然没有类型强制规定, 但是今后规范类型是一种趋势, 所以, 现在可以通过初始化的方式, 来变通的规范变量类型. 初始化的方式根据你想存储的数据类型来决定: $arr=array(); $str=''; $num=0; $obj=null;
实例化Upload类的时候, 可以使用完整的类路径, 也可以使用 命名空间, use关键字指的是 哪一个类文件, 而namespace指的是目录.
U方法, 虽然指定的是操作方法, 但是生成的是具体的操作方法名称对应的html文件,如: U('uplad'): /index.php/Home/Index/upload.html
数组虽然可以相加, 如arr_a + arr_b, 但这种运算通常没有实际意义
对于数组array('name'=>'John'), 前面的叫 索引/index/key, 后面的叫值. 分成数字索引和字符串索引.
数组可以用数字索引和字符串索引混合使用! 混合时,数字索引不管前后的字符串索引, 仍然从0开始编号.
$arr=array('name'=>'Jonh', 10,20, 'age'=>20);
dump($arr);
array
'name' => string 'Jonh' (length=4)
0 => int 10
1 => int 20
'age' => int 20
注意: array_merge是有前后顺序的, 对于字符串索引, 相同名称的key, 则用后面的key-value来覆盖前面的. 没有重复的, 则按第一个先排, 后面的后排进行组合.
思想:
php, thinkphp是解释型语言, 即使如果某个方法/函数中有代码错误(如类不存在), 只要你当前页面对应的控制器的方法中, 没有错误,在运行当前页面的时候, 都不会报错.(比如 请求index页面时, 不会去检查upload方法是否有错的! ) 只有在client去请求另外的页面, 这个另外的页面有错的时候, 才会报错. 不像编译型的语言, 在运行前, 就进行了整体的代码检查....
tp3.1里面, 由于没有使用namespace, 所以要使用org类库, 要使用import, 而tp3.2中, 使用了namespace, 所以就不用import, 而是用use...
tp中, 要给模板传递变量, 可以使用多个 语句, 分开传递多个变量, 并不是 只能传递一个变量, 也不必 把多个变量, 强迫的放到一个数组中来传递.
写代码, 首先要记代码.开始记代码
元素的标签就是前面的html元素:getElementByTagName('span'):
var tab_tit = document.getElementById('think_page_trace_tab_tit').getElementsByTagName('span');
var tab_cont = document.getElementById('think_page_trace_tab_cont').getElementsByTagName('div');
ThinkPHP的框架目录下:
除了Common, Conf,Lang, Library, Mode, Tpl目录外, 还包括一个授权文件license.txt, 一个logo图片logo.png, 一个框架的入口文件。
根目录下的Public目录是放: 项目的资源文件的,包括css,img, js等。
而ThinkPHP框架下的Tpl目录,是存放框架内的一些错误, 提示, 跳转信息的模板文件,包括: dispatch_jump.tpl, page_trace.tpl, think_exception.tpl
网站根目录的应用程序的入口文件是: /index.php
tp框架的入口文件是:ThinkPHP/ThinkPHP.php
其实, 写php文件, 也不大可能蒋php和html完全分离, 有时甚至很多时候, 需要将php和html混合书写,一个原则: 凡是属于php代码编程的内容,包括变量,大括号等放在php的括号中, 其他直接放在文件里。。。
thinkphp一句话疑难解决笔记 3的更多相关文章
- thinkphp一句话疑难解决笔记 2
php中的_ _call()方法? 它是php5后为对象 类 新增的一个自动方法. 它会监视类的其他方法的调用, 当调用类的不存在的方法时, 会自动调用类的__call方法. tp的 "命名 ...
- thinkphp一句话疑难解决笔记
URL_PATHINFO_DEPR, depr表示 网页路径"分隔符",用"-", 有利于seo,注意是从 sername/index.php(开始的)/hom ...
- ThinkPHP真正疑难问题笔记
如何选择线程安全版本还是非线程安全版本: http://www.cnblogs.com/Alight/p/3389113.html(看webserver处理请求时, 使用的是多线程的方式还是 多进程的 ...
- 1 环境搭建_及参考资料介绍_ASM驱动开发疑难解决
1 环境搭建 > 这里和 周壑老师不同:大家觉得哪中适合当前的物理机,就配置那种. 如下: win7 32 位: vs 2010; visualDDk 驱动项目插件: V A --- 代码高亮 ...
- thinkphp疑难解决4
关于文件上传所涉及到的php.ini 中的一些配置: (以当前要设置的关键字开头...) 是每个上传文件所允许的大小, 默认的 upload_max_filesize = 2M, 如果超过了2M,_P ...
- ThinkPHP中疑难笔记
不但要记住核心的东西, 还要记住 相关的 东西: 如php cli的版本是 5.6.14 bulit: sep 30, 2015 tp中, 通常说的系统就是框架; 项目就是 "应用程序&qu ...
- ueditor 编辑器再thinkphp中使用 解决转义问题
在前台common.php文件中加入下面的函数就可以解决了 <?php //取消thinkphp里面的转义 if (get_magic_quotes_gpc()) { function stri ...
- 本人遇到的spring事务之UnexpectedRollbackException异常解决笔记
本人最近在使用spring事务管理的过程中遇到如下异常,导致服务端抛出500给前端,让搞前端的哥们抱怨我心里着实不爽,前前后后折腾了近半个小时才得于解决,今天就做个笔记,以免日后又犯这个错误.好了,错 ...
- 关于thinkphp框架中模型笔记
模型这一块,感觉学习的不是很清楚,单独水一贴thinkphp中模型的学习笔记. 0x01 模型类简介 数据库中每一张表对应一个模型,类名就是表名,类里面的成员变量就是列名, 把一张表对应为一个类,其中 ...
随机推荐
- DOS下windows系统查看wifi密码
DOS下windows系统查看wifi密码 首先,按win+R键,win键如下 弹出框中输入cmd 在弹出界面输入 netsh wlan show profiles 你可以看到你链接过的所有wifi名 ...
- mysql语句查询练习
1.创建students表mysql> create table ...
- js form 表达关于onpress 的一个问题
<form id="search-form" method="get" action="/search"> <fields ...
- JSONP是如何工作的
我对这个问题的探究来源于一个需求: 当访问某个页面的时候,需要向另外一个网站报告一下这次访问的信息. 其实发一个跨域的请求就能大致实现这个需求.我们发跨域的例子其实很常见,例如请求一个第三方的图片.引 ...
- [LeetCode] Inorder Successor in BST 二叉搜索树中的中序后继节点
Given a binary search tree and a node in it, find the in-order successor of that node in the BST. No ...
- [LeetCode] Add Digits 加数字
Given a non-negative integer num, repeatedly add all its digits until the result has only one digit. ...
- [LeetCode] Shortest Word Distance III 最短单词距离之三
This is a follow up of Shortest Word Distance. The only difference is now word1 could be the same as ...
- html5 自定义标签取值
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Babel:JavaScript编译器
一.介绍: Babel是一个Javascript编译器,可以将ES6语法转换成ES5. 这意味着,你可以现在就用ES6编写程序,而不用担心现有环境是否支持.下面是一个例子: //转码前: input. ...
- 轻量级jQuery语法高亮代码高亮插件jQuery Litelighter。
<!DOCTYPE html><html><head><meta charset="UTF-8" /><title>jQ ...