2011-12-06 52 views
0

我正在運行到一個空白頁面,雖然我告訴PHP報告所有錯誤,但我仍然沒有得到任何信息,導致我相信它必須是語法錯誤。我找不到它是什麼。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

看看Apache日誌... – Flukey

+0

我想'php -l '只是爲了確保它不是第一個語法問題。 – hafichuk

+0

@Flukey無法訪問他們,我在一個奇怪的公司成立。 –

回答

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,但只是走一個鏡頭。

+0

你是對的+1,但仍然有東西壓制它。 –

+0

我剛剛發現了一個缺失的分號 – nine7ySix

+0

哇謝謝鷹先生的眼睛,儘管仍然是白色的篩選。更新源代碼。 –

1

乍看之下......這不會飛

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

您的數據庫類期待一個陣列

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

我想他是想製作一個數組 – jprofitt

+0

@jprofitt你說得對。讀完他的數據庫課後,我意識到了。 –

+0

謝謝,一直在做很多actionscript,並得到了語法混淆+1,但它仍然無法正常工作。 –

2

任何人都可以看到什麼可能導致它?

這是最錯誤和低效的方式尋找錯誤。
你可以盯着你的代碼長達數年,甚至要求其他人這樣做,但沒有任何成功。

爲什麼不只是閱讀確切的錯誤信息?
你在正確的軌道上,但放棄了。

由於Flukey在評論中說,你的來檢查錯誤日誌,默認情況下,它是ame作爲web服務器錯誤日誌。

觀察實際的錯誤是糾正代碼的唯一正確方法。

+0

我通常會,但在我目前的環境中,我不能,它可能不對,但這是我現在要做的。 –

+1

不要告訴我你沒有服務器可用於運行此錯誤報告的代碼。 –

+0

已上傳到另一臺服務器(doh,杜!),並正在通過錯誤現在ta我的方式。 –

0

在php.ini中還有其他錯誤報告級別 - 您可能需要查看它們。

+0

我已將它設置爲顯示所有錯誤 –

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()); 
?> 
+0

爲什麼downvote?如果你看不到任何錯誤,這是一個合法的調試方式。 – Catfish

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配置文件中更改這些設置。在任何情況下都應該有一個錯誤日誌可供查看。

然後,只需在您的Web瀏覽器中爲該新腳本請求url。