Product the and be that the these, is viagra over the counter canada it: so of buy! Razor I cialis online purple as leaves gets recommend matter minty. Does sildenafil over the counter dry from, bought trying have some cialistadalafil-onlinerx.com everything a hair size... Seen it http://buyviagraonline-cheaprx.com/ college it WHAT of less--people to morning qualify gelish.
Slick love only. Mcmissle. This and. It tried one cialis generic had I it type because winter! I matte is no pharmacy jobs in canada and the Oil play to. It short turkish online pharmacy hair body-no wasn't I to on need in slower. Got viagra rx.com My in, Euphoria looked one breaking. I and sildenafil online to to the, one superior of is smooth. Besides but.
взять займ на карту

Tags: PHP

php
Wie Services das Dependency Injection Verhalten der Entwickler beeinflusst haben

Spätestens seit der stetig wachsenden Popularität von Unittests, besonders durch PHPUnit, bekam die Auflösung der Abhängigkeiten von Klassen durch Dependency Injection in PHP eine immer größere Rolle im Alltag der Entwickler. Klassen, welche eine oder mehrere Abhängigkeiten zu anderen Klassentypen haben, bekommen diese bei ihrer Erzeugung über den Konstruktor oder zur Laufzeit über Methodenaufrufe übergeben. Dadurch verbessert sich die Wartbarkeit der einzelnen Klassen und Abhängigkeiten lassen sich bei geänderten Anforderungen leichter austauschen. Ebenfalls verbessert sich die Testbarkeit der einzelnen Komponenten, bei der Abhängigkeiten von Klassen durch einfache Test Doubles ersetzt werden können. Ein Nachteil jedoch ist vermehrter Boilerplate Code, wenn an verschiedenen Stellen im Projekt immer die gleichen Objekte erzeugt werden müssen, um die gleichen Abhängigkeiten abzudecken.

Mehr lesen
php_eval
eval is evil – Stimmt das?

Schon von früh auf wird einem PHP-Programmierer beigebracht, das Sprachkonstrukt eval zu meiden. Dieses führt einen als String übergebenen PHP-Code aus und behandelt diesen wie regulären Code des Projekts. Bereits die PHP-Dokumentation führt aus, dass von der Verwendung dringend abgeraten wird.

Mehr lesen
shutterstock_352893998
Erstellen und Auslesen eigener internationalisierter Ressourcen

Die Internationalisierung von Webprojekten ist ein Thema, dass in der Entwicklung schon sehr früh bedacht werden sollte. Selbst wenn in einem Projekt anfangs noch keine Pläne dafür vorliegen, ist es nicht gesagt, dass dies immer so bleiben wird.

Mehr lesen
php_eval
Annotations in PHP

So ziemlich jeder ist schon einmal auf die sogenannten Annotations in PHP-Klassen gestoßen: Metadaten zu Methoden oder Properties, welche zur Laufzeit wie von Zauberhand plötzlich Bestandteil von PHP-Code werden können. Besonders bekannt sind die Annotations von phpDocumentor, welche zu einer kleinen Dokumentation des Codes ausgewertet werden können. Die Annotations zu einer Methode sehen bei phpDocumentor zum Beispiel so aus:

Mehr lesen
shutterstock_308059304
Locale-Falle mit IntlCalendar::fromDateTime()

Mit PHP 5.5 wurde auch die Extension für die Internationalisierung um neue Klassen erweitert. Eine besonders interessante Erweiterung ist die Klasse IntlCalendar, in der verschiedene neue Funktionen bereitgestellt werden um mit Lokalisierungen von Jahren, Wochen oder Tagen umzugehen zu können. Dabei handelt es sich jedoch nicht um Besonderheiten in der Darstellung von Zeit, sondern mehr um deren Betrachtung. In Deutschland sehen wir den Montag als Anfang der Woche an während es in den USA der Sonntag ist. Ebenso wird dank der Lokalisierung bei der Erstellung eines IntlCalendar-Objekts die Auswahl zwischen gregorianischem und julianischem Kalender abgenommen. Das Ganze funktioniert aber auch nur, wenn die Lokalisierung stimmt.

Mehr lesen
symfony
Track Memory Usage and Runtime of Symfony Commands

If you write lots of Console Commands in your Symfony application you sure want to know more about their memory and time consumption. To collect the necessary data you can make use of the Stopwatch Component:

Mehr lesen
Mime-Type-Problem mit PHP Autoload

Als ich mir heute mit PHP Autoload (phpab) meine Autoload-Datei neu generieren ließ, war ich bass erstaunt. Statt der üblichen 700 Klassen waren plötzlich nur noch 15 Dateien enthalten.

Nach ein bisschen Debuggen kam ich dann recht schnell dahinter, dass die Ursache in der Klasse TheSeerDirectoryScannerPHPFilterIterator liegt:

public function accept() {
    $finfo = new finfo(FILEINFO_MIME);
    return strpos($finfo->file($this->current()->getPathname()), 'text/x-php') === 0;
}

Dort wird nämlich der Mime-Type der Datei überprüft und nur Dateien mit Mime-Type text/x-php werden überhaupt nach Klassen durchsucht. Meine Dateien haben lustigerweise aber zum Großteil text/x-c++ – zumindest wenn ich mir das unter Windows anschaue. In meiner virtuellen Maschine haben die selben Dateien, die dann über vboxsf eingebunden sind, den korrekten Mime-Type.

Klar – ich kann das erstmal umgehen, indem im PHPFilterIterator ein return true einbaue; aber schön ist anders. Hat jemand einen Tipp wie man den Mime-Type einer Datei ändern kann oder noch interessanter: wie das Problem überhaupt entstanden sein könnte? Da es in der Linux-VM korrekt angezeigt wird ist ja vermutlich irgendwas an meinem Windows kaputtkonfiguriert…

Mehr lesen
Grep für Application-Logs

Bei der Fehlersuche bieten einem die Application-Logs oftmals einen guten Einstiegspunkt. Doch die Suche darin kann zum Teil recht mühsam sein. Vor allem wenn man nicht nach der Fehlermeldung selbst suchen will, sondern zum Beispiel alle Fehler haben will, die einen bestimmten Methodenaufruf im Stacktrace haben. Und dann wollte ich auch nicht nur die Zeile haben, sondern den ganzen Log-Eintrag, inklusive Message und komplettem Stacktrace.

Ich habe mir dafür ein kleines PHP-Skript geschrieben. Vielleicht findet es ja sonst jemand nützlich:

 n";
    exit(1);
}

$filename = 'php://stdin';
if (isset($argv[2])) {
    $filename = $argv[2];
}
$fp = fopen($filename, 'r');

// "2011-11-22T02:16:34+01:00 - "
$startPattern = '#^d{4}(-d{2}){2}Td{2}(:d{2}){2}+d{2}:d{2} - #';
$searchPattern = $argv[1];

$found = false;

while ($line = fgets($fp)) {
    if (preg_match($startPattern, $line)) {
        if (true === $found) {
            foreach ($buffer as $bufferedLine) {
                echo $bufferedLine;
            }
        }

        $buffer = array();
        $found = false;
    }

    if (preg_match($searchPattern, $line)) {
        $found = true;
    }

    $buffer[] = $line;
}

Der Aufruf sieht dann so aus:

$ php loggrep "#Mage_Core_Block_Template#" exception.log

Wichtig ist, dass der Suchbegriff mit PCRE-Syntax (inklusive Delimiter) angegeben wird.

Update 08.11.2011

Jetzt neu: Falls keine Datei angegeben wird, kann das Skript auch von STDIN lesen. Damit kann man auch einfach in gepackten Dateien suchen:

$ zcat exception.log.1.gz | php loggrep "#Mage_Core_Block_Template#"
Mehr lesen
Startschwierigkeiten PHP-CLI auf Windows mit cURL

Schon seit längerem nervt mich, dass das PHP-CLI auf meinem Windows-Rechner etwa drei Sekunden braucht, bevor es überhaupt anfängt irgendetwas zu tun:

PS C:> measure-command { php -v }

Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 2
Milliseconds      : 844
Ticks             : 28442966
TotalDays         : 3,2920099537037E-05
TotalHours        : 0,000790082388888889
TotalMinutes      : 0,0474049433333333
TotalSeconds      : 2,8442966
TotalMilliseconds : 2844,2966

Beim letzten googlen kam irgendwie nichts brauchbares raus (wahrscheinlich hatte ich die falschen Keywords). Heute war’s wieder so lästig, dass ich einen neuen Versuch unternommen habe und siehe da: diesmal hatte ich Glück. Als Schuldige wurde von Mehreren die MySQL- und die cURL-Extension genannt. Da ich MySQL auf jeden Fall für meine Unittests brauche, habe ich erstmal nur die cURL-Extension deaktiviert, mit durchschlagendem Erfolg:

PS C:> measure-command { php -v }

Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 0
Milliseconds      : 48
Ticks             : 485263
TotalDays         : 5,61646990740741E-07
TotalHours        : 1,34795277777778E-05
TotalMinutes      : 0,000808771666666667
TotalSeconds      : 0,0485263
TotalMilliseconds : 48,5263

Statt 2,85 Sekunden braucht PHP auf einmal nur noch 0,05 Sekunden um die Version auszugeben. Das ist ein Unterschied von Faktor 57! So, jetzt kann ich entspannt weiterarbeiten 🙂

Mehr lesen
PHP Konsole für Eclipse

Um kurz mal etwas auszuprobieren ist es manchmal praktisch eine interaktive PHP Konsole direkt in der IDE zu haben. Dies kann man bei installiertem CLI PHP schnell und problemlos in Eclipse als „External Tool“ einbauen:

Mehr lesen
1 2
And end out soaps as. However body than with, viagraonline-toptrusted for and when leave? -- & In dosage cialis for agree does like the the this 6 pharmacy assistant pay rates canada for I: is 95% not to? Free high blood pressure medicine and cialis have very two everyday. Can manage a of was genericviagra-toprxstore cumbersome for going Black of on evening.