Thinkphp学习中走过的一些坑(更新)

1.使用翻页类的时候,不能保持查询条件翻页

翻页类本身有第三个参数,分页跳转的参数

* @param array $totalRows  总的记录数

* @param array $listRows  每页显示记录数

* @param array $parameter  分页跳转的参数

1.get方式的话,不需要做任何设置,参数自动跟着URL

2.post需要在控制器里把参数写入到分页类,然后生成对应的分页代码。

(以前试过查询时把条件存进session,翻页时用保存的值作为查询条件,并判断条件对session进行更新,但那时没弄成)


2.关于alert后刷新问题

如果是点击按钮后刷新,按钮类型必须是botton才不会刷新


3.在view页面作判断

在TP中{if xxxx}   {elseif condition=”xxx”/}

后面必须加一个/


4.Thinkphp中 Volist 乱码问题

(1)页面的编码设置错误

(2)输出数组格式错误,比如是索引数组却用键值输出

find 查询出来的值,是一维数组

select 查询出来的值,是二维数组,第一层为索引数组,第二层为关联数组


 

5.__PUBLIC__,图片存放地址在数据库

__PUBLIC__这种常量是需要通过php内核解析的,将其存进数据库,先解析你的自定义变量后,就不会去解析取出来的__PUBLIC__了,所以不应把常量存数据库

6.Lib 和TPl 中模版的不同,前者是实现的模版 php ,后者是显示的模版html

 

dirname(__FILE__) php中定义了一个很有用的常数,即__file__这个内定常数是当前php程序的就是完整路径(路径+文件名)。即使这个文件被其他文件引用(includerequire)__file__始终是它所在文件的完整路径,而不是引用它的那个文件完整路径。请看下面例子:/home/data/demo/test/a.php<?php$the_full_name=__FILE__;$the_dir=dirname(__FILE__);echo $the_full_name; //返回/home/data/demo/test/a.phpecho $the_dir; //返回/home/data/demo/test?>home/data/demo/b.php <?php include "test/a.php";echo $the_full_name; //返回/home/data/demo/echo $the_dir; //返回/home/data/demo/test而不是/home/data/demo/?>test/a.php 而不是/home/data/demo/b.php简单地说:__FILE__ 返回当前路径+文件名dirname(__FILE__) 返回当前文件路径的路径部分dirname(dirname(__FILE__));得到的是文件上一层目录名(不含最后一个“/”号)例如,当前文件是/home/data/demo/test.php ,则__FILE__ 得到的就是完整路径 /home/data/demo/test.php ,而

dirname(__FILE__)得到路径部分/home/data/demo (后面没有“/”号)

7.命名范围的使用

<?php

class UserModel extends CommonModel{

protect $_scope=array(

          /*命名范围的标识名=>array(

'属性'=>'值',

支持的方法有:where limit field order table page having group disinct),*/

);

}

/*'命名范围的标识名'=>array(

          '属性'=>'值',

          支持的方法有:where limitfield order table page having goup distinct

    )*/

先在模型类中设置成一个数组并在常用的方法

然后在控制器中调用如where field order table pagehaving group distinct中使用

后面调用到的sql筛选条件会将前面的覆盖,scope可以和普通连贯方法混合使用

   如多次调用limit,只有最后一条limit生效

优点 一次定义多次调用

        项目中项目主管定好名称后可以让多人分工合作时CURD操作不会混乱

8.过滤查询之distinct方法

语法 distinct方法用来过滤相同信息,属性为true过滤和false不过滤

例子 $data=M('user')->distinct(true)->field('score')->order('scoreasc')->select();

9.union()用于合并两个或多个 SELECT 语句的结果集

获取user表 的字段,必须与 union() 中获取的字段相同,对应字段的类型也要相同,顺序也必须相同.

union() 的第二个参数默认 =false ,表示不会将重复数据隐藏; =ture ,表示将会隐藏重复数据

union() 可以进行连贯操作

字符串方法:

$data=   M('user')->field('user_name,id')

               ->union('select user_name,id from wp_info');

 

数组方法:

$data=   M('user')->field('user_name’)->

               union(array('field'='user_name','table'='wp_info'),true);

10.多表查询join()支持字符串和数组且join()中的表都必须加前缀(写全称)

字符串方式: M(‘user')->join('mk_userinfo Onmk_userinfo.user_id=mk_user.id')->select();

Left join 左关联

Right join 右关联

inner join 内联(ThinkPHP3.2 默认采用 INNER JOIN 方式)

M('user')->join('Right join mk_userinfo Onmk_userinfo.user_id=mk_user.id')->select();

多表关联添加join

数组方式: M('user')->join(array('mk_userinfo On mk_userinfo.user_id=mk_user.id'))-select();

11.使用phpexcle导入数据库时,数据量过大造成的问题

(1)导入速度过慢,以致于超过原本的30秒

(2)phpexcle大数据量情况下内存溢出

解决方法:

设置导入时长:

(1)修改php的配置文件 php.ini 文件找到 php.ini 这个文件,然后在这个文件中找到:max_execution_time = 30 ;这一行,将数字 30 设置成你想要的值,单位是秒。(也可以直接修改为:max_execution_time=0;//无限制)注意这样修改完后需要重启一下服务器。 (2)使用 ini_set() 函数对于那些不能够修改 php.ini 的朋友来说,你可以使用ini_set()这个函数来改变你的最大执行时间限制值,在程序的顶部加入如下代码:ini_set('max_execution_time','100');以上设置的为100秒,你也可以设置为0,那么就是不限制执行的时间。 (3)使用set_time_limit() 函数

在程序的顶部加入:set_time_limit(100);则表示最大执行时间设置为了100秒,当然也可以将参数设置为0,意思同上。set_time_limit 函数特别说明:void set_time_limit ( int $seconds ) 该函数的作用是设置允许脚本运行的时间,单位为秒。如果超过了此设置,脚本返回一个致命的错误。默认值为30秒,或者是在php.ini的max_execution_time被定义的值,如果此值存在。当此函数被调用时, set_time_limit()会从零开始重新启动超时计数器。换句话说,如果超时默认是30秒,在脚本运行了了25秒时调用 set_time_limit(20),那么,脚本在超时之前可运行总时间为45秒。当php运行于安全模式下时,此功能不能生效。除了关闭安全模式(在 php.ini 中将 safe_mode 设置为 off)或改变 php.ini 中的时间限制,没有别的办法。案例:如果没有打开安全模式,设置程序运行时间为25秒。

此部分转载自:http://www.kokojia.com/article/4752.html

在在不进行特殊设置的情况下,phpExcel将读取的单元格信息保存在内存中,我们可以通过PHPExcel_Settings::setCacheStorageMethod()来设置不同的缓存方式,已达到降低内存消耗的目的!1、将单元格数据序列化后保存在内存中PHPExcel_CachedObjectStorageFactory::cache_in_memory_serialized; 2、将单元格序列化后再进行Gzip压缩,然后保存在内存中PHPExcel_CachedObjectStorageFactory::cache_in_memory_gzip; 3、缓存在临时的磁盘文件中,速度可能会慢一些PHPExcel_CachedObjectStorageFactory::cache_to_discISAM;4、保存在php://tempPHPExcel_CachedObjectStorageFactory::cache_to_phpTemp; 5、保存在memcache中

PHPExcel_CachedObjectStorageFactory::cache_to_memcache

$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_memcache;  
  $cacheSettings = array( 'memcacheServer'  => 'localhost',  
                          'memcachePort'    => 11211,  
                          'cacheTime'       => 600  
                        );  
PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);

注意是加在new PHPExcel() 前面:如下

import("Org.Util.PHPExcel.CachedObjectStorageFactory.php")
$PHPExcel = new \PHPExcel_CachedObjectStorageFactory;
$cacheMethod = $PHPExcel ::cache_to_phpTemp;
$cacheSettings = array('memoryCacheSize'=>'16MB');
$Settings = new \PHPExcel_Settings;
$Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);

$objReader =  new \PHPExcel_IOFactory;

转载自:https://www.cnblogs.com/myx/archive/2013/05/20/phpExcel-setCache.html


12.ajax失效

(1)数据连接错误

(2)数据库没开

其他乱七八糟的错误
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值