Pixelfans

Kategorie: PHP

30 Jun 2011

DropBox und PHP

geschrieben von Pawel

Als ich eine Einladung für die DropBox bekommen hatte, fand ich das zunächst nicht spektakulär. Unter Linux bin ich es gewohnt, nahezu jedes Laufwerk mounten zu können. Komfortable Programme für Mobiles und jedes Betriebssytem und das automatische und schnelle Synchronisieren haben mich überzeugt. Daten in die DropBox zu schieben ist so einfach, dass es jeder kann, der sich mit einem Smartphone oder Computer ein wenig auskennt.

DropBox Logo Seit Mai 2010 steht auch eine API zur Verfügung, die aber Wünsche offen lässt. Es gibt nur eine Handvoll Methoden. Irritierend ist dabei auch die Begrifflichkeit. Natürlich ist der Zugriff nicht nur vom Smartphone möglich.

Die für mich naheliegende Anwendung per PHP Daten aus der DropBox in das CMS seiner Wahl zu kopieren, scheint niemand bisher realisiert zu haben. PHP scheint von den Entwicklern ohnehin nicht Sprache der Wahl zu sein, obwohl es eine Klasse bei Google Code gibt, die aber sehr viele Abhängigkeiten mitbringt.

Glücklicherweise hat sich Tijs Verkoyen dieses Problem angenommen und eine kompakte Klasse entwickelt, die sich auch der OAuth-Problematik annimmt. Damit lassen sich alle Methoden der API aufrufen. Tijs hat eine Dokumentation zur Verfügung gestellt.

Zur Nutzung benötigt man neben der E-Mailadresse und seinem Passwort die zwei Keys, die man bei der Registrierung einer APP in der DropBox erhält.Die API erhält keine Methode, um Dateien auf den eigenen Webspace zu verschieben. Deshalb muss dort die Datei neu anlegt werden und den Inhalt des Response hinein schreiben.

$dest = 'test';//folder on your pc
if (isset($_GET['file'])) {
//kleine Pfadverschleierung
$dbfile = x0rdecrypt($_GET['file'], $secretxorkey) ;
$response = $dropbox->filesGet($dbfile);
//sichere Dateinamen
$filename = array_pop(explode('/', $dbfile));
$file = base64_decode($response['data']);
//Datei neu im Zielverzeichnis anlegen
$file_copy = fopen( './'.$dest.'/'.$filename,"wb");
//schreiben und schließen
fwrite($file_copy, $file);
fclose($file_copy);
}

Da der Beispielcode diesmal deutlich umfangreicher geworden ist, habe ich bei Github einen Fork der Klasse angelegt und die Beispieldateien ergänzt. Das Ergebnis ist eine übersichtliche Oberfläche, die es ermöglicht Dateien anzuschauen oder zu verschieben. Screenshot des Webzugriffs auf die DropBox

Kategorie: Ideen , PHP | Trackbacks (0) | Permalink

23 Feb 2011

Wordpress Datenbankfehler abfangen

geschrieben von carsten

Wer wordpress betreibt wird u.U. schon einmal die Meldung “Error establishing a database connection” gelesen haben. Diese Meldung kommt immer dann, wenn man entweder die Datenbankanbindung falsch konfiguriert hat oder der hostende Server gerade soviele Anfragen zu bearbeiten hat, dass die Zeit überschritten wird, die das System standardmäßig abwartet bis die Antwort des MySQL Servers kommt.

Im Falle einer falschen Konfiguration ist das Problem sicher schnell behoben. Leidet aber die Maschine kurzzeitig oder dauerhaft an einer Überlastung müssen die Nutzer immer wieder mit dieser Meldung Vorlieb nehmen, was nun wahrlich unschön ist.

Eben dieses zweite Szenario hat mich gestern den ganzen Tag über auf christianrach.de beschäftigt. Nachdem diese Sendung bei RTL lief, ging der Server schon am Ausstrahlungsabend zeitweise in die Knie und kriegte sich auch am Folgetag gestern nicht wieder ein.

Meine erste Aktion war es, eine index.html im DocumentRoot zu hinterlegen, die alle ankommenden Nutzer über die aktuelle Überlastung und unser Engagement, etwas dagegen zu tun, informiert. Die Aktion war nötig, brachte mich aber auch in die verzwicklte Lage immer wieder nachsehen zu müssen, ob der Server schon wieder so stabil läuft, dass es Sinn machen würde die Datei wieder zu entfernen.

Viel klüger ist es da, wordpress selber entscheiden zu lassen, wann es keine Puste mehr hat und entsprechend meine Abfang-Datei auszuliefern.

Wie das funktioniert, ist im Codex erklärt und brachte mich dazu einfach den gesamten Inhalt meiner index.html in eine neu anzulegende Datei namens db-error.php zu packen, die im Verzeichnis /wp-content hinterlegt wird.

Jetzt kann ich mich getrost zurücklegen und abwarten, bis der Server das nächste Mal in die Knie geht. Schön, dass es jetzt mindestens so aussieht als sei noch alles in Ordnung.

Kategorie: PHP | Trackbacks (0) | Permalink

25 Nov 2010

Twitter mit PHP und OAuth

geschrieben von Pawel

Twitter entwickelt sich weiter. Ab dem Sommer 2010 erfordert die Nutzung der API eine Authentifizierung mittels OAuth. Dadurch ist die Einbindung von Tweets nicht mehr so einfach, wie in diesem alten Artikel beschrieben.

A Twitterbird made with Inkscape by Andreas Fritsch, http://www.batik-gbr.de Es ist immer nötig seine Anwendung bei Twitter zu registrieren, um die benötigten 4 Schlüssel zu bekommen. Glücklicherweise hat sich Tijs Verkoyen Gedanken gemacht und eine kompakte PHP-Klasse zur Verfügung gestellt, die uns die Hauptarbeit abnimmt. Beim folgenden Code-Beispiel wird ein beschreibbares Cacheverzeichnis erwartet. Das ist sinnvoll, da die Anzahl der Abfragen an den Twitterdienst beschränkt sind.Die genaue Struktur der gelieferten Daten entnimmt man am Besten der Twitter-Dokumentation.

Codebeispiel (liefert eine Liste der letzten 5 Einträge)

//Variables for OAuth Authentification
$consumer_key    = 'yourconsumerkey';
$consumer_secret = 'yourconsumersecret';
$token = 'yourtoken';
$token_secret = 'yourtokensecret';

//Count of the Tweets
$count = 5;

// create instance
$twitter = new Twitter($consumer_key, $consumer_secret);

// set tokens
$twitter->setOAuthToken($token);
$twitter->setOAuthTokenSecret($token_secret);


// get users timeline
$cacheFile= $_SERVER['DOCUMENT_ROOT'].'/test/cache/cache.txt';
if(!file_exists($cacheFile) || filemtime($cacheFile) < time() -40)
{

$response = $twitter->statusesUserTimeline();
file_put_contents($cacheFile, serialize($response));
}
else{
$response = unserialize(file_get_contents($cacheFile));
}

echo "<ul>";
for($i = 0; $i < $count; $i++)
    {
    echo "<li><img src=\"".$response[$i][user][profile_image_url]."\" alt=\"Twitterbild von ".$response[$i][user][name]."\" />";
     echo preg_replace('/(http:\/\/[^ ]+)/', '<a href="$1">$1</a>', utf8_decode($response[$i][text]));
    echo "</li>";
    }
echo "</ul>";
Damit ist die Einbindung von Tweets (fast) so einfach, wie früher

Kategorie: PHP | Trackbacks (0) | Permalink