hiPHoP

Kurze Notiz: Muss mir wenn HipHop für PHP veröffentlicht ist das ganze mal ansehen. Vor allem interessiert mich wie der Code nach dem Transformieren aussieht. Mehr Zeilen, weniger lesbar, …? Bin mal gespannt.
Netter Nebeneffekt ist auch, dass die Software danach gleich closed-source wird. Obwohl es dafür schon ein paar Lösungen gibt (etwa Zend-Guard, bcompiler, PHPEncoder, …).

VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Zeit ist Geld oder PHP Profiling mit XHProf

Eben habe ich wieder einen sehr interessanten Artikel von Jan gelesen. Dieses mal geht es um PHP Profiling. Er berichtet über den Einsatz von XHProf von Facebook bei ihnen.

Bei Gelegenheit werde ich das Teil unbedingt mal versuchen. Für Software, bei der mehr gleichzeitig zugreifen, ist Profiling eigentlich schon immer ein Muss. Viel zu viele „Softwareentwickler“ kennen leider solche Tools gar nicht. Ich schreibe mir jedenfalls den Link zu dem Tool unbedingt mal auf.

VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

PHP – aber sicher

PHP Skripts sind schnell gezimmert. Allerdings bleibt da oft die Sicherheit außen vor. Mir geht es da auch nicht anders. Aus dem Grund suche ich immer wieder nach Lösungen, die mir die Sache ein wenig abnehmen. Heute bin ich auf PHPIDS gestoßen. Es fängt alle XSS, SQL Injection, header injection, directory traversal, RFE/LFI, DoS und LDAP Angriffe ab. Die Integration in bestehende PHP Anwendungen läuft über ein paar wenige Zeilen Code. Genau dafür übrigens liebe ich die Interpretersprachen.

PHPIDS muss ich mir unbedingt mal installieren!

VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

PHP Notizen

Hab mal wieder eben was mit PHP zu tun gehabt. Daher 2 Notizen:

  1. Fehlermeldungen in PHP einschalten:
    Statt immer den Webserver oder die PHP.ini umzustellen reicht natürlich auch folgender Code im Skript:

    error_reporting(E_ALL);
    ini_set('display_errors', '1');
  2. Zeilenumbrüche unabhängig vom Betriebssystem:
    Warum Windows das anders macht als Linux/Unix nervt mich schon immer. Jedenfalls werde ich ab sofort statt „\r\n“ bzw. „\n“ in Zukunft die PHP Konstante PHP_EOL nehmen! Also sowas wie:

    $msg .=  PHP_EOL;
VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Spiderman is having me for dinner tonight…. Teil 4

Ich hab mir heute morgen mal die Statistik vom Cache angesehen. 99.7% der Hits werden durch mit gecachten PHP-Seiten bedient. Nur bei 0.3% muss die PHP Seite neu in Bytecode übersetzt werden. Nicht schlecht!

Bei den Seiten, die ich per Hand (s.o.) cache, ist das Verhältnis beeindruckend:

  • 1. Aufruf: Page Load Time: 0.330711126328 seconds.
  • Jeder weitere Aufruf: Page Load Time: 0.000527143478394 seconds.

Das lohnt sich wohl!

VN:F [1.9.22_1171]
Rating: 3.0/10 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Spiderman is having me for dinner tonight… Teil 3

Ich hab ja schon in Teil 1 geschrieben, dass ich apc einsetze. Das Teil bringt ohne irgend welche Programmierung schon einiges. Es hält den Bytecode der PHP-Skripts im Speicher. Den Erfolg kann man ganz einfach so abrufen:

1
print_r(apc_cache_info());

Mit ein bisschen Programmieraufwand kann man Dank apc noch viel mehr rausholen. Auf rothsee-triathlon.de ist nicht alles neu und in php. Manche Teile laufen auch als alte Perl Skripts im Hintergrund. Die Hole ich mir dann per http zur Laufzeit rein. Nachdem das aber immer wieder die gleichen Files sind lässt sich der Content prima cachen. Also hab ich eine Funktion für diesen Zweck definiert:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function request_cache($url) {
        if (function_exists('apc_fetch')) {
           $md5=md5($url);
           $doc = apc_fetch($md5,&$success);
	   if(!$success) {
		$doc = file_get_contents($url);
		if ($doc === false) return "";
		apc_store($md5, $doc);
                $doc .= "<!-- ".$md5." now cached -->\n";
           } else {
                $doc .= "<!-- already cached -->\n";
           }
	} else {
		$doc = file_get_contents($url);
                $doc .= "<!-- not cached -->\n";
        }
 
	return $doc;
}

und rufe sie wie folgt auf:

1
$value = request_cache($request);

Die gecachte Seite ist „nur“ ca. um den Faktor 100 schneller. Kleiner Aufwand hoher Nutzen. Sehr geil.

VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)