關於php報錯的一個疑問

來源:互聯網
上載者:User
我是用的是phpstudy2014的套件
但是我在部分地方做了修改使其能夠同時相容php5.3和5.2.7版本
修改地方為 vhosts.conf

LoadFile "D:/phpStudy/php52/php5ts.dll"LoadModule php5_module "D:/phpStudy/php52/php5apache2_4.dll"PHPIniDir "D:/phpStudy/php52/"LoadFile "D:/phpStudy/php52/libmysql.dll"LoadFile "D:/phpStudy/php52/libmcrypt.dll"    SetHandler application/x-httpd-php    DocumentRoot "F:\github\xinyupingtai"    ServerName d.hainuo.info    ServerAlias hainuo.info    Options FollowSymLinks ExecCGI    AllowOverride All    Order allow,deny    Allow from all

這個是5.2的設定檔,之前因為使用了

error_reporting(0);

將所有錯誤屏蔽掉,但是因為一些原因(後來才發現是我使用了一個未引入的方法)導致程式輸出空白,於是我將錯誤報表改為error_reporting(E_ALL);但是我發現結果令我很崩潰,百度瀏覽器直接團出錯誤頁,ie11給我的還是空白頁。

類的匯入原理是

function __autoload($name){    $class_file = d('./class/' . $name . '.php');    if (file_exists($class_file)) {        include($class_file);    } else {        if (strpos($name, '_') !== false) {            $name = strtr($name, '_', '.');            if (!loadLib($name)) {                //exit('class '.$name.' not include');                return false;            }        } else {            //exit('class '.$name.' not include');            return false;        }    }}function loadLib($libName, $returnClass = false){    global $_libraryLoadLog;    if (!isset($_libraryLoadLog[$libName])) {        $libPath = WROOT . 'class' . D . strtr($libName, '.', D) . '.php';        if (file_exists($libPath)) {            if (($f = strrpos($libName, '.')) !== false) {                $libP = substr($libName, 0, $f) . '.'; //library parent            } else {                $libP = '';            }            include($libPath);            $_libraryLoadLog[$libName] = strtr($libName, '.', '_');        } else {            $_libraryLoadLog[$libName] = '';        }    }    if ($_libraryLoadLog[$libName]) {        if ($returnClass) {            $className = $_libraryLoadLog[$libName];            $class = new $className();            return $class;        } else {            return true;        }    }    return false;}

我是用了一個方法是 $dom=file_get_html(url);
此方法是simple_html_dom 類中內建的
simpe html dom類連結 點擊可以查看這個類的原始碼
當我使用var_dump一點點的測試出原因後才明白原來是我的那個dom類沒有匯入

把這個問題寫在這裡,是想問各位大大,
1、遇到這種情況,你們是怎麼偵錯工具的?
2、為什麼指定了輸出錯誤,卻仍然是空白,即php不報錯呢?
3、如果第二條不好回答,可否給解釋一下php的報錯原理

6.27修改
因為樓下提供的方法並不怎麼適用
一氣之下我將error_reporting(E_ALL);注釋掉,媽呀,竟然報錯了

Parse error: syntax error, unexpected '}' in F:\*****\lib\dialog.php on line 1018

不過還是感謝各位對我的協助。

回複內容:

我是用的是phpstudy2014的套件
但是我在部分地方做了修改使其能夠同時相容php5.3和5.2.7版本
修改地方為 vhosts.conf

LoadFile "D:/phpStudy/php52/php5ts.dll"LoadModule php5_module "D:/phpStudy/php52/php5apache2_4.dll"PHPIniDir "D:/phpStudy/php52/"LoadFile "D:/phpStudy/php52/libmysql.dll"LoadFile "D:/phpStudy/php52/libmcrypt.dll"    SetHandler application/x-httpd-php    DocumentRoot "F:\github\xinyupingtai"    ServerName d.hainuo.info    ServerAlias hainuo.info    Options FollowSymLinks ExecCGI    AllowOverride All    Order allow,deny    Allow from all

這個是5.2的設定檔,之前因為使用了

error_reporting(0);

將所有錯誤屏蔽掉,但是因為一些原因(後來才發現是我使用了一個未引入的方法)導致程式輸出空白,於是我將錯誤報表改為error_reporting(E_ALL);但是我發現結果令我很崩潰,百度瀏覽器直接團出錯誤頁,ie11給我的還是空白頁。

類的匯入原理是

function __autoload($name){    $class_file = d('./class/' . $name . '.php');    if (file_exists($class_file)) {        include($class_file);    } else {        if (strpos($name, '_') !== false) {            $name = strtr($name, '_', '.');            if (!loadLib($name)) {                //exit('class '.$name.' not include');                return false;            }        } else {            //exit('class '.$name.' not include');            return false;        }    }}function loadLib($libName, $returnClass = false){    global $_libraryLoadLog;    if (!isset($_libraryLoadLog[$libName])) {        $libPath = WROOT . 'class' . D . strtr($libName, '.', D) . '.php';        if (file_exists($libPath)) {            if (($f = strrpos($libName, '.')) !== false) {                $libP = substr($libName, 0, $f) . '.'; //library parent            } else {                $libP = '';            }            include($libPath);            $_libraryLoadLog[$libName] = strtr($libName, '.', '_');        } else {            $_libraryLoadLog[$libName] = '';        }    }    if ($_libraryLoadLog[$libName]) {        if ($returnClass) {            $className = $_libraryLoadLog[$libName];            $class = new $className();            return $class;        } else {            return true;        }    }    return false;}

我是用了一個方法是 $dom=file_get_html(url);
此方法是simple_html_dom 類中內建的
simpe html dom類連結 點擊可以查看這個類的原始碼
當我使用var_dump一點點的測試出原因後才明白原來是我的那個dom類沒有匯入

把這個問題寫在這裡,是想問各位大大,
1、遇到這種情況,你們是怎麼偵錯工具的?
2、為什麼指定了輸出錯誤,卻仍然是空白,即php不報錯呢?
3、如果第二條不好回答,可否給解釋一下php的報錯原理

6.27修改
因為樓下提供的方法並不怎麼適用
一氣之下我將error_reporting(E_ALL);注釋掉,媽呀,竟然報錯了

Parse error: syntax error, unexpected '}' in F:\*****\lib\dialog.php on line 1018

不過還是感謝各位對我的協助。

要想讓 php 把錯誤輸出到網頁,需要把 php.ini 的 display_errors = On。這個選項僅僅用於本地調試,千萬不要線上上網站上開啟。

php.ini 裡面的 error_log = /your/log/path 選項可以控制錯誤記錄檔輸出到哪個檔案,自己設定到一個方便查看的地方之後就可以不斷去查看了。

一般調試錯誤就是用錯誤記錄檔結合自己輸出的 log,當然,如果在本地跑還可以用 Zend Studio IDE 的各種調試功能。

if (!ini_get('display_errors')) {    ini_set('display_errors', true);}
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.