Problem with php on VPS

I have VPS with CentOS-6 OS installed (PHP Version 5.3.3). I tried to install php script on it, and it gives me error:

A PHP Error was encountered
Severity: Warning

Message: date(): It is not safe to rely on the system’s timezone settings. You are required to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected ‘Europe/Moscow’ for ‘MSD/4.0/DST’ instead
Filename: helpers/date_helper.php
Line Number: 94

I had time to install this script on free and premium shared hosting providers, and it worked fine. So I may think it is problem with php configuration. ???

You need to set timezone explicitly in your php.ini (or in your code)
For php.ini, add this line:

date.timezone = "America/New_York"

List of supported timezones is here.

I added this line to the php.ini and I got HTTP 500 error.

Code of date_helper.php :
[php]<?php if ( ! defined(‘BASEPATH’)) exit(‘No direct script access allowed’);
/**

// ------------------------------------------------------------------------

/**

// ------------------------------------------------------------------------

/**

  • Get “now” time

  • Returns time() or its GMT equivalent based on the config file preference

  • @access public

  • @return integer
    */
    if ( ! function_exists(‘now’))
    {
    function now()
    {
    $CI =& get_instance();

     if (strtolower($CI->config->item('time_reference')) == 'gmt')
     {
     	$now = time();
     	$system_time = mktime(gmdate("H", $now), gmdate("i", $now), gmdate("s", $now), gmdate("m", $now), gmdate("d", $now), gmdate("Y", $now));
    
     	if (strlen($system_time) < 10)
     	{
     		$system_time = time();
     		log_message('error', 'The Date class could not set a proper GMT timestamp so the local time() value was used.');
     	}
    
     	return $system_time;
     }
     else
     {
     	return time();
     }
    

    }
    }

// ------------------------------------------------------------------------

/**

  • Convert MySQL Style Datecodes

  • This function is identical to PHPs date() function,

  • except that it allows date codes to be formatted using

  • the MySQL style, where each code letter is preceded

  • with a percent sign: %Y %m %d etc…

  • The benefit of doing dates this way is that you don’t

  • have to worry about escaping your text letters that

  • match the date codes.

  • @access public

  • @param string

  • @param integer

  • @return integer
    */
    if ( ! function_exists(‘mdate’))
    {
    function mdate($datestr = ‘’, $time = ‘’)
    {
    if ($datestr == ‘’)
    return ‘’;

     if ($time == '')
     	$time = now();
     
     $datestr = str_replace('%\\', '', preg_replace("/([a-z]+?){1}/i", "\\\\\\1", $datestr));
     return date($datestr, $time);
    

    }
    }

// ------------------------------------------------------------------------

/**

  • Standard Date

  • Returns a date formatted according to the submitted standard.

  • @access public

  • @param string the chosen format

  • @param integer Unix timestamp

  • @return string
    */
    if ( ! function_exists(‘standard_date’))
    {
    function standard_date($fmt = ‘DATE_RFC822’, $time = ‘’)
    {
    $formats = array(
    ‘DATE_ATOM’ => ‘%Y-%m-%dT%H:%i:%s%Q’,
    ‘DATE_COOKIE’ => ‘%l, %d-%M-%y %H:%i:%s UTC’,
    ‘DATE_ISO8601’ => ‘%Y-%m-%dT%H:%i:%s%O’,
    ‘DATE_RFC822’ => ‘%D, %d %M %y %H:%i:%s %O’,
    ‘DATE_RFC850’ => ‘%l, %d-%M-%y %H:%m:%i UTC’,
    ‘DATE_RFC1036’ => ‘%D, %d %M %y %H:%i:%s %O’,
    ‘DATE_RFC1123’ => ‘%D, %d %M %Y %H:%i:%s %O’,
    ‘DATE_RSS’ => ‘%D, %d %M %Y %H:%i:%s %O’,
    ‘DATE_W3C’ => ‘%Y-%m-%dT%H:%i:%s%Q’
    );

     if ( ! isset($formats[$fmt]))
     {
     	return FALSE;
     }
    
     return mdate($formats[$fmt], $time);
    

    }
    }

// ------------------------------------------------------------------------

/**

  • Timespan

  • Returns a span of seconds in this format:

  • 10 days 14 hours 36 minutes 47 seconds

  • @access public

  • @param integer a number of seconds

  • @param integer Unix timestamp

  • @return integer
    */
    if ( ! function_exists(‘timespan’))
    {
    function timespan($seconds = 1, $time = ‘’)
    {
    $CI =& get_instance();
    $CI->lang->load(‘date’);

     if ( ! is_numeric($seconds))
     {
     	$seconds = 1;
     }
    
     if ( ! is_numeric($time))
     {
     	$time = time();
     }
    
     if ($time <= $seconds)
     {
     	$seconds = 1;
     }
     else
     {
     	$seconds = $time - $seconds;
     }
     
     $str = '';
     $years = floor($seconds / 31536000);
    
     if ($years > 0)
     {	
     	$str .= $years.' '.$CI->lang->line((($years	> 1) ? 'date_years' : 'date_year')).', ';
     }	
    
     $seconds -= $years * 31536000;
     $months = floor($seconds / 2628000);
    
     if ($years > 0 OR $months > 0)
     {
     	if ($months > 0)
     	{	
     		$str .= $months.' '.$CI->lang->line((($months	> 1) ? 'date_months' : 'date_month')).', ';
     	}	
    
     	$seconds -= $months * 2628000;
     }
    
     $weeks = floor($seconds / 604800);
    
     if ($years > 0 OR $months > 0 OR $weeks > 0)
     {
     	if ($weeks > 0)
     	{	
     		$str .= $weeks.' '.$CI->lang->line((($weeks	> 1) ? 'date_weeks' : 'date_week')).', ';
     	}
     
     	$seconds -= $weeks * 604800;
     }			
    
     $days = floor($seconds / 86400);
    
     if ($months > 0 OR $weeks > 0 OR $days > 0)
     {
     	if ($days > 0)
     	{	
     		$str .= $days.' '.$CI->lang->line((($days	> 1) ? 'date_days' : 'date_day')).', ';
     	}
    
     	$seconds -= $days * 86400;
     }
    
     $hours = floor($seconds / 3600);
    
     if ($days > 0 OR $hours > 0)
     {
     	if ($hours > 0)
     	{
     		$str .= $hours.' '.$CI->lang->line((($hours	> 1) ? 'date_hours' : 'date_hour')).', ';
     	}
     
     	$seconds -= $hours * 3600;
     }
    
     $minutes = floor($seconds / 60);
    
     if ($days > 0 OR $hours > 0 OR $minutes > 0)
     {
     	if ($minutes > 0)
     	{	
     		$str .= $minutes.' '.$CI->lang->line((($minutes	> 1) ? 'date_minutes' : 'date_minute')).', ';
     	}
     
     	$seconds -= $minutes * 60;
     }
    
     if ($str == '')
     {
     	$str .= $seconds.' '.$CI->lang->line((($seconds	> 1) ? 'date_seconds' : 'date_second')).', ';
     }
     	
     return substr(trim($str), 0, -1);
    

    }
    }

// ------------------------------------------------------------------------

/**

  • Number of days in a month

  • Takes a month/year as input and returns the number of days

  • for the given month/year. Takes leap years into consideration.

  • @access public

  • @param integer a numeric month

  • @param integer a numeric year

  • @return integer
    */
    if ( ! function_exists(‘days_in_month’))
    {
    function days_in_month($month = 0, $year = ‘’)
    {
    if ($month < 1 OR $month > 12)
    {
    return 0;
    }

     if ( ! is_numeric($year) OR strlen($year) != 4)
     {
     	$year = date('Y');
     }
    
     if ($month == 2)
     {
     	if ($year % 400 == 0 OR ($year % 4 == 0 AND $year % 100 != 0))
     	{
     		return 29;
     	}
     }
    
     $days_in_month	= array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
     return $days_in_month[$month - 1];
    

    }
    }

// ------------------------------------------------------------------------

/**

  • Converts a local Unix timestamp to GMT

  • @access public

  • @param integer Unix timestamp

  • @return integer
    */
    if ( ! function_exists(‘local_to_gmt’))
    {
    function local_to_gmt($time = ‘’)
    {
    if ($time == ‘’)
    $time = time();

     return mktime( gmdate("H", $time), gmdate("i", $time), gmdate("s", $time), gmdate("m", $time), gmdate("d", $time), gmdate("Y", $time));
    

    }
    }

// ------------------------------------------------------------------------

/**

  • Converts GMT time to a localized value

  • Takes a Unix timestamp (in GMT) as input, and returns

  • at the local value based on the timezone and DST setting

  • submitted

  • @access public

  • @param integer Unix timestamp

  • @param string timezone

  • @param bool whether DST is active

  • @return integer
    */
    if ( ! function_exists(‘gmt_to_local’))
    {
    function gmt_to_local($time = ‘’, $timezone = ‘UTC’, $dst = FALSE)
    {
    if ($time == ‘’)
    {
    return now();
    }

     $time += timezones($timezone) * 3600;
    
     if ($dst == TRUE)
     {
     	$time += 3600;
     }
    
     return $time;
    

    }
    }

// ------------------------------------------------------------------------

/**

  • Converts a MySQL Timestamp to Unix

  • @access public

  • @param integer Unix timestamp

  • @return integer
    */
    if ( ! function_exists(‘mysql_to_unix’))
    {
    function mysql_to_unix($time = ‘’)
    {
    // We’ll remove certain characters for backward compatibility
    // since the formatting changed with MySQL 4.1
    // YYYY-MM-DD HH:MM:SS

     $time = str_replace('-', '', $time);
     $time = str_replace(':', '', $time);
     $time = str_replace(' ', '', $time);
    
     // YYYYMMDDHHMMSS
     return  mktime(
     				substr($time, 8, 2),
     				substr($time, 10, 2),
     				substr($time, 12, 2),
     				substr($time, 4, 2),
     				substr($time, 6, 2),
     				substr($time, 0, 4)
     				);
    

    }
    }

// ------------------------------------------------------------------------

/**

  • Unix to “Human”

  • Formats Unix timestamp to the following prototype: 2006-08-21 11:35 PM

  • @access public

  • @param integer Unix timestamp

  • @param bool whether to show seconds

  • @param string format: us or euro

  • @return string
    */
    if ( ! function_exists(‘unix_to_human’))
    {
    function unix_to_human($time = ‘’, $seconds = FALSE, $fmt = ‘us’)
    {
    $r = date(‘Y’, $time).’-’.date(‘m’, $time).’-’.date(‘d’, $time).’ ';

     if ($fmt == 'us')
     {
     	$r .= date('h', $time).':'.date('i', $time);
     }
     else
     {
     	$r .= date('H', $time).':'.date('i', $time);
     }
    
     if ($seconds)
     {
     	$r .= ':'.date('s', $time);
     }
    
     if ($fmt == 'us')
     {
     	$r .= ' '.date('A', $time);
     }
     
     return $r;
    

    }
    }

// ------------------------------------------------------------------------

/**

  • Convert “human” date to GMT

  • Reverses the above process

  • @access public

  • @param string format: us or euro

  • @return integer
    */
    if ( ! function_exists(‘human_to_unix’))
    {
    function human_to_unix($datestr = ‘’)
    {
    if ($datestr == ‘’)
    {
    return FALSE;
    }

     $datestr = trim($datestr);
     $datestr = preg_replace("/\040+/", "\040", $datestr);
    
     if ( ! ereg("^[0-9]{2,4}\-[0-9]{1,2}\-[0-9]{1,2}\040[0-9]{1,2}:[0-9]{1,2}.*$", $datestr))
     {
     	return FALSE;
     }
    
     $split = preg_split("/\040/", $datestr);
    
     $ex = explode("-", $split['0']);
    
     $year  = (strlen($ex['0']) == 2) ? '20'.$ex['0'] : $ex['0'];
     $month = (strlen($ex['1']) == 1) ? '0'.$ex['1']  : $ex['1'];
     $day   = (strlen($ex['2']) == 1) ? '0'.$ex['2']  : $ex['2'];
    
     $ex = explode(":", $split['1']);
    
     $hour = (strlen($ex['0']) == 1) ? '0'.$ex['0'] : $ex['0'];
     $min  = (strlen($ex['1']) == 1) ? '0'.$ex['1'] : $ex['1'];
    
     if (isset($ex['2']) AND ereg("[0-9]{1,2}", $ex['2']))
     {
     	$sec  = (strlen($ex['2']) == 1) ? '0'.$ex['2'] : $ex['2'];
     }
     else
     {
     	// Unless specified, seconds get set to zero.
     	$sec = '00';
     }
    
     if (isset($split['2']))
     {
     	$ampm = strtolower($split['2']);
     
     	if (substr($ampm, 0, 1) == 'p' AND $hour < 12)
     		$hour = $hour + 12;
     	
     	if (substr($ampm, 0, 1) == 'a' AND $hour == 12)
     		$hour =  '00';
     	
     	if (strlen($hour) == 1)
     		$hour = '0'.$hour;
     }
     	
     return mktime($hour, $min, $sec, $month, $day, $year);
    

    }
    }

// ------------------------------------------------------------------------

/**

  • Timezone Menu

  • Generates a drop-down menu of timezones.

  • @access public

  • @param string timezone

  • @param string classname

  • @param string menu name

  • @return string
    */
    if ( ! function_exists(‘timezone_menu’))
    {
    function timezone_menu($default = ‘UTC’, $class = “”, $name = ‘timezones’)
    {
    $CI =& get_instance();
    $CI->lang->load(‘date’);

     if ($default == 'GMT')
     	$default = 'UTC';
    
     $menu = '<select name="'.$name.'"';
    
     if ($class != '')
     {
     	$menu .= ' class="'.$class.'"';
     }
    
     $menu .= ">\n";
    
     foreach (timezones() as $key => $val)
     {
     	$selected = ($default == $key) ? " selected='selected'" : '';
     	$menu .= "<option value='{$key}'{$selected}>".$CI->lang->line($key)."</option>\n";
     }
    
     $menu .= "</select>";
    
     return $menu;
    

    }
    }

// ------------------------------------------------------------------------

/**

  • Timezones

  • Returns an array of timezones. This is a helper function

  • for various other ones in this library

  • @access public

  • @param string timezone

  • @return string
    */
    if ( ! function_exists(‘timezones’))
    {
    function timezones($tz = ‘’)
    {
    // Note: Don’t change the order of these even though
    // some items appear to be in the wrong order

     $zones = array(
     				'UM12' => -12,
     				'UM11' => -11,
     				'UM10' => -10,
     				'UM9'  => -9,
     				'UM8'  => -8,
     				'UM7'  => -7,
     				'UM6'  => -6,
     				'UM5'  => -5,
     				'UM4'  => -4,
     				'UM25' => -2.5,
     				'UM3'  => -3,
     				'UM2'  => -2,
     				'UM1'  => -1,
     				'UTC'  => 0,
     				'UP1'  => +1,
     				'UP2'  => +2,
     				'UP3'  => +3,
     				'UP25' => +2.5,
     				'UP4'  => +4,
     				'UP35' => +3.5,
     				'UP5'  => +5,
     				'UP45' => +4.5,
     				'UP6'  => +6,
     				'UP7'  => +7,
     				'UP8'  => +8,
     				'UP9'  => +9,
     				'UP85' => +8.5,
     				'UP10' => +10,
     				'UP11' => +11,
     				'UP12' => +12
     			);
     		
     if ($tz == '')
     {
     	return $zones;
     }
    
     if ($tz == 'GMT')
     	$tz = 'UTC';
    
     return ( ! isset($zones[$tz])) ? 0 : $zones[$tz];
    

    }
    }

/* End of file date_helper.php /
/
Location: ./system/helpers/date_helper.php */[/php]

Are you sure you only added this one line to php.ini and no other changes were made to your php code or .htaccess ?

To check if date.timezone was set properly in your php.ini, create new file named info.php
and add there this single line:
[php]<?php phpinfo() ?>[/php]

then navigate to yourdomain.com/info.php from your browser and check value of date.timezone

Directive: date.timezone
Local Value: America/New_York
Master Value: America/New_York

If your script info.php worked fine and there was no 500 server error, then problem is not with php.ini but somewhere else in your code or .htaccess

This script also uses mysql database, may be problem in it?

And I also deleted line with timezone, restarted apache and it sended me the same error. As I said in first post, this script worked for me on free and premium shared hostings.

If the problem was with database, you would get ‘connection error’ from php.

Check if you have .htaccess in the directory where you execute the script that gives 500 server error,
and if so, what is the content of this .htaccess

script is in /var/www/html:

Options +FollowSymLinks
RewriteEngine On

leave just a normal / (slash) if the script is installed at root level otherwise enter it’s folder here ex: /wscript (! no trailing slash)

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index.php|install|scripts|fonts|uploads|robots.txt|sitemap.xml|favicon.ico)

if wscript is installed in a subfolder, add it before index.php ex: RewriteRule ^(.*)$ /wscript/index.php?/$1 [L] otherwise leave it as is

RewriteRule ^(.*)$ /index.php?/$1 [L]

Sponsor our Newsletter | Privacy Policy | Terms of Service