Mit PHP chmod Rechte setzen (Dateien und Ordner)

30. April 2010 in PHP von Leo

Als ich kürzlich mit einem Freund an einem Projekt arbeitete, auf welchem später TYPO3 laufen wird, hatten wir mal wieder das Problem, dass ein Ordner welcher auch noch Dateien enthält nicht mehr vom FTP Server gelöscht werden konnte. Als das Problem erstmals vor einer Woche auftrat, konnten wir es lösen indem wir einfach einen anderen FTP Client (ich glaube es war SmartFTP) anstatt Filezilla nahmen. Dieser konnte alles löschen.

Doch nun lässt sich gar nichts mehr löschen. Die Rechte waren wenn ich mich besinne auf chmod 755, trotzdem machte weder eine Datei noch der Ordner einen wank.

Also schreib ich kurz ein kleines PHP Script, in welchem ich das ganze per PHP lösen versuchte (nein es funktionierte sogar!) :)

Das Script sah dann so aus:

<?php

chmod ("ordnerxy/.htaccess", 777);
chmod ("ordnerxy/.htaccess", "drwxrwxrwx");
chmod ("ordnerxy/.htaccess", 0777);

chmod ("ordnerxy", 777);
chmod ("ordnerxy", "drwxrwxrwx");
chmod ("ordnerxy", 0777);

echo 'ok';

?>

Im ersten abschnitt werden der Datei “.htaccess”, welche im Ordner “ordnerxy” liegt die rechte 777 gegeben. Im zweiten abschnitt werden die selben Rechte auch noch dem Ordner “ordnerxy” gegeben, da sich dieser ja auch nicht löschen liess. Eventuell reicht es sogar wenn man nur dem Ordner die nötigen Rechte gibt.
Um das Script zum laufen zu bringen müssen natürlich jeweils die Pfade angepasst werden, stets vom Script ausgegangen.
In unserem Beispiel hier würde das in etwa so aussehen:

/ordner1/ordnerxy/...

Dabei wäre das Script im Ordner “ordner1″.

Als Datei können übrigens auch andere Dateien mit anderen Dateiendungen angegeben werden.

Das Script muss einfach kurz im Browser aufgerufen werden. Mit dem “echo” am Schluss wird noch bestätigt dass man wirklich das Script geöffnet hat.

PHP Grundkurs 1: echo Ausgabe

in Grundkurs, PHP von Leo

Hallo, dies ist der erste Teil meiner PHP Grundkurs Reihe. Hier zeige ich euch PHP und erkläre euch einiges, damit auch ihr diese Web Programmiersprache erlernen könnt. Anbei möchte ich noch anmerken, dass auch ich erst PHP lerne und die Sprache somit auch noch nicht super beherrsche, aber ich bin dran. Und hier in diesen kleinen Kursen zeige ich euch jetzt, was ich bisher so gelernt habe.

Das erste was man in PHP lernen sollte, was auch sehr simpel ist, jedoch immer benötigt ist, ist die einfache Ausgabe mit ‘echo’.

Zu erst erstellt ihr ein PHP File mit der Dateiendung “.php”. Damit der PHP Code als PHP Code gesehen wird (man kann PHP ja auch in HTML verwenden, dazu aber später noch mehr), muss er in den, ich nenne sie mal PHP Tags stehen. Diese sehen wie folgt aus:

<?php

// Kommentar

?>

Wenn ihr ein anständiges Programm wie Aptana, Notepad++ etc. habt, dann wird euch dieses alles “färben” (Code Highlighting), mehr zu den richtigen Programmen und eine kurze Erklärung folgt noch in einem weiteren Artikel.

Doch zurück zur ‘echo’ Ausgabe. Eine einfache Textausgabe macht ihr nun so:

<?php

echo "Hello World";

?>

Der Syntax ist sehr einfach. Zuerst ‘echo’ dann die Ausgabe in Anführungszeichen und danach, wie in PHP halt üblich, ein Semikolon ‘;’.
Wer das ganze noch mit HTML Code erweitern will, also direkt in der Ausgabe drin, der nutzt die ”:

<?php

echo '<u>Unterstrichen</u><br/>';

?>

Die Ausgabe wäre nun Unterstrichen und nach dem Text folgt ein ‘br’ (break), also ein Zeilenumbruch.

Wer die Ausgabe mehrmals ausgeben will, kann das ganze nun in einer Variable abspeichern, so muss der Text nicht immer neu geschrieben werden. Um dies zu tun, muss der Text in einer Variable gespeichert werden, also die Variable zuerst definiert werden.
Dies geht folgendermassen:

<?php

$hallo = 'Hallo!';

echo $hallo;

?>

In der Variable ‘$hallo’ (Variablen immer mit einem $-Dollar Zeichen am Anfang!) wird also der Text ‘Hallo!’ gespeichert. Im echo wird danach die Variable ausgegeben, also der gespeicherte Wert (‘Hallo!’) in der Variable. Beim Ausgeben einer Variable werden keine Anführungszeichen im echo benötigt, sondern lediglich das $-Dollar Zeichen welches immer vor den Variablen ist.
Würde man im echo die Variable $hallo mit Anführungszeichen ausgeben wollen, würde uns das echo keine Variable, sondern einfach den genauen Text, also ‘$hallo’ ausgeben, was wir ja nicht wollen.

Mehrere Variablen am Stück

Wer nun mehrere Variablen an einer Kette ausgeben möchte, oder auch z.B. eine Variable und einen normalen Text in Anführungszeichen, kann dies so tun:

<?php

$hallo = 'Hallo';
$welt = 'Welt';

echo $hallo . $welt;

?>

Das ganze aneinander hängen geschieht wie ihr oben seht, mithilfe eines Punktes ‘.’
Im Code oben würde die Ausgabe aber HalloWelt heissen, ohne einen Abstand zwischen den beiden Wörtern. Um dies schön zu lösen, hängt mein einfach ein Leerzeichen dazwischen:

<?php

$hallo = 'Hallo';
$welt = 'Welt';

echo $hallo . ' ' . $welt;

?>

Nun ist die Ausgabe schön dargestellt.

Das war Teil 1, Teil 2 folgt demnächst.

Firefox: ICQ Search entfernen

in Software, Tutorials von Leo

Wer hatte das noch nie: Da installiert man ein Programm, klickt immer schön auf den “Weiter”-Button um fortzufahren und merkt dann beim nächsten Firefox Start, dass neben dem Programm auch noch einige andere Änderungen vorgenommen wurde – ich rede von der wirklich nervigen ICQ Search. Die ICQ Search wird bei der Installation von ICQ (und womöglich auch einer Hand voll anderer Programmen) mit installiert, wenn man nicht genau aufpasst, nämlich ist das entfernen eines Häckchen nötig, wenn man gefragt wird ob man die ICQ Search bzw. ICQ Toolbar mit installieren möchte.

Wer die Toolbar oder Search installiert hat, dem wurde die Standard Google-Suche in Firefox mit der nervigen ICQ Search ersetzt. Um diese wieder zu entfernen und alles wieder auf die Standardwerte zu setzen geht ihr folgendermassen vor:

1. Checkt zu erst in der Systemsteuerung unter Programme (Software) deinstallieren ob eventuell auch gleich noch andere Programme statt nur Plugins oder Änderungen installiert wurden. Entfernt diese falls vorhanden.

2. Öffnet nun Firefox und tippt die die Adresszeile folgenden Text ein und drückt Enter:

about:config

Bestätigt danach das ihr Aufpassen werdet.

3. Sucht nun in der config Übersicht oben im Suchfeld nach keyword.URL. Nun stosst ihr auf einen Wert in welchem anstatt Google etwas mit ICQ steht. Einfach über Rechtsklick auf den Standardwert zurücksetzen.

4. Sucht nun noch nach browser.search.defaultenginename und setzt auch diesen Wert auf den Standardwert zurück. Dieser Wert bezieht sich auf das kleine Suchfeld oben rechts im Browser.

Nun wurde hoffentlich alles entfernt. Startet am besten den Browser neu, falls die Änderungen erst nach einem Neustart in Kraft treten sollten.

Web Development mit Aptana Studios

in Software von Leo

Aptana Studios ist eine kostenlose Web Development Software, welche auf Eclipse Basis aufgebaut ist (sieht also genauch gleich aus!). Mit vielen Plugins und Erweiterungen könnt ihr neben den Standardsprachen wie HTML, CSS und XML noch viele weitere Sprachen hinzufügen, wie z.B. PHP, JavaScript und vieles mehr.

Dank dem eingebauten FTP Server Feature könnt ihr sogar direkt online die Files auf eurem FTP Server bearbeiten und abspeichern. Seit der Version 2.0 steht euch die Möglichkeit mit SFTP Servern zu verbinden zur Verfügung, welche bisher nur in der Premium Version war (gibt es die überhaupt noch?!).

Das schlaue Syntax Highlighting macht euch das Code natürlich um einiges leichter. Mit den vielen Optionen könnt ihr ausserdem noch einiges Anpassen, so könnt ihr mit einem klick bestimmen ob ihr ein Online Interface (mit FTP Server Übersicht) oder ein Offline Interface (eure Lokale Festplatte) haben möchtet. Ihr könnt also sowohl online als auch offline gut mit Aptana arbeiten.

Wer kein Englisch kann, wird Aptana jedoch nicht so mögen, da das Programm komplett auf englisch ist. Eine deutsche Übersetzung habe ich bisher nirgendwo gefunden.

Ansonsten ein tolles Stück Software was ich euch empfehlen kann. Hier geht es zum download.

TYPO3: Verschiedene Bilder oder CSS Files je nach Sprache

in TYPO3 von Leo

Wer seine mit TYPO3 erstelle Webseite in mehreren Sprachen hat, der möchte zum Beispiel auch sein Logo in verschiedenen Sprachen haben. Kürzlich musste ich dies für einen Kunden einrichten, dass wenn man die Sprache auf englisch stellt, auf der ganzen Webseite ein englischsprachiges Logo angezeigt wird.

Das ganze ist eigentlich nicht so kompliziert wie es sich anhört. Mit folgendem Code wird ganz simpel ein englisches Bild sowie ein spezielles CSS File eingebunden, jedoch nur wenn die Webseite auf die gewünschte Sprache eingestellt wurde.


# English
[globalVar = GP:L = 3]
page.includeCSS.file1337 = fileadmin/styles/english.css
lib.logo.value = &lt;a href="LINK ZUR WEBSEITE"&gt;&lt;img src="(PFAD ZUM BILD)/logo_en.gif" alt="Logo" title="Logo" /&gt;&lt;/a&gt;

[global]

Das “lib.logo.value” muss natürlich genau wie die Pfade und Links noch angepasst werden. Das ‘logo’ in lib.logo.value ist hierbei das div-Element in welchem das Bild platziert ist. Wichtig: Dieser Code ersetzt kein im CSS definiertes background-image, dies könnte man jedoch mit dem zusätzlichen CSS File machen, einfach ‘!important’ verwenden.

Die Zahl 3 in “[globalVar = GP:L = 3]” steht für die Sprache, die 3 ist hierbei englisch.

MouseOver Effekt auf div Element mit Javascript

12. April 2010 in Browser, Tutorials von Leo

Kürzlich musste ich für einen Event eines Kunden etwas Javascript schreiben, um ein paar div Elemente (HTML) mit einem MouseOver und MouseOut Effekt versehren, welche dem div Element z.B. eine neue Hintergrundfarbe geben.

Eigentlich kann das ganze in Browsern wie Firefox, Google Chrome und Safari (?) ganz simpel mit einem div:hover gemacht werden, jedoch würde dies im Internet Explorer (mal wieder) nicht funktionieren. Deshalb musste Javascript her, welches das ganze nun in allen Browsern ermöglicht.

Und so wird es gemacht:

1. Zuerst muss Prototype (aktuell 1.6) heruntergeladen und auf seinen Server hochgeladen werden. Ansonsten würde das Javascript nicht funktionieren.

2. Nun erstellt man eine neue Javascript Datei (.js) und ladet diese auch auf seinen Server. Im HTML File müssen die beiden Javascript Files nun noch eingebunden werden:

<script src="scripts/prototype.js" type="text/javascript"></script>
<script src="scripts/dein-effekt.js" type="text/javascript"></script>

Der Pfad und Dateiname muss natürlich noch durch den eigenen ersetzt werden.

3. Zu erst erstellen wir ein HTML Gerüst aus div’s:

<div class="content">
  <div class="team">
     <div class="tools">Anmelden!</div>
  </div>
</div>

Hierbei handelt es sich nun um ein Turnier, bei dem man sich Anmelden kann. Der Link zur Anmeldung erscheint jedoch nur, wenn man mit der Maus über das div “team” fährt.

4. Im Javascript schreiben wir nun folgendes:

var act = 0;

Event.observe(window, 'load', function() { //wenn das Fenster geladen hat

	var team = $('content').select('div.team'); //Hier wir dem JS das div gezeigt

Gleich darunter:

		team.each(function(team){ //hierbei wird das div.team ausgewählt
				Event.observe(team, 'mouseover', function() { //mouseover div.team
						mouseOver(team);
				});
				Event.observe(team, 'mouseout', function() { //mouseout div.team
						mouseOut(team);
				});
	});
});

Danach kommt zuerst einmal die Funktion mouseOver:

function mouseOver(team){
	children = team.childElements(); //die Unterelemente werden gewählt
	tool = children[0]; // das nullte Unterelement (als das gleich darauf folgende
	tool.style.display='block'; //jetzt wird das div (div.tools) angezeigt
	team.addClassName('act');
	//tool.addClassName('act');
}

Und die Funktion mouseOut:

function mouseOut(team){
	children = team.childElements();
	tool = children[0];
	tool.style.display='none';
	team.removeClassName('act');
	tool.removeClassName('act');
}

Im CSS müssen nun noch die Class definiert werden. Die Class .act, für active (aktiv), welche sagt dass das Element aktiv ist, also die Maus gerade auf dem Element ist.
Das Javascript versteckt und zeigt lediglich ein div Element und gibt bzw. nimmt ihm eine neue CSS Class.

Das Javascript sollte wie folgt aussehen:

var act = 0;

Event.observe(window, 'load', function() {

	var team = $('content').select('div.team');

		team.each(function(team){
				Event.observe(team, 'mouseover', function() {
						mouseOver(team);
				});
				Event.observe(team, 'mouseout', function() {
						mouseOut(team);
				});
	});
});

function mouseOver(team){
	children = team.childElements();
	tool = children[0];
	tool.style.display='block';
	team.addClassName('act');
	//tool.addClassName('act');
}

function mouseOut(team){
	children = team.childElements();
	tool = children[0];
	tool.style.display='none';
	team.removeClassName('act');
	tool.removeClassName('act');
}