SpaceDust__
SpaceDust__

Reputation: 4914

Can't display errors on php, just white screen

I have amazon ec2 instance running Apache and running a lot of php scripts. But there is one php script that doesnt run or gives errors.

for example following code displays error:

<?php

    error_reporting(E_ALL); ini_set('display_errors', '1');
    echo "Hello world";
    owieufpowiejf

?>

Hello world Notice: Use of undefined constant owieufpowiejf - assumed 'owieufpowiejf' in /var/www/html/scripts/hello.php on line

But this script doesnt give any error or runs the code correctly, it just displays white screen

     <?php

    error_reporting(E_ALL); 
    ini_set('display_errors', '1');

    echo '<p>Hello World</p>';  

    $foo = new Foo;
    $foo->init();
    $foo->select();
    // Helper method to get a string description for an HTTP status code
// From http://www.gen-x-design.com/archives/create-a-rest-api-with-php/ 
function getStatusCodeMessage($status)
{
    // these could be stored in a .ini file and loaded
    // via parse_ini_file()... however, this will suffice
    // for an example
    $codes = Array(
        100 => 'Continue',
        101 => 'Switching Protocols',
        200 => 'OK',
        201 => 'Created',
        202 => 'Accepted',
        203 => 'Non-Authoritative Information',
        204 => 'No Content',
        205 => 'Reset Content',
        206 => 'Partial Content',
        300 => 'Multiple Choices',
        301 => 'Moved Permanently',
        302 => 'Found',
        303 => 'See Other',
        304 => 'Not Modified',
        305 => 'Use Proxy',
        306 => '(Unused)',
        307 => 'Temporary Redirect',
        400 => 'Bad Request',
        401 => 'Unauthorized',
        402 => 'Payment Required',
        403 => 'Forbidden',
        404 => 'Not Found',
        405 => 'Method Not Allowed',
        406 => 'Not Acceptable',
        407 => 'Proxy Authentication Required',
        408 => 'Request Timeout',
        409 => 'Conflict',
        410 => 'Gone',
        411 => 'Length Required',
        412 => 'Precondition Failed',
        413 => 'Request Entity Too Large',
        414 => 'Request-URI Too Long',
        415 => 'Unsupported Media Type',
        416 => 'Requested Range Not Satisfiable',
        417 => 'Expectation Failed',
        500 => 'Internal Server Error',
        501 => 'Not Implemented',
        502 => 'Bad Gateway',
        503 => 'Service Unavailable',
        504 => 'Gateway Timeout',
        505 => 'HTTP Version Not Supported'
    );

    return (isset($codes[$status])) ? $codes[$status] : '';
}

// Helper method to send a HTTP response code/message
 function sendResponse($status = 200, $body = '', $content_type = 'text/html')
{
    $status_header = 'HTTP/1.1 ' . $status . ' ' . getStatusCodeMessage($status);
    header($status_header);
    header('Content-type: ' . $content_type);
    echo $body;
}
    class Foo {

      //select email if does not exists insert
      public function select() {


        $event_id = $_POST["event_id"]; 
        $user_id = $_POST["user_id"];

        $isrecordExist=1; //true 

        //echo "variables will use in query : ", $event_id ,  $user_id "\n";

        $stmt = $this->db->prepare("SELECT notification_id FROM NOTIFICATIONS WHERE user_id = ? AND event_id = ? AND (status=1 OR status=2)");
        if ( !$stmt ) {
            //echo "prepare failed\n";
            //echo "error: ", $this->db->error, "\n";
            sendResponse(500, $stmt->error);
            return false;
        }

        $rc = $stmt->bind_param("ss", $user_id,$event_id);
        if ( !$rc ) {
             //echo "bind_param failed\n";
             //echo "error: ", $stmt->error, "\n";
             sendResponse(500, $stmt->error);
             return false;
        }

        $rc=$stmt->execute();
        if ( !$rc ) {
            //echo "execute failed\n";
            //echo "error: ", $stmt->error, "\n";
            sendResponse(500, $stmt->error);
            return false;
        }

        $rc = $stmt->bind_result($result);
        if ( !$rc ) {
            //echo "bind_result failed\n";
            //echo "error: ", $stmt->error, "\n";
            sendResponse(500, $stmt->error);
            return false;
        }

        $rc = $stmt->fetch();
        if ( !$rc ) {
          //echo "no such record\n";
          $isrecordExist=0; //false does not exists
        }
        else {
          //echo 'result: ', $result, "\n";
          sendResponse(403, 'User Already Invited or Pending Request');
          return false;
        }
        $stmt->close();
    $this->db->close();
      }
      //connection initialize to database
      public function init() {


        $this->db = new mysqli('xxxxx', 'xxxxx', 'xxxxx', 'xxxxx');

        if ($this->db->connect_error) {
          die('connection failed: ' . $this->db->connect_error);
          sendResponse(503, 'Connection to DB Failed');
          return false;
        }

      }

        }

 ?>

I see that ;error_log = php_errors.log in php.ini file but can't find php_errors.log file

I just use a text editor to write the php code and test it on server.

Any idea why I can see any thing, even hello world output?

Upvotes: 0

Views: 478

Answers (2)

bwoebi
bwoebi

Reputation: 23787

If you have a parse error, you have to set your ini settings somewhere else (user.ini, .htaccess, php.ini). The problem is here that the statements setting your ini values will never be executed and so, at the point where PHP aborts because of the parse error, the ini value are still these set in the php.ini.

Your first example clearly will fail in a parse error. (unexpected end of file) There's a semicolon missing behind your random string.

In your latter example there's a } missing at the end (the opening curly brace was here, commented out: function getStatusCodeMessage($status){//status code in it}). (also unexpected end of file)

Upvotes: 0

Jessica
Jessica

Reputation: 7005

The ; in front of that error log line is a comment. The problem is you don't have error reporting turned on in your ini, and you have a fatal parse error. PHP can't render the error with display_errors when you have a parse error. It's better to update the error reporting in the php.ini

Upvotes: 1

Related Questions