Archiv der Kategorie: php

Best-of-the-Web 13

Nach längerer Downtime wieder eine Reihe an lesenswerten Materialien querbeet. Durch meine neuen Aufgaben im Job wird das Spektrum etwas breiter und entfernt sich perspektivisch vom Fokus der reinen Webentwicklung. Aber dazu später noch mehr.

  • More Responsive Tapping on iOS – Aktuelle Entwicklungen im Safari bezogen auf das Click-Delay. Auf Arbeit verwenden wir übrigens bei geeigneten Projekten zur großen Zufriedenheit Crosswalk zusammen mit Cordova. Crosswalk bringt die Blink Engine von Chrome/Chromium mit und integriert diese gewissermaßen in die App. Das führt auf Android Geräten dazu, dass auf allen Geräten die gleiche, moderne Rendering-Engine zum Einsatz kommt. Und das auch, wenn bspw.
Den ganzen Post lesen
Veröffentlicht unter php, Javascript, Best of the Web, webdev | Hinterlasse einen Kommentar

PHP Hashes und ihre Probleme

Ein schon ein etwas älteres Phänomen, welches mir demletzt erneut über den Weg gelaufen ist und ich es deswegen für „verbloggenswert“ halte:

if (md5('240610708') == md5('QNKCDZO'))
{
echo "yep equal";
}

Ups? Eine MD5-Kollision? Nein. Eine Eigenart von PHP.

var_dump(md5('240610708')); //string(32) "0e462097431906509019562988736854"
var_dump(md5('QNKCDZO'));   //string(32) "0e830400451993494058024219903391"

2 verschiedene Strings, die aber laut PHP-Vergleich identisch sein sollen? Genau da liegt der Knackpunkt: Die Strings sind gleich, aber nicht identisch. Da beide mit 0e anfangen, werden sie als Exponentialdarstellung einer Zahl aufgefasst. Und da 0irgendwas immer 0 ergibt, sind die beiden Hashes im Vergleich auch gleich.

Das „Problem“ lässt sich einfach lösen, indem mit === verglichen wird.… Den ganzen Post lesen

Veröffentlicht unter php, Security, Quicktips, webdev | 1 Kommentar

PHP 7 Migration

Nun war es also Zeit, diesen beschaulichen Server auf PHP7 zu heben.

Die Installation

… lief straight forward, wie man es gewohnt ist. Hier läuft ein Apache 2 mit mod_php auf (aktuell) Ubuntu 15.04, also das absolute Standardsetup. Da PHP7 standardmäßig noch nicht in ubuntu enthalten ist, müssen wir vom ppa von ondrej Gebrauch machen, welches sowohl PHP5.6 als auch PHP7 beinhaltet und regelmäßig aktualisiert wird.

apt-get -y purge php5 libapache2-mod-php5 php5 php5-cli php5-common
apt-get --purge autoremove
apt-get update
apt-get install python-software-properties
add-apt-repository ppa:ondrej/php-7.0
sudo apt-get install php7.0 php7.0-dev php7.0-mysql php7.0-gd php7.0-curl php7.0-sqlite php7.0-intl
php -v
service apache2 restart

Läuft, bei mir folgende Ausgabe:

PHP 7.0.1-4+deb.sury.org~vivid+1
Den ganzen Post lesen
Veröffentlicht unter php, webdev | Hinterlasse einen Kommentar

Best-of-the-Web 12

Neue Linkwelle, gab ja so einige spannende Sachen seit der letzten…

Den ganzen Post lesen
Veröffentlicht unter php, Javascript, Performance, Best of the Web, webdev | Hinterlasse einen Kommentar

Quicktip: Mehrere Attribute auf einmal anlegen

Erspähte ich neulich im Quellcode von Symfony 2 – mir war vorher nicht bewusst, dass das möglich ist.

class Foo
{
	protected $var1 = "1234", 
			  $var2 = "4567", 
			  $var3;
			  
	public $var4, 
		   $var5 = false;
		   
	private $var6;
}

Gefällt mir besser als die mehrfache, wiederkehrende Verwendung des gleichen Schlüsselworts. Nur unpraktisch bezogen auf Docblocks.… Den ganzen Post lesen

Veröffentlicht unter php, Quicktips, webdev | 2 Kommentare

Facebook „ordered friends“ – Eure Freunde/Stalker nach „Wichtigkeit“ ausgeben

Update: Timon hat mich in den Kommentaren darauf aufmerksam gemacht, dass die Auflistung umbenannt wurde und nun InitialChatFriendsList heißt. Auch die Sortierung hat sich bei mir geändert.

Im Javascript-Quelltext der Facebook-Profilseite befindet sich der Abschnitt „OrderedFriendsListInitialData“. Hierdrin sind die Profil-IDs aller eurer Freunde nach zugemessener „Wichtigkeit“ absteigend geordnet.

Wie Facebook dies genau bemisst, bleibt natürlich im Verborgenen. Höchstwahrscheinlich wird anhand dessen auch justiert, wieviel ihr von welchem Freund im Stream seht. Da wir mit den Profil-IDs alleine natürlich wenig anfangen können, musste ein kleines Script her, welches die Auflösung übernimmt:

$friends = array("1234567891011", "23456789101112", ...);

foreach ($friends as $i => $friend)
{
	$c = file_get_contents("http://graph.facebook.com/$friend");
Den ganzen Post lesen
Veröffentlicht unter php, Javascript, webdev | 10 Kommentare

PHP WTF #10

Vorsicht! Microtime liefert negative Ergebnisse!

<?php
  $start = microtime();
  $i = 1000;
  
  while ($i--)
  {
	//do stuff
  }
  
  $end = microtime();

  echo 'Took ' . $end - $start . ' seconds';

Okay, durchatmen. Wo liegt der Fehler? Kenner bemerken vielleicht, dass das Wörtchen Took abhanden gekommen ist. Es geht einfach beim konkatenieren was schief:

<?php
echo "Calculating " . 6 + 5 . " is fun!";

Nach Operator-Wertigkeit müssen wir natürlich klammern:

<?php
echo "Calculating " . (6 + 5) . " is fun!";

Selbiges Problem tritt auch im Beispiel oben auf. Der Output von microtime() ist Millisekunden (Scriptlaufzeit) Sekunden (time()), also etwa 0.77571900 1350824124.… Den ganzen Post lesen

Veröffentlicht unter php, PHP-WTF, webdev | Hinterlasse einen Kommentar

Best-of-the-Web 11

Nach längerer Zeit mal wieder eine kleine Linksammlung.

Den ganzen Post lesen
Veröffentlicht unter php, Javascript, Best of the Web, webdev | Hinterlasse einen Kommentar

PHP WTF #9

html_entity_decode verwandelt bekanntlicherweise Entities wie &uuml; oder &amp; in ihre Pendandts ü / &.

var_dump(html_entity_decode("&")); //string(1) "&"

Soviel also dazu, soweit erwartungsgemäß. Enter the weirdness:

<meta charset="utf8">
<?php
var_dump(trim(html_entity_decode(" "))); //string(2) " "

Das Manual sagt dazu:

Sie wundern sich vielleicht, warum trim(html_entity_decode(‚ ‚)); den String nicht zu einem leeren Sting reduziert. Der Grund dafür ist, dass ‚ ‚ in der Standard-Kodierung nicht dem Zeichen mit ASCII-Code 32 entspricht (dieses wird von trim() entfernt), sondern dem Zeichen mit ASCII-Code 160 (0xa0).

Genaugenommen verhält sich hier PHP vollkommen korrekt, denn ein Non-Breaking-Space entspricht eben dem ASCII-Code 160. Und der wird leider nicht von trim in der Standardkonfiguration entfernt (siehe 2.… Den ganzen Post lesen

Veröffentlicht unter php, PHP-WTF, webdev | Hinterlasse einen Kommentar

Videoinformationen in PHP auslesen

Ich bin ja extrem begeistert von Libraries, die ihren Zweck genau so erfüllen, wie man es als Anwender / Entwickler wünscht. Die letzte Lobeshymne sang ich auf PHPQRCode, eine exzellente Library, die QR-Codes aus PHP heraus erzeugt.

Hier und heute geht es um einen weiteren Vertreter dieser „Tut genau was sie soll“ – Libraries: getid3. Letztens auf Arbeit sah ich mich mit dem Problem konfrontiert, Videoinformationen auf PHP-Seite auslesen zu müssen und das möglichst ohne Verrenkungen wie mit ffmpeg-php.

getid3 spuckt zu Videos die gewünschten Informationen aus: Datenformat, Codec, Auflösung und Framerate. Dabei zu beachten ist, dass getid3 nur auf den id3-Tags arbeitet und nicht das Video selbst untersucht.… Den ganzen Post lesen

Veröffentlicht unter php, Quicktips, webdev | 1 Kommentar