PHPGangsta - Der praktische PHP Blog

PHP Blog von PHPGangsta


Archive for Juli, 2009

Rezension des Buches „PHP 5.3 – Die Neuerungen“

with 2 comments

Nachdem ich am 30.06.2009 via Twitter bei einem Gewinnspiel des Twitter-Users entwicklerpress zwei mal das Buch „PHP 5.3 – Die Neuerungen“ gewonnen habe, habe ich es heute gelesen und möchte meinen ersten schriftlichen Bücher-Review zum Besten geben. Es sei auch noch angekündigt, dass ich in einigen Tagen das zweite Exemplar (es ist natürlich noch orginal verschweißt) hier im Blog verschenken werde. Wie dieses genau stattfindet, werdet ihr dann erfahren.

PHP 5.3 - Die NeuerungenDas Buch heißt wie gesagt „PHP 5.3 – Die Neuerungen“, wurde von Stefan Priebsch verfasst und von entwickler.press verlegt. Es umfasst insgesamt 168 Seiten, und soll uns Entwicklern einen Leitfaden und eine Übersicht geben, was sich mit PHP 5.3 ändert, was es Neues gibt, und welche Funktionalitäten entfernt wurden. Es kostet 12,90 Euro.

Weiterlesen »

Written by Michael Kliewe

Juli 3rd, 2009 at 6:39 pm

Nicht-HTML-Responses mit dem Zend Framework

with 5 comments

Wenn man dynamische Bilder oder RSS-Feeds oder einen AJAX/JSON-Service oder ein Excel-Export mithilfe des Zend Frameworks erstellen will, mußt man 2-3 wichtige Dinge beachten. Der Code soll dann in einem Rss-/Graph-/Ajax-/Export-Controller stehen.

Ein Problem bekommt man, wenn man ein Layout benutzt (Zend_Layout). Denn dann wird dieses Layout immer ausgegeben. Im hier betrachteten Fall wäre das aber sehr schädlich, denn dadurch würden wir unser Bild/RSS-Feed/AJAX/Excel-Response zerstören.

Unschön kann man das wie folgt lösen:

public function rssAction()
{
	// calculate rss data and echo it (with correct headers)

	exit;
}

Richtig und deutlich schöner ist das Abschalten des Layout in der Action, wie folgt:

public function rssAction()
{
	// disable layout
	$this->_helper->layout()->disableLayout();
	
	// disable view rendering
	$this->_helper->viewRenderer->setNoRender();
	
	// calculate rss data and echo it (with correct headers)
}

Wir schalten auch gleich noch den ViewRenderer mit aus, damit auch nicht versucht wird, ein Viewscript zu rendern (das es wahrscheinlich garnicht gibt).

Dieses RSS-Beispiel funktioniert natürlich genauso für die anderen Beispiele, wo kein klassischer HTML-Quelltext zurückgegeben werden soll, sondern eine Antwort in einem anderen Format gefordert ist.

Damit kann man dann seine dynmisch erstellten Bilder (z.B. mittels pChart, jpgraph oder direkt die GD-Funktionen/image* in php), RSS-Feeds (Zend_Feed), Ajax-Services (Zend_Json) usw. realisieren.

Hier noch schnell ein Beispiel eines Excel-Exports aus einer Datenbank, mit Hilfe der Spreadsheet-Klasse aus dem PEAR-Framework (vereinfacht auf das Wesentliche):

class ExportController extends Zend_Controller_Action
{	
	public function excel() {
		// disable layout
		$this->_helper->layout()->disableLayout();
		
		// disable view rendering
		$this->_helper->viewRenderer->setNoRender();

		
		// get some data from database here
		
		       
		// create empty file
		//include 'Spreadsheet/Excel/Writer.php';
		$excel = new Spreadsheet_Excel_Writer();
		// add worksheet
		$sheet =& $excel->addWorksheet('Daily Export');

		$sheet->setColumn(0,0,20);
		$sheet->setColumn(1,1,15);
		$sheet->setColumn(2,2,18);
		$sheet->setColumn(3,3,23);
		$sheet->setColumn(4,4,35);
		$sheet->setColumn(5,5,15);

		$format_bold =& $excel->addFormat();
		$format_bold->setBold();

		$format_headline =& $excel->addFormat();
		$format_headline->setBold();
		$format_headline->setSize(20);
		$format_headline->setAlign('center');

		// headline
		$sheet->write(0, 0, 'Results: '.date('d.m.Y H:i'), $format_headline);
		$sheet->mergeCells(0,0,0,5);

		// add data to worksheet
		$rowCount=2;

		foreach ($data as $groupName=>$serverData) {
			$sheet->write($rowCount, 0, $groupName, $format_bold);
			$rowCount++;

			foreach ($serverData as $row) {
				$colcount = 0;
				foreach ($row as $key => $value) {
					$sheet->write($rowCount, $colcount, $value);
					$colcount++;
				}
				$rowCount++;
			}
			$rowCount++;
		}
		// send client headers
		$excel->send('daily_export_'.date("Ymd-His").'.xls');
	}		
}

Dies hier ist alter Code, mittlerweile nutzen wir PHPExcel.

Written by Michael Kliewe

Juli 2nd, 2009 at 2:52 pm

Posted in PHP

Tagged with , , , , , ,

PDT 2.1 unter Windows mit Subclipse SVN Client

with 8 comments

Meine aktuell favorisierte IDE für PHP ist eclipse. Eclipse ist eine vielfach nutzbare IDE, die ursprünglich für Java gedacht ist, aber auch andere Sprachen wie PHP, C, C++ und einige weitere unterstützt. Zend höchstselbst entwickelt die „PHP Development Tools“, auch PDT genannt, was im Prinzip ein eclipse inclusive aller nötigen PHP-Module plus den Zend-Local-Debugger ist.

PDT ist seit kurzem in Version 3.5 verfügbar, Codename Galileo. Zum Download steht es bei Zend: http://www.zend.com/de/community/pdt . PDT ist heute die erste und einzige IDE, die PHP 5.3 unterstützt, die anderen IDEs (mehr dazu am Schluss) werden aber sicher bald nachziehen.

Die Installation ist denkbar einfach: zip herunterladen und entpacken, danach die eclipse.exe starten und man kann loslegen. Da ich jedoch meinen Code im SVN liegen habe, muß ich als erstes noch einen SVN-Client installieren. Zur Auswahl gibt es aktuell Subclipse und Subversive. Ich bevorzuge Subclipse, es lief bisher ohne Probleme. Via Google kann man dazu jede Menge Vergleiche finden, das möchte ich hier nicht breittreten, da könnt ihr euch selbst informieren: „Subversion vs Subclipse“ @ Google

Die Installation ist schnell gemacht:

install0

Dann die Subclipse-Site hinzufügen (Links gibt es auf der Subclipse Seite):

install1

Dann kann man aus den verfügbaren Paketen das Subclipse auswählen:

install2

Details nochmal bestätigen:

install3

Dann noch einen Neustart von eclipse, fertig! Dann kann man links mit Hilfe der Import-Funktion ein Projekt aus dem SVN auschecken.

install4

Nicht unerwähnt bleiben soll jedoch, dass es natürlich gute alternative PHP IDEs gibt, wie zum Beispiel Netbeans oder das kostenpflichtige Zend Studio for eclipse. In der Firma sind wir aktuell gespalten, einige sind umgestiegen auf Netbeans, ich jedoch bleibe vorerst beim PDT, da es bisher NIE Probleme machte (außer man updated eine lokale Kopie mit dem TortoiseSVN Client, dann kann eclipse diese lokale Kopie nicht mehr öffnen, also entweder den eclipse-internen SVN-Client ODER TortoiseSVN nutzen, aber das ist eine andere Geschichte)

Written by Michael Kliewe

Juli 1st, 2009 at 11:47 pm

Posted in Allgemein