apple,development,life & more
Saturday, March 31. 2007
PHP5/PHP5 method_exists
Wenn mann dynamisch Methoden aus einer Klasse aufrufen möchte, kommt man
vermutlich an method_exists() kaum vorbei.
Heute musste ich allerdings feststellen, dass PHP4 alle Klassennamen im lowercase überprüft,
PHP5 hingegen so wie es geschrieben wurde. Dies führte natürlich in meinem aktuellen Projekt
zu massiven Schwierigkeiten.
Es bleibt kaum eine andere Lösung, als sich selber eine lowercase Version von method_exists anzufertigen.
Die könnte wie folgt aussehen.
Das hab ich dann implementiert, und seither funktioniert alles so wie man es verwenden sollte.
Achja und wenn wir gerade beim Thema sind, man wird auch schnell feststellen, dass
call_user_method deprecated ist und daher nicht mehr eingesetzt werden sollte.
Zumindest laut meiner PHP4 version, im Manual konnte ich dazu nicht viel finden.
Dies kann man aus dem Weg schaffen, indem man call_user_func() oder call_user_func_array()
mit folgenden Parametern aufruft.
vermutlich an method_exists() kaum vorbei.
Heute musste ich allerdings feststellen, dass PHP4 alle Klassennamen im lowercase überprüft,
PHP5 hingegen so wie es geschrieben wurde. Dies führte natürlich in meinem aktuellen Projekt
zu massiven Schwierigkeiten.
Es bleibt kaum eine andere Lösung, als sich selber eine lowercase Version von method_exists anzufertigen.
Die könnte wie folgt aussehen.
CODE:
function _method_exists($class,$method)
{
$classMethods = array_map('strtolower', get_class_methods($class));
if(in_array(strtolower($method),$classMethods))
{
return true;
} else {
return false;
}
}
{
$classMethods = array_map('strtolower', get_class_methods($class));
if(in_array(strtolower($method),$classMethods))
{
return true;
} else {
return false;
}
}
Das hab ich dann implementiert, und seither funktioniert alles so wie man es verwenden sollte.
Achja und wenn wir gerade beim Thema sind, man wird auch schnell feststellen, dass
call_user_method deprecated ist und daher nicht mehr eingesetzt werden sollte.
Zumindest laut meiner PHP4 version, im Manual konnte ich dazu nicht viel finden.
Dies kann man aus dem Weg schaffen, indem man call_user_func() oder call_user_func_array()
mit folgenden Parametern aufruft.
CODE:
call_user_func(array(&$object,'my_method_name'));
Posted by Peter Rehm
in PHP
at
19:02
| Comments (0)
| Trackbacks (0)
Defined tags for this entry: php
Tuesday, March 27. 2007
Safari Debug Mode
Als ich neulich rätselhafte Probleme mit Prototype hatte, und etwas ohne Fehler
einfach nicht funktionierte, war ich sehr dankbar über die Debug Konsole die
man wie folgt aktivieren kann.
Einfach in der Konsole folgendes eingeben
Und danach Safari neustarten!
einfach nicht funktionierte, war ich sehr dankbar über die Debug Konsole die
man wie folgt aktivieren kann.
Einfach in der Konsole folgendes eingeben
CODE:
defaults write com.apple.Safari IncludeDebugMenu 1
Und danach Safari neustarten!
Monday, March 19. 2007
MSSQL to MySQL konvertieren
In einem aktuellen Projekt stand ich vor der Herausforderung, dass die bisherige Datenbank
in MSSQL gehalten wurde, und ich die Datenbank nur umständlich über ein Weboberfläche
"verwalten" konnte.
Da ich wenigstens die aktuelle Datenstruktur ansehen wollte, den Code der zu dem Projekt
gehört kann eh nicht weiterverwendet werden, musste ich irgendwie ein SQL Statement
erzeugen, was mit dem Tool aber nicht möglich war.
Dann stieß ich auf das MySQL Migration Toolkit, mit welchem man an sich
komfortabel eine MSSQL Datenbank auslesen könnte, und direkt in eine MySQL Datenbank
schreiben kann. Allerdings war, wie nicht anders zu erwarten, der SQL Server nicht von außen
zugänglich.
Die einzige Lösung die somit noch blieb war über ein PHP/ASP Skript, was direkt auf dem
Server liegen kann und soch somit auch verbinden kann. Nach längerer Suche stieß ich auf
das Greenlight SQL Tool.
Aus dem heruntergeladenen ZIP Archiv muss man nur noch die dumpdb.php hochladen und
anpassen. In meinem Fall wollte ich eine MSSQL DB auslesen und in ein MySQL Format bringen.
Standardmäßig sieht der erste teil der Config so aus
Woher die HTTP_POST_VARS kommen sollen, war mir unklar daher habe ich das wie folgt
angepasst.
Nun kann man das Skript über den Browser aufrufen und erhält die Datei direkt zum
Download. Ist dies nicht der Fall fehlt vermutlich PEAR::DB, welches unbedingt vorhanden
sein muss.
Dies kann man allerdings auch direkt in das Verzeichnis hochladen, wenn PEAR nicht
direkt gegeben ist. Auf dies komme ich in einem der nächsten Blog Einträge zurück.
in MSSQL gehalten wurde, und ich die Datenbank nur umständlich über ein Weboberfläche
"verwalten" konnte.
Da ich wenigstens die aktuelle Datenstruktur ansehen wollte, den Code der zu dem Projekt
gehört kann eh nicht weiterverwendet werden, musste ich irgendwie ein SQL Statement
erzeugen, was mit dem Tool aber nicht möglich war.
Dann stieß ich auf das MySQL Migration Toolkit, mit welchem man an sich
komfortabel eine MSSQL Datenbank auslesen könnte, und direkt in eine MySQL Datenbank
schreiben kann. Allerdings war, wie nicht anders zu erwarten, der SQL Server nicht von außen
zugänglich.
Die einzige Lösung die somit noch blieb war über ein PHP/ASP Skript, was direkt auf dem
Server liegen kann und soch somit auch verbinden kann. Nach längerer Suche stieß ich auf
das Greenlight SQL Tool.
Aus dem heruntergeladenen ZIP Archiv muss man nur noch die dumpdb.php hochladen und
anpassen. In meinem Fall wollte ich eine MSSQL DB auslesen und in ein MySQL Format bringen.
Standardmäßig sieht der erste teil der Config so aus
CODE:
$dbpasswd = @$HTTP_POST_VARS["dbpasswd"];
$dbhost = (! empty($HTTP_POST_VARS["dbhost"])) ? $HTTP_POST_VARS["dbhost"]
: "localhost";
$dbname = @$HTTP_POST_VARS["dbname"];
$dbuser = @$HTTP_POST_VARS["dbuser"];
$dbtype = (! empty($HTTP_POST_VARS["dbtype"])) ? $HTTP_POST_VARS["dbtype"]
: (function_exists("mssql_connect") ? "mssql" : "mysql");
$targetType = (! empty($HTTP_POST_VARS["targetType"]))
? $HTTP_POST_VARS["targetType"] : $dbtype;
$dbhost = (! empty($HTTP_POST_VARS["dbhost"])) ? $HTTP_POST_VARS["dbhost"]
: "localhost";
$dbname = @$HTTP_POST_VARS["dbname"];
$dbuser = @$HTTP_POST_VARS["dbuser"];
$dbtype = (! empty($HTTP_POST_VARS["dbtype"])) ? $HTTP_POST_VARS["dbtype"]
: (function_exists("mssql_connect") ? "mssql" : "mysql");
$targetType = (! empty($HTTP_POST_VARS["targetType"]))
? $HTTP_POST_VARS["targetType"] : $dbtype;
Woher die HTTP_POST_VARS kommen sollen, war mir unklar daher habe ich das wie folgt
angepasst.
CODE:
$dbpasswd ='pass';
$dbhost = 'localhost';
$dbname = 'db123';
$dbuser = 'user123';
$dbtype = 'mssql';
$targetType = 'mysql';
$dbhost = 'localhost';
$dbname = 'db123';
$dbuser = 'user123';
$dbtype = 'mssql';
$targetType = 'mysql';
Nun kann man das Skript über den Browser aufrufen und erhält die Datei direkt zum
Download. Ist dies nicht der Fall fehlt vermutlich PEAR::DB, welches unbedingt vorhanden
sein muss.
Dies kann man allerdings auch direkt in das Verzeichnis hochladen, wenn PEAR nicht
direkt gegeben ist. Auf dies komme ich in einem der nächsten Blog Einträge zurück.
Sunday, March 18. 2007
FCK Editor 2.4 und das Phänomen der kleingeschriebenen Pfade
Seit der Einführung von FCK Edit 2.4 wurde ein kleines Detail verändert.
Bisher hat der Editor die Dateien die man hochgeladen hat, immer in
/userfiles/Image/ oder z.b. /userfiles/File/ hochgeladen
Image oder File sind die Ressource Typen.
Seit 2.4 lädt der Editor aber die Dateien immer in /userfiles/image/.
Das ist ziemlich blöd, wenn der Kunde alle seine Bilder in /Image/ liegen hat.
Dazu gibt es 2 Lösungsansätze.
1.) Umbenennen von /Image/ in /image/
Das alte Verzeichnis kann einfach in kleingeschrieben umbenannt werden.
Dies sollte man mit allen Ressource Typen machen, die man verwendet.
Allerdings sollte man beachten, dass man evtl. noch eine Datenbank updaten
muss, wenn sich die Pfade geänder haben.
Dies kann man mit der Anleitung des vorherigen Blog Posts machen.
2.) Man passt die PHP Datein vom FCKEditor an
Seit der neuen Version hat sich hier was verändert
Und zwar ist das strtolower hinzugekommen. Entfernt man dieses verhält sich alles wieder wie gehabt.
Zusammenfassung
Allerdings ist die Methode 1 sicher die zukunftssichere. Da man sonst bei jedem Update wieder an das ändern der
Dateien denken muss.
Bisher hat der Editor die Dateien die man hochgeladen hat, immer in
/userfiles/Image/ oder z.b. /userfiles/File/ hochgeladen
Image oder File sind die Ressource Typen.
Seit 2.4 lädt der Editor aber die Dateien immer in /userfiles/image/.
Das ist ziemlich blöd, wenn der Kunde alle seine Bilder in /Image/ liegen hat.
Dazu gibt es 2 Lösungsansätze.
1.) Umbenennen von /Image/ in /image/
Das alte Verzeichnis kann einfach in kleingeschrieben umbenannt werden.
Dies sollte man mit allen Ressource Typen machen, die man verwendet.
Allerdings sollte man beachten, dass man evtl. noch eine Datenbank updaten
muss, wenn sich die Pfade geänder haben.
Dies kann man mit der Anleitung des vorherigen Blog Posts machen.
2.) Man passt die PHP Datein vom FCKEditor an
Seit der neuen Version hat sich hier was verändert
CODE:
editor/filemanager/browser/default/connectors/php/io.php:34:
return $GLOBALS["UserFilesPath"] . strtolower( $resourceType ) . $folderPath ;
editor/filemanager/browser/default/connectors/php/io.php:45:
$sResourceTypePath = $GLOBALS["UserFilesDirectory"] . strtolower( $resourceType ) . '/' ;
return $GLOBALS["UserFilesPath"] . strtolower( $resourceType ) . $folderPath ;
editor/filemanager/browser/default/connectors/php/io.php:45:
$sResourceTypePath = $GLOBALS["UserFilesDirectory"] . strtolower( $resourceType ) . '/' ;
Und zwar ist das strtolower hinzugekommen. Entfernt man dieses verhält sich alles wieder wie gehabt.
CODE:
editor/filemanager/browser/default/connectors/php/io.php:34:
return $GLOBALS["UserFilesPath"] . $resourceType . $folderPath ;
editor/filemanager/browser/default/connectors/php/io.php:45:
$sResourceTypePath = $GLOBALS["UserFilesDirectory"] . $resourceType . '/' ;
return $GLOBALS["UserFilesPath"] . $resourceType . $folderPath ;
editor/filemanager/browser/default/connectors/php/io.php:45:
$sResourceTypePath = $GLOBALS["UserFilesDirectory"] . $resourceType . '/' ;
Zusammenfassung
Allerdings ist die Methode 1 sicher die zukunftssichere. Da man sonst bei jedem Update wieder an das ändern der
Dateien denken muss.
Suchen und Ersetzen mit MySQL
Ein Szenario, das sicher einigen bekannt vor kommt. Ein Kunde pflegt seine Daten über
einen längeren Zeitraum. Eines Tages möchte er einen Pfad den er dort immer eingegeben
hat ändern und hat keine Lust dazu alle Artikel nochmals zu bearbeiten.
Er meldet sich und sagt, man solle das doch "kurz" für Ihn erledigen.
Dank der REPLACE Funktion von MySQL auch in der Tat kein Problem.
einen längeren Zeitraum. Eines Tages möchte er einen Pfad den er dort immer eingegeben
hat ändern und hat keine Lust dazu alle Artikel nochmals zu bearbeiten.
Er meldet sich und sagt, man solle das doch "kurz" für Ihn erledigen.
Dank der REPLACE Funktion von MySQL auch in der Tat kein Problem.
CODE:
UPDATE articles
SET content = REPLACE (content,'alt','neu')
SET content = REPLACE (content,'alt','neu')
Posted by Peter Rehm
in Programmierung
at
10:33
| Comments (0)
| Trackbacks (0)
Defined tags for this entry: mysql
Wednesday, March 7. 2007
E-Mails verständigung zwischen Apple Mail und Outlook aka. Windows Mails
Apple verwendet bei seinen Mails eine eigene Standard-Kodierung. Da kann es schnell zu Problemen mit einem MS Outlook auf der Gegenseite kommen.
Dies tritt auf bei Mails mit gemischte
Dieses Problem kann man aber abwenden, indem man eine andere Kodierung für Apple Mail einstellt.
Dies tritt auf bei Mails mit gemischte
Dieses Problem kann man aber abwenden, indem man eine andere Kodierung für Apple Mail einstellt.
- Schließen Sie Apple Mail
- Öffnen Sie die Konsole und führen Sie folgendes aus
CODE:defaults write com.apple.mail NSPreferredMailCharset “UTF-8”
- Öffnen Sie Apple Mail
- Aktivieren Sie in den Einstellungen in dem Register "verfassen" folgende Optionen
- Format der Mail: Formattierter Text
- Antworten: Dasselbe Format verwenden, wie in der Original Mail
Monday, March 5. 2007
Validierung von Ausweisdaten mit PHP
Es kursieren unzählige Mythen um die Ausweisnummer. So behaupten einige,
die letzte Ziffer, sei die Zahl, wieviele Leute in Deutschland einem ähnlich
sind
Dem ist nicht so. Hinter der Ausweisnummer steckt ein triviales System.
Der erste Block setzt sich zusammen aus der Ausgabenummer des Ortes, von dem
man den Ausweis bezogen hat, einer zufälligen Nummer, einer Prüfziffer, und
der Staatsangehörigkeit.
Beispiel:
Die letzte Zahl vor dem D ist die Prüfziffer (5), und das D ist die Staatsangehörigkeit,
also Deutsch.
Der zweite Block beinhaltet das Geburtsdatum des Ausweisinhabers, in der
Form YYMMDD und eine Prüfziffer
Beispiel:
9 ist in dem Beispiel die Prüfziffer, und der Ausweisinhaber wurde am 20. Juli 1986
geboren.
Der dritte Block ist wie der zweite, beinhaltet allerdings das Gültigkeitsdatum.
Beispiel:
In dem Fall ist die Prüfziffer wieder 9, und der Ausweis ist gültig bis zum 20. Juli 1986.
Der letzte Block ist eine Prüfziffer von den Prüfziffern.
Hinter den Prüfziffern verbirgt sich ein einfacher Algorithmus.
Dies wird solange wiederholt, bis alle Zahlen summiert werden. Das Ergebnis Modulo 10
ist dann die Prüfziffer.
Beispiel:
Berechnung:
Auch die Prüfziffer der Prüfziffern wird nach dem gleichen Algorithmus berechnet.
Der Constructor teilt die Nummer in die Blocks auf, und überprüft ob die Länge
der Nummer korrekt ist. Ist dies nicht der Fall wird die Class sofort beendet.
Der die() ist zugegeben etwas hart, und sollte im Produktiven Einsatz vielleicht
nicht so verwendet werden
Danach kann ich mir über die Methode is_valid() anzeigen lassen, ob die
Ausweisnummer gültig ist. Die Funktion gibt einen Boolschen Wert zurück.
Neben den Prüfziffern wird auch überprüft, ob das Ablaufdatum noch nicht
erreicht ist.
Man kann sich auch das Geburtsdatum als Unix Timestamp oder als Array ausgeben lassen.
Dies geht mittels get_age($type). ist type 0 wird in Array mit den Keys (year,month,day
zurückgegeben, ansonsten ein Unix Timestam.
Das folgende Beispiel soll abschließend die Funktionsweise verdeutlichen.
$ppn sollte die Ausweisnummer beinhalten.
die letzte Ziffer, sei die Zahl, wieviele Leute in Deutschland einem ähnlich
sind
Dem ist nicht so. Hinter der Ausweisnummer steckt ein triviales System.
Der erste Block setzt sich zusammen aus der Ausgabenummer des Ortes, von dem
man den Ausweis bezogen hat, einer zufälligen Nummer, einer Prüfziffer, und
der Staatsangehörigkeit.
Beispiel:
CODE:
0000000005D
Die letzte Zahl vor dem D ist die Prüfziffer (5), und das D ist die Staatsangehörigkeit,
also Deutsch.
Der zweite Block beinhaltet das Geburtsdatum des Ausweisinhabers, in der
Form YYMMDD und eine Prüfziffer
Beispiel:
CODE:
8607209
9 ist in dem Beispiel die Prüfziffer, und der Ausweisinhaber wurde am 20. Juli 1986
geboren.
Der dritte Block ist wie der zweite, beinhaltet allerdings das Gültigkeitsdatum.
Beispiel:
CODE:
8607209
In dem Fall ist die Prüfziffer wieder 9, und der Ausweis ist gültig bis zum 20. Juli 1986.
Der letzte Block ist eine Prüfziffer von den Prüfziffern.
Prüfziffern
Hinter den Prüfziffern verbirgt sich ein einfacher Algorithmus.
CODE:
7 * die erste Zahl + 3 * die zweite Zahl + die dritte Zahl + 7 * die erste Zahl,...
Dies wird solange wiederholt, bis alle Zahlen summiert werden. Das Ergebnis Modulo 10
ist dann die Prüfziffer.
Beispiel:
CODE:
8607209
Berechnung:
CODE:
8*7 + 6*3 + 0 + 7*7 + 2*3 + 0 = 129
129 % 10 = 9
Daher ist die Prüfziffer 9.
129 % 10 = 9
Daher ist die Prüfziffer 9.
Auch die Prüfziffer der Prüfziffern wird nach dem gleichen Algorithmus berechnet.
Code
CODE:
<?php
/**
* class to verify the german passport number
*/
class verify_passport
{
var $full_number;
var $blocks=array();
var $result;
var $is_valid=true;
var $expires;
/**
* Constructor
* @param string $number passportnumber
* @return void
*/
function verify_passport($number)
{
/**
* Remove the < and split into the 4 blocks
* If $number > 26 $number is invalid
*/
if(strlen($number)>26 || strlen($number)<26)
{
$number=str_replace('<','',$number);
if(strlen($number)>26)
{
die('invalid passport length');
}
}
$this->blocks[1]=substr($number,0,11);
$this->blocks[2]=substr($number,11,7);
$this->blocks[3]=substr($number,18,7);
$this->blocks[4]=substr($number,25,1);
foreach($this->blocks as $key => $value)
{
if(!$this->verify_block($key,$value))
{
echo $key;
$this->is_valid=false;
return;
}
}
/**
* Set the expire date
*/
$this->expires=mktime(0,0,0,substr($this->blocks[3],2,2),substr($this->blocks[3],4,2),substr($this->blocks[3],0,2));
}
/**
* Verifies the single Blocks
* @param integer $type block id
* @param string $data block content
* @return boolean
*/
function verify_block($type,$data)
{
switch($type)
{
case 1:
return ($this->calc_checksum(substr($data,0,-2))==$data{9} ? true : false );
break;
case 2:
case 3:
return ($this->calc_checksum(substr($data,0,-1))==$data{6} ? true : false );
break;
case 4:
return ($this->calc_checksum(substr($this->blocks[1],0,-1).substr($this->blocks[2],0).substr($this->blocks[3],0))==$data{0} ? true : false );
break;
}
}
/**
* Calculates the Checksum for the given line
* @param string $data
* @result unit place of the checksum
*/
function calc_checksum($data)
{
$result=0;
$length=strlen($data);
for($i=0;$i<$length;$i++)
{
switch($i%3)
{
case 0:
$result+=$data{$i}*7;
break;
case 1:
$result+=$data{$i}*3;
break;
case 2:
$result+=$data{$i};
break;
}
}
return $result%10;
}
/**
* Checks if all was valid - Also if passport is not expired
* @return boolean
*/
function is_valid()
{
if($this->is_valid)
{
if(time()<=$this->expires)
{
return true;
}
}
return false;
}
/**
* Returns the Age in array or unix timestamp
* @param integer $type 0=array 1=timestamp
* @return array or timestamp
*/
function get_age($type='0')
{
$year=substr($this->blocks[2],0,2);
/*
* Create a 4 digit Year number
*/
if($year>=20)
{
$year=(substr(date("Y"),0,2)-1)*100+$year;
} else {
$year=substr(date("Y"),0,2)*100+$year;
}
$month=substr($this->blocks[2],2,2);
$day=substr($this->blocks[2],4,2);
if($type==0)
{
return array('year'=>$year,
'month'=>$month,
'day'=>$day);
} else {
return mktime(0,0,0,$month,$day,$year);
}
}
}
?>
/**
* class to verify the german passport number
*/
class verify_passport
{
var $full_number;
var $blocks=array();
var $result;
var $is_valid=true;
var $expires;
/**
* Constructor
* @param string $number passportnumber
* @return void
*/
function verify_passport($number)
{
/**
* Remove the < and split into the 4 blocks
* If $number > 26 $number is invalid
*/
if(strlen($number)>26 || strlen($number)<26)
{
$number=str_replace('<','',$number);
if(strlen($number)>26)
{
die('invalid passport length');
}
}
$this->blocks[1]=substr($number,0,11);
$this->blocks[2]=substr($number,11,7);
$this->blocks[3]=substr($number,18,7);
$this->blocks[4]=substr($number,25,1);
foreach($this->blocks as $key => $value)
{
if(!$this->verify_block($key,$value))
{
echo $key;
$this->is_valid=false;
return;
}
}
/**
* Set the expire date
*/
$this->expires=mktime(0,0,0,substr($this->blocks[3],2,2),substr($this->blocks[3],4,2),substr($this->blocks[3],0,2));
}
/**
* Verifies the single Blocks
* @param integer $type block id
* @param string $data block content
* @return boolean
*/
function verify_block($type,$data)
{
switch($type)
{
case 1:
return ($this->calc_checksum(substr($data,0,-2))==$data{9} ? true : false );
break;
case 2:
case 3:
return ($this->calc_checksum(substr($data,0,-1))==$data{6} ? true : false );
break;
case 4:
return ($this->calc_checksum(substr($this->blocks[1],0,-1).substr($this->blocks[2],0).substr($this->blocks[3],0))==$data{0} ? true : false );
break;
}
}
/**
* Calculates the Checksum for the given line
* @param string $data
* @result unit place of the checksum
*/
function calc_checksum($data)
{
$result=0;
$length=strlen($data);
for($i=0;$i<$length;$i++)
{
switch($i%3)
{
case 0:
$result+=$data{$i}*7;
break;
case 1:
$result+=$data{$i}*3;
break;
case 2:
$result+=$data{$i};
break;
}
}
return $result%10;
}
/**
* Checks if all was valid - Also if passport is not expired
* @return boolean
*/
function is_valid()
{
if($this->is_valid)
{
if(time()<=$this->expires)
{
return true;
}
}
return false;
}
/**
* Returns the Age in array or unix timestamp
* @param integer $type 0=array 1=timestamp
* @return array or timestamp
*/
function get_age($type='0')
{
$year=substr($this->blocks[2],0,2);
/*
* Create a 4 digit Year number
*/
if($year>=20)
{
$year=(substr(date("Y"),0,2)-1)*100+$year;
} else {
$year=substr(date("Y"),0,2)*100+$year;
}
$month=substr($this->blocks[2],2,2);
$day=substr($this->blocks[2],4,2);
if($type==0)
{
return array('year'=>$year,
'month'=>$month,
'day'=>$day);
} else {
return mktime(0,0,0,$month,$day,$year);
}
}
}
?>
Funktionsweise
Der Constructor teilt die Nummer in die Blocks auf, und überprüft ob die Länge
der Nummer korrekt ist. Ist dies nicht der Fall wird die Class sofort beendet.
Der die() ist zugegeben etwas hart, und sollte im Produktiven Einsatz vielleicht
nicht so verwendet werden
Danach kann ich mir über die Methode is_valid() anzeigen lassen, ob die
Ausweisnummer gültig ist. Die Funktion gibt einen Boolschen Wert zurück.
Neben den Prüfziffern wird auch überprüft, ob das Ablaufdatum noch nicht
erreicht ist.
Man kann sich auch das Geburtsdatum als Unix Timestamp oder als Array ausgeben lassen.
Dies geht mittels get_age($type). ist type 0 wird in Array mit den Keys (year,month,day
zurückgegeben, ansonsten ein Unix Timestam.
Der Einsatz
Das folgende Beispiel soll abschließend die Funktionsweise verdeutlichen.
CODE:
$try=new verify_passport($ppn);
var_dump( date("Ymd",$try->get_age(1)) );
var_dump( $try->is_valid() );
var_dump( date("Ymd",$try->get_age(1)) );
var_dump( $try->is_valid() );
$ppn sollte die Ausweisnummer beinhalten.
Posted by Peter Rehm
in PHP
at
18:51
| Comments (0)
| Trackbacks (0)
Defined tags for this entry: ausweisdaten, php
Thursday, March 1. 2007
Vistas Exposee verschnitt...
... ist offensichtlich sehr praktisch um die ganzen Fehlermeldungen zu Stapeln,
die man so erhält!

The WOW starts now!
Source
die man so erhält!

The WOW starts now!
Source
(Page 1 of 1, totaling 8 entries)
Inhalt
Calendar
Google Werbung
Archives
Categories
Syndicate This Blog
Getaggte Artikel
Top Referers
dietawfp.withsex.com (9)
istyle.my3gb.com (9)
myjanene.5gigs.net (9)
istyle.my3gb.com (9)
myjanene.5gigs.net (9)
Statistiken
letzter eintrag: 02.01.2008 11:16
154 geschriebene einträge
103 kommentare wurden erstellt
© Copyright 2006, nerdwg.org design by Luka Cvrk, port for s9y by nerdwg.org

