我正在进入一个空白页面,虽然我已经告诉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;
}
}
?>
任何人都可以看到可能导致它的原因吗?
答案 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());
?>