Archive for the ‘php’ Category

PHP im Hintergrund (fork)

Dienstag, August 16th, 2011

Ja, man kann PHP als Hintergrundprozess, unabhängig vom Browser laufen lassen.

Der Browser macht einen Request. Der Server liefert eine Response, die der Browser anzeigt. Der Server startet zusätzlich einen http-Request im Hintergrund, der unabhängig vom Browser weiterläuft. Wenn der Browser den Request beendet (Stopp-Button), dann läuft der Hintergrundprozess trotzdem weiter.

Hauptscript vom Browser aufgerufen, php_fork_main.php:

echo "<p>start\n";
echo "<p>calling background process\n";
##############################################################
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, 'http://localhost/php_fork_background.php');
curl_setopt ($ch, CURLOPT_TIMEOUT, 1);
curl_setopt ($ch, CURLOPT_POST, false);
curl_setopt ($ch, CURLOPT_FRESH_CONNECT, true);
curl_exec ($ch);
curl_close($ch);
##############################################################
echo "<p>background process called\n";
echo "<p>end.\n";

Hintergrundscript, php_fork_background.php:

ob_end_clean();
header("Connection: close\r\n");
header("Content-Encoding: none\r\n");
ignore_user_abort(true); // optional
set_time_limit(0); // run script until it finish
ob_start();
echo ('<p>Text from background process starting');
$size = ob_get_length();
header("Content-Length: $size");
ob_end_flush();     // Strange behaviour, will not work
flush();            // Unless both are called !
ob_end_clean();

#####################################
# background task
#####################################
echo "<p>background process running, this output is not visible";
for($i=0; $i<10; $i++) {
	$data = date("H:i:s") . " - $i\n";
	file_put_contents('fork_background.log', $data, FILE_APPEND);
	sleep(10);
}

Mit dank an http://www.ivankristianto.com/….

Sammlung interessanter Captchas

Donnerstag, April 28th, 2011

Eine Sammlung interessanter Captchas:

http://www.script-tutorials.com/top10-really-user-friendly-captchas/

Amazon Cloudfront Private Streaming Example

Mittwoch, April 7th, 2010

Update August 2012:
With Amazon servers it is possible to stream videos for Flash and HTML5 video players. So you can view private protected videos on all browsers, mobile phones, ipads and other tablets.
More information: Private Protected Video with Amazon Servers

 

Amazon Cloudfront streaming servers with private URLs have just been online for a few weeks. Therefore there is not much information available nor are there many code examples.

Here are a few links to explaining websites and a working PHP code example.

I hope this helps some other developers 🙂

Amazon Documentation
Amazon Forum
Cloudberry HowTo
Bucket Explorer HowTo

>>> Download Code Example:
>>> cloudfront_private_streaming_example.zip

PHP-Datenbankzugriff über PDO

Mittwoch, März 3rd, 2010

Wie in einem anderen Posting erklärt ( http://donauweb.at/ebusiness-blog/2009/11/15/sicherheit-security-eines-webshops-verbessern/ ), gibt es bei PHP keine 100% Maßnahmen gegen SQL-Injection mit konventionellem Datenbankzugriff. Nur parametrisierte SQL-Befehle bieten mehr Sicherheit. Es ist daher empfehlenswert, nur noch PDO für Datenbankzugriffe zu verwenden.

Um Datenbankzugriffe mit PDO zu vereinfachen habe ich eine Bibliothek-Klasse geschrieben für den Zugriff auf eine Datenbank mittels PDO. Diese Klasse bietet Funktionalitäten wie bei ADODB. Die wichtigsten sind:

  • pdoGetAll($sql, $data) und pdoGetRow($sql, $data) liefern ein oder mehrere Datensätze als Array zurück.
    Der SQL-Befehl kann Parameter beinhalten, deren Werte in $data mitgeliefert werden.
    zB $sql = „select * from table where id=:id“
  • pdoGetAssoc($sql, $data) holt das gleiche Resultat wie pdoGetAll, jedoch wird die erste Spalte zum Index vom Array. Dadurch ist das Lesen von zB definierten ID-Werten nachher wesentlich einfacher.
  • pdoInsUpd($table, $data, $insert_or_update, $where) erstellt einen INSERT oder UPDATE SQL-Befehl an Hand der übergebenen Parameter und führt diesen Befehl aus.

Die Klasse kann als OpenSource downgeloadet werden.

Warum PDF mit PHP erstellen?

Samstag, Januar 9th, 2010

Und warum sollte man ein PDF denn mit PHP erstellen? Man hat ja üblicherweise sein PDF aus einer anderen Applikation erstellt und will es nur auf den Webserver hochladen …

Google kann PDF-Dateien lesen und da PDF-Dateien meistens langlebiger sind als Webseiten werden diese PDF-Dateien von Google relativ hoch bewertet. Also gelten für PDF-Dateien die gleichen Regeln wie für HTML-Dateien:

Wichtige Stichwörter öfters verwenden, Links zur Website angeben, gerne auch Deeplinks (denn in Deeplink-URLs kommen die Stichwörter wieder vor).

Weiters will auch der Kunde vielleicht eine allgemeine Info zur Firma, wenn er ein PDF liest. Vielleicht holt er das PDF ja nicht von der Website der betreffenden Firma sondern über einen anderen Link (zB Google).

Aus obenstehenden Gründen macht es Sinn, PDF-Dateien, die man erstellt hat, mit PHP am Server nachzubearbeiten. Dabei werden neue Seiten mit diesen Informationen zugefügt.

PDF erstellen mit PHP

Samstag, Januar 9th, 2010

Am besten geht das mit TCPDF. TCPDF kann aus HTML ein PDF erstellen und das erleichtert die Sache sehr. Natürlich kann TCPDF nicht alle HTML-Tags und Attribute, aber da man in PHP das HTML selber erstellen kann, ist das leicht zu berücksichtigen.

Wenn zusätzlich PDF-Dateien eingelesen werden müssen, um neue Seiten einzubinden, oder PDF-Dateien zu mergen, dann kann zusätzlich PDI verwendet werden. PDI kann PDF-Dateien einlesen. Das Zusammenspiel von PDI mit TCPDF ist problemlos. Wenn TCPDF inkludiert wird, bevor man ein PDI-Objekt instanziert, dann ist PDI automatisch von TCPDF vererbt.

http://www.tecnick.com/public/code/cp_dpage.php?aiocp_dp=tcpdf
http://www.setasign.de/products/pdf-php-solutions/fpdi/

Sicherheit/Security eines Webshops verbessern

Sonntag, November 15th, 2009

Wenn man einen Webshop laufend beobachtet, dann findet man immer wieder Angriffe auf den Webshop. Hacker versuchen, Schwachstellen des Webshops auszunutzen. Hier folgen einige Methoden, wie Hacker versuchen einzubrechen und was man dagegen unternehmen kann.

Angriffe auf Webshops und Schutz dagegen

Erklärung von Anriffsmöglichkeiten
http://www.suspekt.org/2009/06/16/dutch-php-conference-the-slides/

Viele interessatnte Artikel über Sicherheit
http://entwickler.de/zonen/portale/psecom,id,125,nodeid,.html
http://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet

Wie funktioniert SQL-Injection genau?
http://www.securiteam.com/securityreviews/5DP0N1P76E.html
http://unixwiz.net/techtips/sql-injection.html

Angriffserkennung in PHP
http://php-ids.org/

XSS-Tricks
http://ha.ckers.org/xss.html

XSS-Schutz in PHP
http://wiki.flux-cms.org/display/BLOG/XSS+Prevention

Die wohl beste Bibliothek zur Prüfung von Form-Eingaben
HtmlPurifier

top-15-free-sql-injection-scanners

Sicherheitsberater, die Angriffstests durchführen (Penetration Test)
(ich habe einige kontaktiert, bei diesen hatte ich ein gutes Gefühl)

http://www.redteam-pentesting.de
https://www.mark-semmler.de
http://www.internet-sicherheit.de
http://www.it-sec.de/

Titanium bringt das Web in den Desktop

Samstag, Oktober 24th, 2009

Desktop-Applikationen schreiben mit Web-Technologie:

Applikation schreiben in JavaScript, HTML, CSS, Python, Ruby und bald PHP
und laufen lassen auf Windows, Mac OS and Linux

Titanium ist ein Framework mit inkludiertem Browser und Zugriff auf alle Betriebssystem-Funktionen.

Titanium Desktop
Mehr Info auf http://www.codestrong.com/
Slideshow Intro
Diskussionsforum http://support.appcelerator.net/home

PHP beschleunigen

Samstag, Juni 20th, 2009

Hier gibt es einige Tipps zum beschleunigen von PHP-Code:
http://reinholdweber.com/?p=3
http://www.hm2k.com/posts/50-php-optimisation-tips-revisited

Aber … manche Maßnahmen zur Beschleunigung reduzieren die Lesbarkeit der Applikation. Das macht dann die Wartung zeit- und kostenintensiver und aus diesem Grund muss man immer überlegen, was in welchem Fall wichtig ist.

Caching

Samstag, Juni 20th, 2009

Caching kann die Response des Browsers sehr beschleunigen. Grundsätzlich gibt es 2 Ansätze:

  1. Caching im Browser
    Der Server muss dem Browser Anweisungen senden, damit der Browser ganze Dateien cacht.
  2. Caching im Server
    Der Server cacht HTML von Teilen von Webseiten. Diese Teile müssen dann nicht mehr für jeden Aufruf neu generiert werden. Die gesamte Seite kann personalisiert sein, denn es kann auch Seitenteile geben, die nicht gecacht werden.

Caching ist sehr gut erklärt in diesem Artikel (ist von Nov. 2007 aber immer noch aktuell):
http://www.sitepoint.com/article/caching-php-performance/

Eine weitere Art des Cachings, die (1) und (2) kombiniert:
Die Teile einer Seite, die aktuell sein müssen, werden mit AJAX inkludiert. Dann kann die gesamte HTML-Seite im Browser gecached werden. Bei einem erneuten Aufruf der Seite im Browser wird die Seite aus dem Cache geladen, der AJAX-Aufruf findet aber erneut statt und dieser Teil der Seite ist somit immer aktuell.

Ein Nachteil dieser Methode ist, dass auch beim 1. Aufruf der Seite 2 http-Requests erforderlich sind um die gesamte Seite anzuzeigen.