PHP Extension – Ευρώ Ολογράφως

Χρησιμοποιώντας περιστασιακά (ubuntu) linux και php, σε μια στιγμή χαλαρότητας, είπα να δοκιμάσω να δουλέψω λίγο με την php. Να προσπαθήσω να προσθέσω κάποιες συναρτήσεις επιπλέον, όχι όμως σαν php source κώδικα, αλλά σαν extension module. Οι βασικοί λόγοι ήταν 3.
1ον) Δεν έχω κάποιον (αφεντικό ή πελάτη) πάνω από το κεφάλι μου να με πιέζει να παραδώσω χθές.
2ον) php sources γράφει και η κουτσή μαρία. php extensions όμως είναι λίγοι αυτοί που γράφουν, και ήθελα να δω πόσο εύκολο είναι να μην είσαι ένας από τους πολλούς, να ξεχωρίσεις από το μπουλούκι.
3ον) μια function μέσα σε ένα compiled php module τρέχει πιο γρήγορα από μια που γίνεται parse κάθε φορά. Το πόσο πιο γρήγορα θα κάτσω άλλη φορά να ασχοληθώ (αν βρώ χρόνο και κυρίως όρεξη).

Για να μην κάθομαι όμως να παίζω με κώδικα που δεν τον έχω τεστάρει, προτίμησα να χρησιμοποιήσω παλιότερο κώδικα που είχα γράψει σε windows για τη μετατροπή ποσού ευρώ σε ολογράφως. Ακολουθώντας τα πολύ αναλυτικά βήματα για linux στο http://devzone.zend.com/article/1021, φτιάχτηκε ένα νέο php module (euroVerbal) που θα βγάζει αυτή τη λειτουργικότητα στην php μέσω της function euroValue_UTF8_el( $amount [, $boolShowZeroValue = true [, $boolShowCurrency = true]] ). Φτιάχτηκε μια δοκιμαστική σελίδα για να επιβεβαιώσω ότι εξακολουθεί και δουλεύει (ο apache, η php αλλά και η function) και μάλλον τα αποτελέσματα είναι αρκετά καλά.

Στη function η μόνη υποχρεωτική παράμετρος είναι το $amount = ποσό με στογγυλοποίηση στα 2 δεκαδικά (προφανώς λόγω ευρώ), οι άλλες είναι προεραιτικές boolean παράμετροι που αφορούν το αν θα δείχνει το μηδενικό ποσό και αν θα δείχνει και το λεκτικό για τα “ευρώ” και τα “λεπτά”.

Εχω κάνει δοκιμές μόνο σε δύο μηχανήματα που έχω διαθέσιμα (ένα με 32bit intel επεξεργαστή και ένα με 64bit xeon). Και τα δύο συστήματα τρέχουν τις αντίστοιχες εκδόσεις του ubuntu 32/64bit, οπότε χρειάζονται επιπλέον πειραματόζωα εθελοντές μέχρι να επιβεβαιωθεί ότι το module γίνεται build και σε άλλα συστήματα και τρέχει ομαλά. Οι οδηγίες για να γίνει build και install το module περιγράφονται λεπτομερώς στην παραπάνω ιστοσελίδα, αν θέλει κάποιος να κάνει δοκιμή σε κάποιο άλλο σύστημα. Διαφορετικά για 32bit linux μάλλον το eurovalue_1.1.2-1_i386.deb αρχείο αρκεί.

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<p>SOURCE CODE:
<blockquote>
<?php show_source('test.php'); ?>
</blockquote>
GENERATED RESULT:
</p>
<p>euroValue version <?php echo euroValue_version(); ?></p>
<pre>
<?php
$step = 0.01;
$a = 0.0;
for ($a = 0.0; $a < 10000000000000000.0; $a += $step)
{
    printf('%15.2f = ', $a);
    echo euroValue_UTF8_el($a) . '<br>';
    $step *= 1.09;
}
?>
</pre>
</body>
</html>

Κατεβάστε τα sources και το

compiled module (deb 64bit package v1.1.3)

compiled module (deb 32bit package v1.1.2)

compiled dll (win 32 dll)