PHP:空白页面,错误报告无法正常工作

时间:2011-12-06 14:23:05

标签: php error-handling

我正在进入一个空白页面,虽然我已经告诉PHP报告所有错误但我仍然没有得到任何让我相信它必须是语法错误。我找不到它是什么。

以下是我正在处理的脚本:

test.php的

<?php
ini_set('display_errors', '1');
require('database.php');

print("hello");

$config = new Config("lessons.db","data/");
$db = new Database($config, array('first', 'second', 'third', 'fourth'), true);

print_r($db->dumpToArray());
?>

database.php中

<?php
    class Config {
        private
            $_db
            $_file,
            $_directory,
            $_delimiter,
            $_columns;

        public function __construct(string $file, string $directory = null, string $delimiter = "|")  {
            $_db = $directory.$file;
            $_directory = $directory;
            $_delimiter = $delimiter;
        } 
        public function db() {
            return $_db;
        }
        public function delimiter() {
            return $_delimiter;
        }

    }       
    class Database {
        private
            $_config,
            $_columns,
            $_rows,
            $_pointer;

        public function __construct(Config $config, array $constants = null, boolean $caseInsensitive = false)  {
            $_config = $config;
            is_readable ($_config->db())
                or exit ("The database cannot be read");
            if(!is_null($constants))
                $this->defineColumns($constants, $caseInsensitive);
            return;
        } 

        private function connect(string $method) {
            if (!($_pointer = @fopen($_config->db(), $method)) or printf("Unable to connect to database");
        }

        private function disconnect() {
            fclose($_pointer);
        }

        private function defineColumns($constants, $caseInsensitive) {
            for (var $i=0;$i<count($constants);$i++)
                define($constants[i], $i, $caseInsensitive);                
        }

        public function dumpToArray() {
            $arrayDump = explode($_config->delimiter(), file($_config->db(), FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES));
            return $arrayDump;
        }

        public function getRowByValue($column, $value) {
            $this->connect('r');
            $rowNumber = 0;
            while (!feof($_Pointer)) {
                $row = explode($_config->delimiter(), fgets($dbPointer, 1024));
                if ($row[$column] == $value) {
                    $this->disconnect();
                    return $row;
                }
                $rowNumber++;
            }
            $this->disconnect();
            return false;
        }       
    }
?>

任何人都可以看到可能导致它的原因吗?

6 个答案:

答案 0 :(得分:2)

  

任何人都可以看到可能导致它的原因吗?

这是寻找错误的最错误和最低效的方式 你可以盯着你的代码多年,甚至要求其他人去做,但没有任何成功。

为什么不直接阅读确切的错误信息?
你走在正确的轨道上,但放弃了。

正如Flukey在评论中所说,你来检查错误日志,默认情况下是错误日志,它是网络服务器错误日志。

观察实际错误是纠正代码的唯一正确方法。

答案 1 :(得分:1)

乍一看......这不会飞

$db = new Database($config, ["first","second","third","fourth"], true);

您的数据库类需要一个数组

$db = new Database($config, array('first', 'second', 'third', 'fourth'), true);

答案 2 :(得分:1)

我认为require(database.php);应为require('database.php');

尝试更改它并查看是否有帮助

另外,你错过了分号

return $arrayDump

修改

好的,我不太确定,但尝试从函数的参数中删除转换。

因此...

public function __construct(Config $config, array $constants = null, boolean $caseInsensitive = false) 

将是

public function __construct($config, $constants = null, $caseInsensitive = false)  {

我在PHP中没有做太多的OOC,只是再拍一次。

答案 3 :(得分:1)

提示

如果您遇到语法错误,并且处于可以更改error_reporting / display_errors设置的唯一方法是在脚本本身中,您仍然可以使其正常工作。

诀窍是制作另一个没有语法错误的脚本,并在该脚本中设置您的配置选项,然后包含可疑的坏脚本。

<?php
error_reporting(-1); // show all
ini_set('display_errors', 1);
require 'file_with_parse_error.php';

但是,您通常应该能够在php.ini或webserver配置文件中更改这些设置。在任何情况下都应该有一个错误日志可供查看。

然后只需在网络浏览器中请求该新脚本的网址。

答案 4 :(得分:0)

php.ini中还有其他错误报告级别 - 您可能需要查看它们。

答案 5 :(得分:0)

由于您无法查看错误日志,因此请尝试在代码中抛出一堆打印语句,看看是什么行杀死了您的脚本。如果它在您的database.php脚本中被杀死,则在其中抛出一些打印件。

<?php
ini_set('display_errors', '1');
require('database.php');
print "Test1";
print("hello");
print "Test2";
$config = new Config("lessons.db","data/");
print "Test3";
$db = new Database($config, array('first', 'second', 'third', 'fourth'), true);
print "Test4";

print_r($db->dumpToArray());
?>