Kapselung in PHP / ab PHP5

Das objektorientierte Konzept der Kapselung hat seit der Version 5 in PHP Einzug gehalten. Ab PHP5 hat der Entwickler die Möglichkeit, Attribute und Mehoden mit pbulic, protected und private zu verstecken. Die Bedeutung der Schlüsselwörter ist wie folgt:

  • public
    Auf Variablen oder Methoden, die mit public deklariert sind, kann von jedem Benutzer der Klasse zugegriffen werden.
  • protected
    Auf Variablen oder Methoden, die mit protected deklariert sind, kann nicht von jedem Benutzer der Klasse zugegriffen werden.
    Allerdings ist der Zugriff über vererbte Klassen möglich.
  • private
    Auf Variablen oder Methoden, die mit private deklariert sind, kann nur innerhalb der Klasse, in welcher sie definiert wurden, zugegriffen werden.
    Auch der Zugriff über vererbte Klassen is hier nicht möglich.

PHP Vererbung

Das objektorientierte Konzept der Vererbung findet seit einiger Zeit auch bei PHP Anwendung, seit PHP 5 sowieso.
Vererbung wird immer dann eingesetzt, wenn man eine neue Klasse erstellen möchte, die ähnliche Eigenschaften und Methoden besizt, wie eine bestehende Klasse. Man setzt also die Vererbung ein, um die neue Klasse zu erweitern, ohne die Elternklasse zu ändern.
In PHP leitet man eine neue Klasse von einer bestehenden Klasse folgendermaßen ab:

class Neue_Klasse extends Alte_Klasse
{

}

Das Schlüsselwort extends zeigt an, dass es sich um eine Ableitung handelt.
Es stehen automatische alle Eigenschaften und Funktionen der alten Klasse zur Verfügung.

In PHP5 gibt es allerdings noch die __contruct()-Methode, die bei der Intitialisierung einer Klasse immer aufgerufen wird, die aber
bei der Ableitung über extends extra in der neuen Klasse aufgerufen werden muss, und zwar so parent::construct(); :

class Neue_Klasse extends Alte_Klasse
{
	function __construct()
	{
		parent::construct();
	}
}

Darüberhinaus ist es gut zu wissen, dass in PHP5 als private deklarierte Funktionen nicht vererbt werden.

CLI funktioniert nicht mehr

Xampp wurde gerade installiert, um damit symfony lokal auf einem Windows Vista – Rechner zu testen. Nun kommt es aber zu einem Problem, wenn man symfony Befehle an der Kommandozeile bzw. über die Windows-Eingabeaufforderung (cmd) eingibt.

Immer dann, wenn man also an der Kommandozeile symfony-Befehle eingebe, wie z.B. symfony init-project, symfony -V etc, poppt eine Vista Fehlermeldung auf, die sagt:
CLI funktioniert nicht mehr.

Schaut man dann die Problemdetails an, so ist der Auslöser dieses Fehlers, die mit xampp installierte php.exe.

Folgendes hilft:
1.
Download derselben PHP-Version, in diesem Falle PHP 5.2.8, die bereits mit xampp installiert wurde.
http://www.php.netdownloads.php

2. Entpacken des Archives und Ersetzen der alten Dateien im xampp-PHP-Verzeichnis mit den neuen, also denen die man eben gerade herunergeladen hat

Dabei wird die alte php.exe überschrieben und der Fehler ist behoben.

Symfony unter Windows / xampp installieren

Um das PHP-Framewprk symfoy unter Windows zu installieren, sollte man sich zuerst die aktuelle xampp-version besorgen und installieren.
Dies kann man zum Beispiel hier tun:
http://www.apachefriends.org/de/xampp.html

Apache und MySQL als Dienste gleich mitinstallieren und dann war’s das schon.
Sollte xampp beim ersten Start meckern, dass Port 80 oder Port 443 bereits belegt sind, dann liegt’s mit ziemlicher Sicherheit an Skype.
Lösung: Bei Skype kann man unter Aktionen->Optionen->Erweitert->Verbindung das Häkchen bei Ports 80 und 443 als Alternative für eingehende Verbindungen verwenden herausnehmen.
Nun lädt man sich die neues Symfony-Version herunter und entpackt sie nach C:\symfony.
Downloaden kann man sich die neueste Stable Version hier:
http://www.symfony-project.org/installation

Im Ordner C:\symfony\data\bin muss jetzt noch die symfony.bat angepasst werden.
Zeile 25 ersetzt man hiermit:

 %PHP_COMMAND% "C:\symfony\data\bin\symfony" %*

Zeile 34 ersetzt man hiermit:

 set PHP_COMMAND=C:\xampp\php\php.exe

Wir gehen jetzt davon aus, dass C: unser Projektverzeichnis wird. Über die Eingabeaufforderung (Start->Ausführen->cmd) tippen wir also folgendes ein, um einen Projektordner anzulegen:
cd C:\
mkdir newProject

Um jetzt Projektdateien dorthin zu kopieren, tippt man in der Konsole einfach
symfony init-project projektName
ein.

Jetzt kann man normal mit symfony arbeiten..

Falsche Rechte nach Upload von Bildern in Contenido

Gerade tauchte folgendes Problem auf:
Nach dem Upload von Bildern über die Contenido (V. 4.6.15) Dateiverwaltung konnten die hochgeladenen Bilder aber nicht im Artikel eingefügt werden. Nach einem Blick auf den Webserver konnte festgestellt werden, dass die Bilder nach dem Upload mit falschen Rechten (chmod 666) ausgestattet waren, obwohl der Ordner die richtigen Rechte hatte.
Ein Zugriff auf den Webserver per ssh war nicht möglich. Dank des Contenidoforums konnte folgende Lösung gefunden werden.
Man lege im Ordner www.domain.de/contenido/plugins/chains/includes die Datei include.chain.upload.uploadpreprocess.php an.
Diese befüllt man mit folgendem Code:

function cecUploadPreprocess($temp_name, $new_name)
{
   if(file_exists($temp_name))
   {
      @chmod($temp_name, 0755);
   }
   
   if(file_exists($new_name))
   {
      @chmod($new_name, 0755);
   }
   
    return $temp_name;
   }

Es ist sehr wichtig, auf Leezeichen vor und nach den header already sent Fehlermeldung kommt.

Als zweiten und letzten Schritt muss man nun noch die Datei config.plugin.php anpassen bzw. erweitern.

cInclude("plugins", "chains/includes/include.chain.upload.uploadpreprocess.php");
$_cecRegistry->addChainFunction("Contenido.Upload.UploadPreprocess", "cecUploadPreprocess");

Das war’s… wenn’s nicht gehen sollte, dann kommentiert einfach diesen Beitrag!

E-mail per Actionscript2 und PHP senden

Um aus einem Acionscript oder Actionscript 2 – gesteuerten Film eine E-Mail, z.B. aus einem
Formular zu versenden, kann man die PHP Funktion mail() nutzen, die über einen Webserver eine Mail versendet, ohne dass der User ein E-Mail Programm installiert haben muss, wie es z.B. bei mailto() der Fall ist.

Sagen wir das das Formular enthält 2 Eingabetextfelder firma und email. Nach Klick auf den Senden-Button führt man zuerst das Versenden der variablen durch. Wichtig ist im Beispiel, dass die swf im selben Verzeichnis wie das PHP-Script liegt.

sendbutton.onRelease = function
{
	var loadsend:LoadVars = new LoadVars()
	loadsend.sendAndLoad("script.php", this, "POST");
}

So sollte das PHP-Script aussehen:

//Empfänger E-Mail angeben
$mailto="email_des_empfaengers@web.de";

//Variablen verarbeiten
$inhalt = "Firma: ".$_POST['firma']."\n";
$inhalt .= "E-Mail: ".$_POST['email']."\n";

//Mail senden
$senden = mail($mailto, "Mail von".$_POST['firma'], $inhalt, "From: ".$_POST['email']);

//Wert zurückgeben
echo "senden=$senden";

Nach dem Versand steht in Flash die Variable senden zur Verfügung, welche bei erfolgreichem versand true, andernfalls false ist.

PHP Klasse erstellen und Funktion definieren

Wie schon in einem vorangegangen Artikel beschrieben, erstellt man eine ganz einfache PHP Klasse mit folgendem Konstrukt:

class myClass
{

     // eine Eigenschaft mit einem Standardwert anlegen
    var $eigenschaft = "rot";


}

Um nun eine Funktion zu schreiben, die beispielsweise die Eigenschaft $eigenschaft ausgibt,
geht man folgendermaßen vor:

class myClass
{

     // eine Eigenschaft mit einem Standardwert anlegen
    var $eigenschaft = "rot";

    //Funktion zum Auslesen der Eigenschaft
    function getEigenschaft() {
	echo $eigenschaft;
    }


}

Mit dem Befehl echo $eigenschaft; wird PHP angewiesen die Variable auszugeben.
Ein return $eigenschaft; würde die Eigenschaft nur zurückgeben, um sie beispielsweise in einer
Variable zu speichern.

Nun muss die Klasse noch in eine php-Datei eingebunden und die Funktion aufgerufen werden.
Wir gehen im Beispiel davon aus, dass die Klasse in der Datei class.php gespeichert ist.


//Klasse einbinden
include 'class.php';

//Eine Klassenobjekt erstellen
$myClass = new myClass();

//Funktion aufrufen
$myClass -> getEigenschaft();


Wenn man in der Funktion statt des Befehls echo ein return verwendet, kann man eine Ausgabe folgendermaßen realisieren:


//Klasse einbinden
include 'class.php';

//Eine Klassenobjekt erstellen
$myClass = new myClass();

//Funktion aufrufen und Rückgabe in Variable speichern
$myVar = $myClass -> getEigenschaft();
echo $myVar;

PDF Rechnungen erstellen

Um aus einem PHP Dokument ein PDF zu erstellen, wie zum Beispiel eine Rechnung oder einen Lieferschein, kann man die kostenfreie PHP Bibliothek fpdf verwenden.
In der zentralen Klasse legt man über Funktionen das Aussehen von Text fest, zum Beispiel so:

function Header($text) {
$this->SetFont('Arial','',18); //Schrifttyp setzen
$this->MultiCell(0,5,$text); //Mehrere Zeilen?
$this->Ln(5); //Abstand
}

Dann gehts an die Einbindung bzw. Ausgabe:

$pdf = new PDF('P','mm','A4'); //Objekt erzeugen
$pdf->AddPage(); //Erste Seite hinzufügen
$pdf->Header($text); //Header ausgeben
$pdf->Output(); //Ausgabe starten
}

Soziale Community für Joomla

Neben der bekannten CommunityBuilder-Komponente, die sicher die meisten Joomla-Communities einsetzen, gibt es nun auch noch ein weitere Komponente, die eher darauf abzielt, soziale Communities, ähnlich wie studiVZ abzubilden. Nachrichtensystem, Freundesliste, Rich-Media Funktione und vieles mer bietet

JomSocial

Für einen kleinen Preis kann man diese Komponente hier bekommen:

http://www.jomsocial.com/

Joomla 1.5 erweiterte / verbesserte Benutzerverwaltung

Da Joomla ja auch in der aktuellen Version 1.5.9 noch eine eher spartanische Benutzerverwaltung hat, muss eben eine Komponente ran. Die Komponente cACL erweitert die Möglichkeiten der Joomla-internen Benutzerverwaltung beträchtlich.
Es sind z.B. für jede User folgende Einstellungen möglich:
– Useradministration (Verwalten der User)
– Zugriffsbeschränkung auf Sektions-, Kategorie- Artikelebene
– Zugriffe / Zugriffsteuerung auf Menüs (Erstellung, Bearbeitung)
– Zugriffe / Zugriffsteuerung auf den MediaManager

Folgend finden Sie einen Demozugang zu diesem Tool.
Loggen Sie sich den Anweisungen entsprechend mit folgenden Zugangsdaten ein:

User: admin10
PW: 123456a

Demozugang:
http://caclmvc.joomlavn.info/administrator/index.php?option=com_login