Die real, voller Inhalt der Datei:Ist das ein PHP-Bug, oder stimmt etwas nicht mit meinen Zeitzonen/PHP-Einstellungen?
<?php
error_reporting(E_ALL);
ini_set(display_errors, 'on');
try {
//$x = strtotime('blah');
$x = new DateTime('lol');
} catch (Exception $e) {
echo $e->getMessage();
}
Der Datetime-Konstruktor akzeptiert eine Zeichenfolge, die eine Ausnahme auslösen soll, wenn sie es nicht analysieren kann. Dies läuft auf meinem lokalen Rechner in Ordnung, aber auf einem meines Remote-Server die Ausnahme nicht abgefangen wird (wieder Ich bin mit try/catch und exakt dem gleichen Code):
Fatal error: Uncaught exception 'Exception' with message 'DateTime::__construct() [function.DateTime---construct]: Failed to parse time string (lol) at position 0 (l): The timezone could not be found in the database' in /var/www/html/site_com/rez/date.php:9 Stack trace: #0 /var/www/html/site_com/rez/date.php(9): DateTime->__construct('lol') #1 {main} thrown in /var/www/html/site_com/rez/date.php on line 9
Einstellungen für Remote-Server, auf den die Ausnahme ist, nicht gefangen:
PHP Version 5.2.5
date date/time support enabled "Olson" Timezone Database Version 2007.9 Timezone Database internal Default timezone America/Chicago
Directive Local Value Master Value date.default_latitude 31.7667 31.7667 date.default_longitude 35.2333 35.2333 date.sunrise_zenith 90.583333 90.583333 date.sunset_zenith 90.583333 90.583333 date.timezone no value no value
Meine lokalen Einstellungen, wo es funktioniert:
PHP 5.2.10
date date/time support enabled "Olson" Timezone Database Version 0.system Timezone Database internal Default timezone System/Localtime
Directive Local Value Master Value date.default_latitude 31.7667 31.7667 date.default_longitude 35.2333 35.2333 date.sunrise_zenith 90.583333 90.583333 date.sunset_zenith 90.583333 90.583333 date.timezone no value no value
lokal, es fängt die Ausnahme und pri nts der Fehler raus. Die date.timezone
auf beiden ist kein Wert.
Vielleicht sind nur die Zeitzonen meines internen Systems ausgeschaltet? Meine lokale Box ist Ubuntu und meine Fernbedienung ist CentOS, sie sind wahrscheinlich inkonsistent, aber sollte PHP nicht noch die Ausnahme fangen?
FYI Ich kann PHP auf der Remote-Box nicht aktualisieren, da ich keine Administratorrechte habe.
Sie könnten sogar versuchen, die DateTime-Klasse zu erweitern, und überschreiben den Konstruktor mit dem obigen Code, außer anstelle von new DateTime würden Sie parent :: __ construct() verwenden . Denken Sie daran, dass der Prototyp derselbe sein muss, also sollte Ihr Konstrukt zwei Parameter annehmen (string $ str, DateTimeZone $ timezone = null).Dies hat den zusätzlichen Vorteil festzustellen, ob der Fehler __construct() uncatchable exception die Ursache Ihrer Probleme ist. – Frankie
Ja, ich benutze derzeit strtotime und stelle sicher, dass es nicht scheitert, dann füttere es dem DateTime-Konstruktor - ich versuche es zu verlängern. –
Kann dies in PHP 5.5.9ubuntu reproduzieren. – CarstenSchmitz