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)數據庫沒開

其他亂七八糟的錯誤
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章