Reputation: 4914
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
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
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