解決ThinkPHP關閉調試模式時報錯的問題匯總


解決ThinkPHP關閉調試模式時報錯的問題匯總

案例一:

最近用ThinkPHP開發一個項目,本地開發測試完成上傳到服務器后,第一次打開正常,再刷新頁面時就出現 “頁面調試錯誤,無法找開頁面,請重試”的錯誤.

明明本地設置define(‘APP_DEBUG’, false) 運行沒點問題,怎么放到服務器上就出錯了昵?

baidu,Google還是沒有找到解決方案,突然發現項目APP_Name/Runtime/Cache目錄和APP_Name/Runtime/Logs目錄沒有可寫權限,果斷更改!

案例二:

ThinkPHP 將 APP_DEBUG 常量設置為 false 后出現了類似下面的問題:

復制代碼代碼如下:
Parse error: syntax error, unexpected T_STRING in E:\PHPnow\htdocs\ojbak\Runtime\~app.php on line 1

或者直接報”服務器錯誤”, 怎么辦?
這個和 PHP 有關系,在 php.ini 里修改配置

復制代碼代碼如下:
short_open_tag = On

因為 app.class.php 里面的 build 方法:
當開啟了調試模式后,會獲取相關文件的內容 然后重新組合成文件 這個時候是會自動加上 的
也就是你看到的 ~app.php 文件了
但是當你不開啟調試模式后,會每次都會加載相關的文件,這樣子,你的錯誤就暴露出來了。

案例三:

在thinkphp中將APP_DEBUG設置為false之后,數據查詢(select, find等等)總是顯示第一條。。但是把APP_DEBUG設置為true之后,就正常了。。這是為什么?有什么解決方案嗎?

正常來說,APP_DEBUG是調試模式,放到線上環境,盡量要設置為false的。。

自己找一個select查詢,在關閉debug的情況下,用寫文件的方式調試下查詢后生成的sql。

以上所述就是本文的全部內容了,希望大家能夠喜歡。

裝載地址:http://www.jb51.net/article/64552.htm

ThinkPHP3.2.2調試模式下正常訪問,關閉調試模式,部署時出現刪出緩存第一次沒錯,第二次開始錯誤。

我碰到的錯誤如下:

ThinkPHP3.2.2 { Fast & Simple OOP PHP Framework } — [ WE CAN DO IT JUST THINK ]

上圖:

看到網上大多數人都碰到,但沒很好解決,確實很頭痛,沒辦法只能去閱讀源碼。在同事的幫助下,就愉快地去翻源,看框架執行流程:

1.從入口文件開始:index.php  里面有這句(require ‘./ThinkPHP/ThinkPHP.php’;),跳到ThinkPHP.php;

2.ThinkPHP.php 里面的96行:Think\Think::start();可以看到,跑這函數里面去了,跳到Think.class.php;

3.Think.class.php 因為是部署模式,所以執行到里面的42行Storage::load($runtimefile);發現沒法跳了。直接去找ThinkPHP/Library/Storage.class.php;

4.Storage.class.php; 源碼:static public function connect($type=’File’,$options=array()) {
$class  =   ‘Think\\Storage\\Driver\\’.ucwords($type);
self::$handler = new $class($options);
}

我們看到,它去取到了一個叫“Flie”的文件,找了下在找到了它ThinkPHP/Library/Storage/File.class.php,打開看看。

5.File.class.php 里面果然有第3步的load方法,在代碼75行。public function load($_filename,$vars=null){
if(!is_null($vars))
extract($vars, EXTR_OVERWRITE);
include $_filename;
}

最后鎖定,錯誤是發生在這句代碼。

6.可以測試下結果:(1).

public function load($_filename,$vars=null){
if(!is_null($vars))
extract($vars, EXTR_OVERWRITE);

echo $_filename;
die();
include $_filename;
}

結果如下:

(2)刪掉緩Runtime存再測.

public function load($_filename,$vars=null){
if(!is_null($vars))
extract($vars, EXTR_OVERWRITE);

include $_filename;

echo $_filename;
die();
}

結果如下:

7.第6步結果可以看到,問題就出在include 這個文件./Application/Runtime/common~runtime.php時出錯了。為什么呢?

文件如下:

8.在同事幫助下,終於知道原因,如圖:是因為我Common/Common文件夾下的function.php引入了一個user.function.php路徑有問題。

如果直接用require_once ‘user.function.php’;這樣在部署情況下common~runtime.php就沒辦法正確解析,之前調試模式是沒問題的。

最后我們在導入文件的時候加上正確路徑就可以了:如圖改成require_once APP_PATH.’Common/Common/’user.function.php’;,問題到這里就解決了。

最后再說明一點:記得關閉調試模式,要把Runtime文件夾刪除,到時測試成功通過。

轉載地址:http://blog.csdn.net/u012728971/article/details/47152745


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM