<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.stephanschlegel.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=193.196.133.6</id>
	<title>Wikizone - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.stephanschlegel.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=193.196.133.6"/>
	<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Spezial:Beitr%C3%A4ge/193.196.133.6"/>
	<updated>2026-05-06T16:46:49Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.35.14</generator>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=PHP_-_Validierung_von_Werten_aus_Eingabefeldern&amp;diff=18699</id>
		<title>PHP - Validierung von Werten aus Eingabefeldern</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=PHP_-_Validierung_von_Werten_aus_Eingabefeldern&amp;diff=18699"/>
		<updated>2010-07-06T09:07:36Z</updated>

		<summary type="html">&lt;p&gt;193.196.133.6: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ansatz:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	function validate($val,$type){&lt;br /&gt;
		switch ($type) {&lt;br /&gt;
			case &amp;#039;int&amp;#039;:&lt;br /&gt;
				$val = intval($val);&lt;br /&gt;
				break;&lt;br /&gt;
&lt;br /&gt;
			case &amp;#039;email&amp;#039;:&lt;br /&gt;
				if(preg_match(&amp;#039;^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$&amp;#039;, $val))&lt;br /&gt;
					$val = FALSE;&lt;br /&gt;
				break;&lt;br /&gt;
&lt;br /&gt;
			case &amp;#039;alphanumeric&amp;#039;:&lt;br /&gt;
				preg_match(&amp;#039;/[a-z\x80-\x9F\xA2-\xA4\xC0-\xD6\xD8-\xF6\xF9-\xFF]+/&amp;#039;, $val, $matches);&lt;br /&gt;
				$val = $matches[0];&lt;br /&gt;
				break;&lt;br /&gt;
			&lt;br /&gt;
			default:&lt;br /&gt;
				$val = FALSE;&lt;br /&gt;
				break;&lt;br /&gt;
		}&lt;br /&gt;
		return $val;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>193.196.133.6</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=PHP_-_Tipps_und_Tricks&amp;diff=18518</id>
		<title>PHP - Tipps und Tricks</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=PHP_-_Tipps_und_Tricks&amp;diff=18518"/>
		<updated>2010-07-06T09:07:09Z</updated>

		<summary type="html">&lt;p&gt;193.196.133.6: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Weiterleitung mit PHP ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 header(&amp;quot;Location: http://www.myHomepage.net&amp;quot;);&lt;br /&gt;
 exit;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Ausgaben zwischenspeichern oder in Variablen umleiten ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Problem: Die Ausgabe von echo oder von includes soll zuerst in einer Variablen gespeichert werden, damit Sie nicht gleich ausgegeben werden.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 &lt;br /&gt;
Das läßt sich lösen indem man die Ausgabe zunächst puffert und dann den Puffer in eine Variable lädt.&lt;br /&gt;
 basicartsstudios at hotmail dot com&lt;br /&gt;
21-Jan-2007 10:39&lt;br /&gt;
Sometimes you might not want to include a php-file under the specifications defined in the functions include() or require(), but you might want to have in return the string that the script in the file &amp;quot;echoes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Include() and require() both directly put out the evaluated code.&lt;br /&gt;
&lt;br /&gt;
For avoiding this, try output-buffering:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
ob_start();&lt;br /&gt;
eval(file_get_contents($file));&lt;br /&gt;
$result = ob_get_contents();&lt;br /&gt;
ob_end_clean();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
ob_start();&lt;br /&gt;
include($file);&lt;br /&gt;
$result = ob_get_contents();&lt;br /&gt;
ob_end_clean();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which i consider the same, correct me if I&amp;#039;m wrong.&lt;br /&gt;
&lt;br /&gt;
Best regards, BasicArtsStudios&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Umlaute, UTF-8 und PHP: wenn Sonderzeichen falsch dargestellt werden ==&lt;br /&gt;
Quelle: http://www.sjmfreelancing.de/devblog/umlaute-utf-8-und-php.html (15.10.2008)&lt;br /&gt;
&lt;br /&gt;
Ich habe des öfteren das Problem gehabt, dass Sonderzeichen auf PHP-basierten Internetseiten nicht korrekt angezeigt wurden und Firefox ein gerahmtes Fragezeichen statt Ü, ü etc. ausgab, der Internet Explorer einen Kasten und auch Safari&amp;amp;Co. Probleme hatten.&lt;br /&gt;
&lt;br /&gt;
Lange war ich auf der Suche nach der richtigen Lösung für dieses Problem und habe mich durch unterschiedliche Blogs, Foren und Internetseiten gewühlt bis ich letztendlich eine Ansammlung verschiedenster Tipps &amp;amp; Tricks aufgenommen und in Kombination angewandt habe. Und siehe da: Sonderzeichen sind korrekt :)&lt;br /&gt;
&lt;br /&gt;
Hier ein paar Dinge, die jeder Programmierer beherzigen sollte, wenn er mit Umlauten umgeht:&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;1. Header korrekt setzen&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Mit einem Einzeiler kann man PHP dazu bringen einen UTF-8-Header an den Browser zu senden. Einfach folgenden Code ganz oben in der Index-Datei setzen:&lt;br /&gt;
&lt;br /&gt;
 header(&amp;#039;content-type: text/html; charset=UTF-8&amp;#039;);  &lt;br /&gt;
&lt;br /&gt;
2. HTML-Header korrekt setzen&lt;br /&gt;
&lt;br /&gt;
Folgenden Code in den HEAD-Bereich des HTML-Dokuments setzen:&lt;br /&gt;
view plaincopy to clipboardprint?&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=UTF-8&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. PHP-Dateien im UTF-8-Format speichern&lt;br /&gt;
&lt;br /&gt;
Ganz wichtig ist es die PHP-Dateien die man verwendet im UTF-8-Format zu speichern. Sprich: den Editor dazu zu bringen, die Datei mit Umlauten zu speichern.&lt;br /&gt;
4. MySQL dazu bewegen UTF-8 zu nutzen&lt;br /&gt;
&lt;br /&gt;
MySQL liefert auch nicht (immer) von Haus aus UTF-8-korrekte Ausgaben. Folgendes MySQL-Query einfach nach dem connecten mit der Datenbank ausführen:&lt;br /&gt;
&lt;br /&gt;
 mysql_query(&amp;#039;set character set utf8;&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
5. Das &amp;amp;-Zeichen immer escapen&lt;br /&gt;
&lt;br /&gt;
Zwar nicht direkt ein Problem, aber: ü, ä, ß etc. sind auch dann korrektes HTML, wenn man sie nicht mittels htmlentities in Entitäten umgewandelt hat. Anders sieht es mit dem Kaufmanns-Und (&amp;amp;) aus: diesen IMMER mit &amp;amp;amp; ausgeben. Auch bei Links gilt: &amp;amp; durch &amp;lt;code&amp;gt;&amp;amp;amp;&amp;lt;/code&amp;gt; ersetzen!&lt;br /&gt;
&lt;br /&gt;
== Validieren von Werten aus Eingabefeldern ==&lt;br /&gt;
[[PHP - Validierung von Werten aus Eingabefeldern]]&lt;/div&gt;</summary>
		<author><name>193.196.133.6</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=TYPO3_-_Standard_Suche_auf_jeder_Seite_einbinden&amp;diff=18698</id>
		<title>TYPO3 - Standard Suche auf jeder Seite einbinden</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=TYPO3_-_Standard_Suche_auf_jeder_Seite_einbinden&amp;diff=18698"/>
		<updated>2010-07-05T13:01:21Z</updated>

		<summary type="html">&lt;p&gt;193.196.133.6: /* Standard Suchfeld */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Links ==&lt;br /&gt;
&lt;br /&gt;
Siehe auch: &lt;br /&gt;
&lt;br /&gt;
[[Typo3 - indexed search#Ein Suchfeld ins Template einbinden]]&lt;br /&gt;
&lt;br /&gt;
http://typo3-blog.net/tutorials/news/typo3-seitensuche.html?tx_t3blog_pi1[blogList][comParentId]=327&amp;amp;tx_t3blog_pi1[blogList][comParentTitle]=Irgendeiner&lt;br /&gt;
&lt;br /&gt;
== Standard Suchfeld ins Template einbinden ==&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Standard Suchfeld kopieren&lt;br /&gt;
temp.top_search &amp;lt; tt_content.search&lt;br /&gt;
temp.top_search{&lt;br /&gt;
  // Suchergebnisse entfernen&lt;br /&gt;
  20 &amp;gt;&lt;br /&gt;
  30 {&lt;br /&gt;
    // Einstellungen für Suchergebnis&lt;br /&gt;
    // Suchergebnis im selben Fenster öffnen&lt;br /&gt;
    target = _self&lt;br /&gt;
    // Einstellungen für Zielseite löschen (Standard ist Suchseite)&lt;br /&gt;
    type &amp;gt;&lt;br /&gt;
    // Anzeigeseite der Suche&lt;br /&gt;
    type = 41&lt;br /&gt;
    // Einstellungen für Suchoptionen&lt;br /&gt;
    // Wo soll gesucht werden? (Hier: Überschrift,Seiteninhalt,Bildunterschrift)&lt;br /&gt;
    dataArray.20.value = tt_content.header-bodytext-imagecaption&lt;br /&gt;
    //Feld auf versteckt setzen&lt;br /&gt;
    dataArray.20.type = scols=hidden&lt;br /&gt;
    //Auswahlfeld für Suchoptionen entfernen&lt;br /&gt;
    dataArray.20.valueArray &amp;gt;&lt;br /&gt;
    // Label (Überschrift) des Suchfeldes entfernen&lt;br /&gt;
    // dataArray.20.label &amp;gt;&lt;br /&gt;
    // Layout anpassen&lt;br /&gt;
    stdWrap.wrap = &amp;lt;div&amp;gt;|&amp;lt;/div&amp;gt;&lt;br /&gt;
    // layout = ###LABEL### ###FIELD###&lt;br /&gt;
    layout = ###FIELD###&lt;br /&gt;
    // Wrap für Beschriftungen der Inhaltselemente&lt;br /&gt;
    labelWrap.wrap =&lt;br /&gt;
    // nur die Beschriftung des Eingabefeldes wrappen&lt;br /&gt;
    dataArray.10.label.wrap = &amp;lt;div&amp;gt;|&amp;lt;/div&amp;gt;&lt;br /&gt;
    #Label des Senden Buttons&lt;br /&gt;
    dataArray.40.value.data &amp;gt;&lt;br /&gt;
    dataArray.40.value = Suchen&lt;br /&gt;
    //Absenden Button ganz entfernen&lt;br /&gt;
    # dataArray.40 &amp;gt;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
page.10.subparts.TOP_SEARCH &amp;lt; temp.top_search&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>193.196.133.6</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=TYPO3_-_Standard_Suche_auf_jeder_Seite_einbinden&amp;diff=2039</id>
		<title>TYPO3 - Standard Suche auf jeder Seite einbinden</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=TYPO3_-_Standard_Suche_auf_jeder_Seite_einbinden&amp;diff=2039"/>
		<updated>2010-07-05T13:00:38Z</updated>

		<summary type="html">&lt;p&gt;193.196.133.6: /* Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Links ==&lt;br /&gt;
&lt;br /&gt;
Siehe auch: &lt;br /&gt;
&lt;br /&gt;
[[Typo3 - indexed search#Ein Suchfeld ins Template einbinden]]&lt;br /&gt;
&lt;br /&gt;
http://typo3-blog.net/tutorials/news/typo3-seitensuche.html?tx_t3blog_pi1[blogList][comParentId]=327&amp;amp;tx_t3blog_pi1[blogList][comParentTitle]=Irgendeiner&lt;br /&gt;
&lt;br /&gt;
== Standard Suchfeld ==&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Standard Suchfeld kopieren&lt;br /&gt;
temp.top_search &amp;lt; tt_content.search&lt;br /&gt;
temp.top_search{&lt;br /&gt;
  // Suchergebnisse entfernen&lt;br /&gt;
  20 &amp;gt;&lt;br /&gt;
  30 {&lt;br /&gt;
    // Einstellungen für Suchergebnis&lt;br /&gt;
    // Suchergebnis im selben Fenster öffnen&lt;br /&gt;
    target = _self&lt;br /&gt;
    // Einstellungen für Zielseite löschen (Standard ist Suchseite)&lt;br /&gt;
    type &amp;gt;&lt;br /&gt;
    // Anzeigeseite der Suche&lt;br /&gt;
    type = 41&lt;br /&gt;
    // Einstellungen für Suchoptionen&lt;br /&gt;
    // Wo soll gesucht werden? (Hier: Überschrift,Seiteninhalt,Bildunterschrift)&lt;br /&gt;
    dataArray.20.value = tt_content.header-bodytext-imagecaption&lt;br /&gt;
    //Feld auf versteckt setzen&lt;br /&gt;
    dataArray.20.type = scols=hidden&lt;br /&gt;
    //Auswahlfeld für Suchoptionen entfernen&lt;br /&gt;
    dataArray.20.valueArray &amp;gt;&lt;br /&gt;
    // Label (Überschrift) des Suchfeldes entfernen&lt;br /&gt;
    // dataArray.20.label &amp;gt;&lt;br /&gt;
    // Layout anpassen&lt;br /&gt;
    stdWrap.wrap = &amp;lt;div&amp;gt;|&amp;lt;/div&amp;gt;&lt;br /&gt;
    // layout = ###LABEL### ###FIELD###&lt;br /&gt;
    layout = ###FIELD###&lt;br /&gt;
    // Wrap für Beschriftungen der Inhaltselemente&lt;br /&gt;
    labelWrap.wrap =&lt;br /&gt;
    // nur die Beschriftung des Eingabefeldes wrappen&lt;br /&gt;
    dataArray.10.label.wrap = &amp;lt;div&amp;gt;|&amp;lt;/div&amp;gt;&lt;br /&gt;
    #Label des Senden Buttons&lt;br /&gt;
    dataArray.40.value.data &amp;gt;&lt;br /&gt;
    dataArray.40.value = Suchen&lt;br /&gt;
    //Absenden Button ganz entfernen&lt;br /&gt;
    # dataArray.40 &amp;gt;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
page.10.subparts.TOP_SEARCH &amp;lt; temp.top_search&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>193.196.133.6</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=TYPO3_-_Standard_Suche_auf_jeder_Seite_einbinden&amp;diff=2038</id>
		<title>TYPO3 - Standard Suche auf jeder Seite einbinden</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=TYPO3_-_Standard_Suche_auf_jeder_Seite_einbinden&amp;diff=2038"/>
		<updated>2010-07-05T11:59:16Z</updated>

		<summary type="html">&lt;p&gt;193.196.133.6: /* Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Links ==&lt;br /&gt;
&lt;br /&gt;
Siehe auch: &lt;br /&gt;
&lt;br /&gt;
[[Typo3 - indexed search#Ein Suchfeld ins Template einbinden]]&lt;br /&gt;
&lt;br /&gt;
http://typo3-blog.net/tutorials/news/typo3-seitensuche.html?tx_t3blog_pi1[blogList][comParentId]=327&amp;amp;tx_t3blog_pi1[blogList][comParentTitle]=Irgendeiner&lt;/div&gt;</summary>
		<author><name>193.196.133.6</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=TYPO3_-_Standard_Suche_auf_jeder_Seite_einbinden&amp;diff=2037</id>
		<title>TYPO3 - Standard Suche auf jeder Seite einbinden</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=TYPO3_-_Standard_Suche_auf_jeder_Seite_einbinden&amp;diff=2037"/>
		<updated>2010-07-05T11:58:25Z</updated>

		<summary type="html">&lt;p&gt;193.196.133.6: /* Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Links ==&lt;br /&gt;
&lt;br /&gt;
Siehe auch: [[Typo3 - indexed search#Ein Suchfeld ins Template einbinden]]&lt;/div&gt;</summary>
		<author><name>193.196.133.6</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=TYPO3_-_Standard_Suche_auf_jeder_Seite_einbinden&amp;diff=2036</id>
		<title>TYPO3 - Standard Suche auf jeder Seite einbinden</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=TYPO3_-_Standard_Suche_auf_jeder_Seite_einbinden&amp;diff=2036"/>
		<updated>2010-07-05T11:58:11Z</updated>

		<summary type="html">&lt;p&gt;193.196.133.6: /* Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Links ==&lt;br /&gt;
&lt;br /&gt;
Siehe auch: Typo3 - indexed search#Ein Suchfeld ins Template einbinden&lt;/div&gt;</summary>
		<author><name>193.196.133.6</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=TYPO3_-_Standard_Suche_auf_jeder_Seite_einbinden&amp;diff=2035</id>
		<title>TYPO3 - Standard Suche auf jeder Seite einbinden</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=TYPO3_-_Standard_Suche_auf_jeder_Seite_einbinden&amp;diff=2035"/>
		<updated>2010-07-05T11:57:46Z</updated>

		<summary type="html">&lt;p&gt;193.196.133.6: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Links ==&lt;br /&gt;
&lt;br /&gt;
Siehe auch: Typo3_-_indexed_search#Ein_Suchfeld_ins_Template_einbinden&lt;/div&gt;</summary>
		<author><name>193.196.133.6</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Typo3_-_indexed_search&amp;diff=17591</id>
		<title>Typo3 - indexed search</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Typo3_-_indexed_search&amp;diff=17591"/>
		<updated>2010-07-05T11:57:05Z</updated>

		<summary type="html">&lt;p&gt;193.196.133.6: /* Ein Suchfeld ins Template einbinden */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Links ==&lt;br /&gt;
http://wiki.typo3.org/index.php/De:Indexed_search&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Suchergebnis verbessern ==&lt;br /&gt;
Es gibt einige Problemchen mit der Indexed Search die man beheben kann:&lt;br /&gt;
&lt;br /&gt;
=== Suchbereich einschränken ===&lt;br /&gt;
Um zu verhindern, daß Metatags, Navigation etc. mit indiziert werden schränkt man den Suchbereich ein. Dafür stehen die Marker für den Suchbereich verwenden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ob das bei den Metatags funktioniert bleibt zu testen. Ansonsten kann auch im Quellcode der Bereich auskommentiert werden: &lt;br /&gt;
&lt;br /&gt;
In der class.indexer.php die 6 Zeilen nach Zeile 1215&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// get keywords and description metatags &lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Performance in der indexed Search Extension ==&lt;br /&gt;
&lt;br /&gt;
=== Tipps zur besseren Performance und Schonung der Datenbank ===&lt;br /&gt;
&lt;br /&gt;
Nur nach ganzen Worten suchen bringt sehr viel.&lt;br /&gt;
&lt;br /&gt;
Ebenso nur innerhalb des page Objekts aktivieren (page.config.index_enable = 1 nicht config.index_enable = 1)&lt;br /&gt;
&lt;br /&gt;
Interessanter Artikel auf typo3.net: Informationen für eine schlanke, performante Indexsuche&lt;br /&gt;
http://www.typo3.net/forum/list/list_post//63315/&lt;br /&gt;
Darin geht es z.B. um folgende Tipps:&lt;br /&gt;
* Reduzierung der GET-Parameter, die zu einem neuen pHash-Wert führen und eine Beschränkung auf weniger indizierte Wörter auf einer Seite, vor allem wenn die Wörter sich auf der Seite regelmässig ändern (z.B. LIST- &amp;amp; LATEST-Ansicht bei tt_news).&lt;br /&gt;
* Bei Parametern, die am Inhalt nichts ändern (z.B. anderes Layout bei gleichem Inhalt) könnte ein Cookie anstatt eines GET-Parameters verwendet werden&lt;br /&gt;
* Bei einer Bildergallerie könnten vielleicht die Seiten komplett aus der Suche herausgenommen werden, wenn sich bei dem unterschiedlichen Links nur ein Bild ändert, aber keine indizierbaren Texte vorhanden sind.&lt;br /&gt;
* Bei der Extension tt_news sollte keine backPid verwendet werden, da ansonsten zu jeder backPid und zu jeder News Einträge in die &amp;quot;index_rel&amp;quot;-Tabelle gemacht werden. Hätten Sie 1000 Seiten mit der LATEST-Ansicht und 1000 News und durchschnittlich 100 verschiedene Wörter pro News, dann würden ca. 100.000.000 Zeilen in der DB gespeichert!&lt;br /&gt;
&lt;br /&gt;
Die backPid können Sie im TypoScript mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 plugin.tt_news.dontUseBackPid = 1 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
deaktivieren. Anstatt dem dynamisch generierten Zurück-Button in der SINGLE-Ansicht könnte dann ein Zurück-Link mit JavaScript gemacht werden:&lt;br /&gt;
 &amp;lt;a href=&amp;quot;javascript:history.back()&amp;quot; title=&amp;quot;Zurück zur Listenansicht&amp;quot;&amp;gt;« Zurück&amp;lt;/a&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Listenansichten sollten grundsätzlich von der Indizierung ausgeschlossen werden. Entweder man setzt mit den Seiteneigenschaften gleich die gesamte Seite auf &amp;quot;Nicht suchen&amp;quot;&lt;br /&gt;
oder man definiert die Marker für Such-Beginn &amp;amp; Such-Ende so, dass die Listen nicht indiziert werden.&lt;br /&gt;
Sie könnten z.B. den Content-Marker auf den Seiten mit den Listen so machen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
            page.10.marks.CONTENT_NORMAL = CONTENT&lt;br /&gt;
            page.10.marks.CONTENT_NORMAL {&lt;br /&gt;
                wrap = |&amp;lt;!--TYPO3SEARCH_begin--&amp;gt;&amp;lt;!--TYPO3SEARCH_end--&amp;gt;&lt;br /&gt;
                table = tt_content&lt;br /&gt;
                ...&lt;br /&gt;
            } &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Auf normalen Seiten oder der Single-Ansicht müsste der wrap dann so aussehen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
            page.10.marks.CONTENT_NORMAL = CONTENT&lt;br /&gt;
            page.10.marks.CONTENT_NORMAL {&lt;br /&gt;
                wrap = &amp;lt;!--TYPO3SEARCH_begin--&amp;gt;|&amp;lt;!--TYPO3SEARCH_end--&amp;gt;&lt;br /&gt;
                table = tt_&amp;lt;content&lt;br /&gt;
                ...&lt;br /&gt;
            } &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die &amp;#039;&amp;#039;&amp;#039;Druckansicht&amp;#039;&amp;#039;&amp;#039; sollte man möglichst über &amp;#039;&amp;#039;&amp;#039;CSS&amp;#039;&amp;#039;&amp;#039; und nicht über einen Print-Button machen. Wenn man aber dennoch mit einer Print- oder &amp;#039;&amp;#039;&amp;#039;PDF-Darstellung&amp;#039;&amp;#039;&amp;#039; arbeiten will, dann sollten diese Inhalte &amp;#039;&amp;#039;&amp;#039;nicht auch noch indiziert&amp;#039;&amp;#039;&amp;#039; werden. Zum Einen hilft eine &amp;#039;&amp;#039;&amp;#039;geschickte Anordnung der Marker TYPO3SEARCH_begin und TYPO3SEARCH_end&amp;#039;&amp;#039;&amp;#039;, zum Anderen sollte im &amp;#039;&amp;#039;&amp;#039;TypoScript nicht im global gültigem config-Abschnitt index_enable auf 1&amp;#039;&amp;#039;&amp;#039; gesetzt werden. Wenn dies nicht beachtet wird, hat man für jede typeNum neue Einträge in der &amp;quot;index_rel&amp;quot;-Tabelle!&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Falsch wäre:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
            config {&lt;br /&gt;
                index_enable = 1&lt;br /&gt;
                index_externals = 1&lt;br /&gt;
            }&lt;br /&gt;
            page {&lt;br /&gt;
                ...&lt;br /&gt;
            } &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Richtig wäre:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
            page {&lt;br /&gt;
                config {&lt;br /&gt;
                    index_enable = 1&lt;br /&gt;
                    index_externals = 1&lt;br /&gt;
                }&lt;br /&gt;
                ...&lt;br /&gt;
            } &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein einmal gesetzter &amp;#039;&amp;#039;&amp;#039;Encryption-Key sollte nicht mehr gewechselt werden&amp;#039;&amp;#039;&amp;#039;, da sich ansonsten alle &amp;#039;&amp;#039;&amp;#039;cHash-Werte&amp;#039;&amp;#039;&amp;#039; ändern. Dies würde zu sehr vielen neuen Einträgen in der DB führen. (Zudem kann dies unter Umständen den &amp;#039;&amp;#039;&amp;#039;Pagerank&amp;#039;&amp;#039;&amp;#039; bei Goole zerstören und &amp;#039;&amp;#039;&amp;#039;Abmeldelinks beim Newsletter&amp;#039;&amp;#039;&amp;#039; funktionieren auch nicht mehr).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn TYPO3 Version 4.1+ verwendet wird, sollte man gegebenenfalls die Tabellen &amp;quot;index_...&amp;quot; komplett löschen und mit einem COMPARE im Install-Tool neu anlegen lassen. Wenn die Datenbank &amp;#039;&amp;#039;&amp;#039;InnoDB&amp;#039;&amp;#039;&amp;#039; unterstützt, werden die Tabellen dann auch als InnoDB-Tabellen angelegt. Hier können die Tabellen ausgelesen werden, obwohl vielleicht in diesem Augenblick ein Eintrag geschrieben wird. Die älteren &amp;#039;&amp;#039;&amp;#039;MyISAM-Tabellen werden nämlich während eines Schreibzugriffs komplett gesperr&amp;#039;&amp;#039;&amp;#039;t.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Nach den Optimierungen sollten die Tabellen wenigstens geleert werden&amp;#039;&amp;#039;&amp;#039;, damit die überflüssigen Daten dann auch nicht mehr in der DB liegen bleiben. Danach sollte auch im TYPO3-Backend unter Web-&amp;gt;Info-&amp;gt;Indexed search-&amp;gt;Technical Details überprüft werden, ob die Änderungen zum Erfolg geführt haben, oder ob noch unnötige Einträge vorhanden sind.&lt;br /&gt;
&lt;br /&gt;
=== Performance Fragen ===&lt;br /&gt;
Wenn es mehr Seiten werden kann die indexed Search Extension zum Performance Killer werden.&lt;br /&gt;
Dafür gibt es mehrere Gründe:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;1. Die Volltextsuche http://bugs.typo3.org/view.php?id=5089&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Es gibt aus Gründen der Kompatibilität keinen fulltext index in den Tabellen. &lt;br /&gt;
Daher schlägt Peter Russ im Bugtracker vor: fulltext index to index_fulltext.fulltext and index_words.baseword&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;2. changed query in class.tx_indexedsearch.php to use fulltext&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
capabilites of MySql.&lt;br /&gt;
Das ist im obigen Link im verlinkten diff File beschrieben. Großer Performance Gewinn, allerdings keine Teilsuche (typo findet auch typo2) mehr möglich.&lt;br /&gt;
nochmal zu der Änderung zur Performance-Steigerung:&lt;br /&gt;
&lt;br /&gt;
in der typo3/sysext/indexed_search/pi/class.tx_indexedsearch.php &lt;br /&gt;
ungefähr Zeile 820 sollte muss case 1 bis 3 aukommentiert werden und &lt;br /&gt;
case 10 noch angepast werden, so dass es dann so aussehen sollte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Perform search for word:&lt;br /&gt;
			switch($theType)	{&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
  * can&amp;#039;t see any difference in this cases, but Kaspar might know&lt;br /&gt;
				case &amp;#039;1&amp;#039;:&lt;br /&gt;
					$wSel = &amp;quot;IW.baseword LIKE &lt;br /&gt;
&amp;#039;%&amp;quot;.$GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;quoteStr($sWord, &amp;#039;index_words&amp;#039;).&amp;quot;%&amp;#039;&amp;quot;;&lt;br /&gt;
					$res = $this-&amp;gt;execPHashListQuery($wSel,&amp;#039; AND is_stopword=0&amp;#039;);&lt;br /&gt;
				break;&lt;br /&gt;
				case &amp;#039;2&amp;#039;:&lt;br /&gt;
					$wSel = &amp;quot;IW.baseword LIKE &amp;#039;&amp;quot;.$GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;quoteStr($sWord, &lt;br /&gt;
&amp;#039;index_words&amp;#039;).&amp;quot;%&amp;#039;&amp;quot;;&lt;br /&gt;
					$res = $this-&amp;gt;execPHashListQuery($wSel,&amp;#039; AND is_stopword=0&amp;#039;);&lt;br /&gt;
				break;&lt;br /&gt;
				case &amp;#039;3&amp;#039;:&lt;br /&gt;
					$wSel = &amp;quot;IW.baseword LIKE &lt;br /&gt;
&amp;#039;%&amp;quot;.$GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;quoteStr($sWord, &amp;#039;index_words&amp;#039;).&amp;quot;&amp;#039;&amp;quot;;&lt;br /&gt;
					$res = $this-&amp;gt;execPHashListQuery($wSel,&amp;#039; AND is_stopword=0&amp;#039;);&lt;br /&gt;
				break;&lt;br /&gt;
*/&lt;br /&gt;
				case &amp;#039;1&amp;#039;:&lt;br /&gt;
				case &amp;#039;2&amp;#039;:&lt;br /&gt;
				case &amp;#039;3&amp;#039;:&lt;br /&gt;
					$wSel=&amp;#039;match(IW.baseword) &lt;br /&gt;
against(&amp;quot;&amp;#039;.$GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;quoteStr($sWord, &amp;#039;index_words&amp;#039;).&amp;#039;&amp;quot;)&amp;#039;;&lt;br /&gt;
					$res = $this-&amp;gt;execPHashListQuery($wSel,&amp;#039; AND is_stopword=0&amp;#039;);&lt;br /&gt;
					break;		&lt;br /&gt;
				case &amp;#039;10&amp;#039;:&lt;br /&gt;
					$wSel = &amp;#039;IW.metaphone = &amp;#039;.$this-&amp;gt;indexerObj-&amp;gt;metaphone($sWord);&lt;br /&gt;
					$res = $this-&amp;gt;execPHashListQuery($wSel,&amp;#039; AND is_stopword=0&amp;#039;);&lt;br /&gt;
				break;&lt;br /&gt;
				case &amp;#039;20&amp;#039;:&lt;br /&gt;
					$res = $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_SELECTquery(&lt;br /&gt;
								&amp;#039;ISEC.phash&amp;#039;,&lt;br /&gt;
								&amp;#039;index_section ISEC, index_fulltext IFT&amp;#039;,&lt;br /&gt;
								&amp;#039;match(IFT.fulltextdata) &lt;br /&gt;
against(\&amp;#039;&amp;#039;.$GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;quoteStr($sWord, &lt;br /&gt;
&amp;#039;index_fulltext&amp;#039;).&amp;#039;\&amp;#039;) AND&lt;br /&gt;
									ISEC.phash = IFT.phash&lt;br /&gt;
									&amp;#039;.$this-&amp;gt;sectionTableWhere(),						&lt;br /&gt;
								&amp;#039;ISEC.phash&amp;#039;&lt;br /&gt;
							);&lt;br /&gt;
					$wSel = &amp;#039;1=1&amp;#039;;&lt;br /&gt;
					if ($this-&amp;gt;piVars[&amp;#039;type&amp;#039;]==20)	$this-&amp;gt;piVars[&amp;#039;order&amp;#039;] = &amp;#039;mtime&amp;#039;;	 &lt;br /&gt;
// If there is a fulltext search for a sentence there is a likeliness &lt;br /&gt;
that sorting cannot be done by the rankings from the rel-table (because &lt;br /&gt;
no relations will exist for the sentence in the word-table). So &lt;br /&gt;
therefore mtime is used instaed. It is not required, but otherwise some &lt;br /&gt;
hits may be left out.&lt;br /&gt;
				break;&lt;br /&gt;
				default:&lt;br /&gt;
					$wSel = &amp;#039;IW.wid = &amp;#039;.$hash = $this-&amp;gt;indexerObj-&amp;gt;md5inthash($sWord);&lt;br /&gt;
					$res = $this-&amp;gt;execPHashListQuery($wSel,&amp;#039; AND is_stopword=0&amp;#039;);&lt;br /&gt;
				break;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weiterhin muss wie beschreiben z.b mittels phpmyadmin-Interface der &lt;br /&gt;
Index-Typ des Indizes fulltext in der Tabelle index_fulltext auf &lt;br /&gt;
FULLTEXT gesetzt werden, sowie in der Inidize baseword in der Tabelle &lt;br /&gt;
index_words auf FULLTEXT.&lt;br /&gt;
&lt;br /&gt;
In der t.dev-Liste haben sie lange darüber diskutiert, wie es &lt;br /&gt;
integrierbar ist. Problem ist wohl, dass der FULLTEXT-Index in anderen &lt;br /&gt;
DB-Systemen nicht unterstützt wird, und die Sache ja kompatibel bleiben &lt;br /&gt;
soll. Es gab ein paar gute Lösungsansätze und irgendwann wirds sicher &lt;br /&gt;
konfigurierbar.&lt;br /&gt;
&lt;br /&gt;
Noch zu der Frage:&lt;br /&gt;
 &amp;gt; Geht eine täglich Re-Indizierung nicht ziemlich auf en Traffic bzw.&lt;br /&gt;
 &amp;gt; Serverperformance? Ganz davon abgesehen, dass ich von cronjob&amp;#039;s auch&lt;br /&gt;
 &amp;gt; nicht viel weiss... Wie sähe denn so ein cronjob aus?&lt;br /&gt;
&lt;br /&gt;
Sinnvollerweise realisiert man dass so, dass die Re-Indexierung in der &lt;br /&gt;
Nacht läuft. Weiterhin kann man dann ausschalten, dass die Seiten im &lt;br /&gt;
Frontend überhaupt indexiert werden - bringt also sogar einen &lt;br /&gt;
Performance Vorteil.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;3. Mehrfach indizierte Inhalte bei tt_news&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Lösung aus der Mailing Liste:&lt;br /&gt;
&lt;br /&gt;
Die mehrfachindizierung bei tt_news habe ich hoffentlich dadurch &lt;br /&gt;
gelöst, indem ich dontUseBackPid = 1 verwende und nur jeweils die &lt;br /&gt;
SINGLE-News-Seite indizieren lasse. D. h. ich habe bei den LIST und &lt;br /&gt;
LATEST Seiten &amp;quot;Nicht suchen&amp;quot; aktiviert. Ist das so richtig?&lt;br /&gt;
&lt;br /&gt;
== Ein Suchfeld ins Template einbinden ==&lt;br /&gt;
Hinweis: dies beschreibt die Einbindung eines Suchfeldes der indexed_search Extension. Wie man ein Suchfeld für die Standard Suche einbindet siehst du hier:&lt;br /&gt;
&lt;br /&gt;
[[TYPO3 - Standard Suche auf jeder Seite einbinden]]&lt;br /&gt;
&lt;br /&gt;
==== Extension einbinden ====&lt;br /&gt;
Indexed Search Engine (indexed_search)installieren&lt;br /&gt;
(Standardmäßig vorhanden)&lt;br /&gt;
&lt;br /&gt;
Translation Handling -&amp;gt; Übersetzungen aktualisieren&lt;br /&gt;
&lt;br /&gt;
==== HTML-Template &amp;amp; CSS ====&lt;br /&gt;
Beispiel: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;searchBox&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===== Einschränken des Suchbereichs im Template =====&lt;br /&gt;
Im Template werden folgende Marker eingesetzt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 &amp;lt;!--TYPO3SEARCH_begin--&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;!--TYPO3SEARCH_end--&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sind keine Marker vorhanden wird alles Durchsucht ist nur einer der Marker vorhanden wird alles nach (begin Marker) bzw. vor (end Marker) dem Marker durchsucht&lt;br /&gt;
&lt;br /&gt;
===== CSS =====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#searchBox input{&lt;br /&gt;
  width: 140px;&lt;br /&gt;
}&lt;br /&gt;
#searchBox input.searchBox-button{&lt;br /&gt;
position: relative;&lt;br /&gt;
border: none;&lt;br /&gt;
width: auto;&lt;br /&gt;
top: 2px;&lt;br /&gt;
}&lt;br /&gt;
div.tx-indexedsearch-whatis{&lt;br /&gt;
padding-left: 12px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Konfiguration der Extension ====&lt;br /&gt;
&lt;br /&gt;
TypoScript indexedSearch-config (V1.1)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; Constants &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
searchRoot = 1&lt;br /&gt;
searchResultPage = 4&lt;br /&gt;
searchPic = fileadmin/common/images/lupe.gif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Setup&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
plugin.tx_indexedsearch._CSS_DEFAULT_STYLE &amp;gt;&lt;br /&gt;
page.config.index_enable = 1&lt;br /&gt;
config{&lt;br /&gt;
   # Index-Suche einschalten&lt;br /&gt;
   index_enable = 1 &lt;br /&gt;
   # Externe Dateien auch durchsuchen (pdf,doc...benötigt Erweiterungen)       &lt;br /&gt;
   index_externals = 0&lt;br /&gt;
}&lt;br /&gt;
plugin.tx_indexedsearch{&lt;br /&gt;
   # Startpunkte der Suche (12,45...)&lt;br /&gt;
   search.rootPidList = {$searchRoot}&lt;br /&gt;
   # Diverse Optionen zur Anzeige im Frontend...&lt;br /&gt;
   show.rules = 0&lt;br /&gt;
   show.resultNumber = 0&lt;br /&gt;
   blind.sections = 1&lt;br /&gt;
   show.L1sections = 0&lt;br /&gt;
   show.L2sections = 0&lt;br /&gt;
   show.advancedSearchLink = 0&lt;br /&gt;
&lt;br /&gt;
   # auf bestimmte Medientypen einschränken&lt;br /&gt;
   # search.mediaList = pdf, doc&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Temporäres Objekt für das Suchfeld (in neueren Versionen auch Templates möglich &lt;br /&gt;
# es kann auch die macina Searchbox eingesetzt werden (Template Support Mehrsprachigkeit...)&lt;br /&gt;
&lt;br /&gt;
temp.searchBox = TEXT&lt;br /&gt;
temp.searchBox.insertData = 1&lt;br /&gt;
temp.searchBox.value (&lt;br /&gt;
&amp;lt;div class=&amp;quot;searchBox&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;index.php?id={$searchResultPage}&amp;amp;tx_indexedsearch[sword]&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;tx_indexedsearch[sword]&amp;quot; value=&amp;quot;Suche&amp;quot; class=&amp;quot;searchBox-field&amp;quot; title=&amp;quot;Suche&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;input type=&amp;quot;image&amp;quot; src=&amp;quot;{$searchPic}&amp;quot; alt=&amp;quot;Start&amp;quot; title=&amp;quot;Start&amp;quot; class=&amp;quot;searchBox-button&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;stype&amp;quot; value=&amp;quot;L0&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;scols&amp;quot; value=&amp;quot;tt_content.header-bodytext-imagecaption&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;locationData&amp;quot; value=&amp;quot;{$searchResultPage}:pages:{$searchResultPage}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
#plugin.tx_macinasearchbox_pi1.pidSearchpage = {$searchResultPage}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Suche nur in der aktuellen Sprache ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# für die default-Sprache:&lt;br /&gt;
plugin.tx_indexedsearch._DEFAULT_PI_VARS.lang = 0&lt;br /&gt;
&lt;br /&gt;
# für die Sprache ?&amp;amp;L=1&lt;br /&gt;
[globalVar = GP:L = 1] &lt;br /&gt;
plugin.tx_indexedsearch._DEFAULT_PI_VARS.lang = 1&lt;br /&gt;
[global]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oder für jede Sprache gültig:&lt;br /&gt;
plugin.tx_indexedsearch._DEFAULT_PI_VARS.lang &amp;lt; config.sys_language_uid&lt;br /&gt;
&lt;br /&gt;
==== Sprachlabels ====&lt;br /&gt;
Wie in Typo3 üblich z.B.:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
plugin.tx_indexedsearch._LOCAL_LANG.de.pi_list_browseresults_prev = &amp;amp;lt;&amp;amp;lt; &lt;br /&gt;
plugin.tx_indexedsearch._LOCAL_LANG.de.pi_list_browseresults_page =&lt;br /&gt;
plugin.tx_indexedsearch._LOCAL_LANG.de.pi_list_browseresults_next = &amp;amp;gt;&amp;amp;gt;&lt;br /&gt;
plugin.tx_indexedsearch._LOCAL_LANG.de.pi_list_browseresults_display = ###TAG_BEGIN###%s###TAG_END### - ###TAG_BEGIN###%s###TAG_END### (###TAG_BEGIN###%s###TAG_END###)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In manchen Versionen gibt es einen Fehler in der französichen Übersetzung deshalb:&lt;br /&gt;
&lt;br /&gt;
 plugin.tx_indexedsearch._LOCAL_LANG.fr.pi_list_browseresults_display = Résultat ###TAG_BEGIN###%s à %s###TAG_END### sur un total de ###TAG_BEGIN###%s###TAG_END###&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Suchergebnis:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
manchmal möchte man dem Suchergebnis eine eigene Überschrift statt des Seitennamens mitgeben. Das macht man mit:&lt;br /&gt;
 $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;indexedDocTitle = &amp;#039;suchtitel&amp;#039;&lt;br /&gt;
&lt;br /&gt;
==== im Main Template ====&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Setup:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 ### SearchBox ###&lt;br /&gt;
 subparts.searchBox &amp;lt; temp.searchBox&lt;br /&gt;
&lt;br /&gt;
== Tutorial von Marlies Cohen ==&lt;br /&gt;
&lt;br /&gt;
When I first started with Typo3 Indexed Search gave me some problems. It is a very basic extension.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Place this line of code in the Setup of your TypoScript of your rootpage:&lt;br /&gt;
&lt;br /&gt;
    # Indexed Search activated&lt;br /&gt;
    page.config.index_enable = 1&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Now comes the trick to get your pages indexed.&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; Log out of Typo3&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; Go to your home page&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; Log back in to Typo3&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; Now your pages should be cached and searchable&lt;br /&gt;
&lt;br /&gt;
     &lt;br /&gt;
&lt;br /&gt;
The reason for this is that as long as you are logged in to Typo3 your pages are not cached, once you log out and view pages they are cached. Knowing this saves a lot of hassles.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== Clearing Indexed Search Cache ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; switch to the &amp;quot;Info&amp;quot; module on the left and&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; choose &amp;quot;indexed search&amp;quot; on the right dropdown (in the details view). now you can see all your pages that have been indexed&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; click on the trash-item to delete the indexed record for a specific page-tree (attention: recursive!).&lt;br /&gt;
&lt;br /&gt;
== Optionen der indexed search ==&lt;br /&gt;
Da gibts ne ganze Menge:&lt;br /&gt;
&lt;br /&gt;
http://www.typo3.net/forum/list/list_post//27370/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
plugin.tx_indexedsearch {&lt;br /&gt;
 blind {&lt;br /&gt;
        ###settings: 0=aktiv (sichtbar), -1 inaktiv (nicht sichtbar)&lt;br /&gt;
       &lt;br /&gt;
        ## Vergleichs-Typ (Ganzes Wort, Wortteil,etc)&lt;br /&gt;
        type=-1&lt;br /&gt;
       &lt;br /&gt;
        ## type default option (und /oder)&lt;br /&gt;
        defOp=0&lt;br /&gt;
       &lt;br /&gt;
        ## Bereich(e) der website&lt;br /&gt;
        sections=0&lt;br /&gt;
       &lt;br /&gt;
        ## Suche in Medientypen (erweiterungen)&lt;br /&gt;
        media=1&lt;br /&gt;
       &lt;br /&gt;
        ## Sortierung&lt;br /&gt;
        order=-1&lt;br /&gt;
       &lt;br /&gt;
        ## Ansicht (Sektionshierachie / Liste)&lt;br /&gt;
        group=-1&lt;br /&gt;
       &lt;br /&gt;
        ## Ansicht: Erweiterte Vorschau&lt;br /&gt;
        extResume = -1&lt;br /&gt;
       &lt;br /&gt;
        ## Sprachwahlbox&lt;br /&gt;
        lang=0&lt;br /&gt;
       &lt;br /&gt;
        ## Aufsteigend absteigend&lt;br /&gt;
        desc=-1&lt;br /&gt;
       &lt;br /&gt;
        ## Ergebnisse (Anzahl der Treffer pro Seite)&lt;br /&gt;
        results=-1&lt;br /&gt;
 }&lt;br /&gt;
 show {&lt;br /&gt;
        ###settings: 1=aktiv (sichtbar), 0 inaktiv (nicht sichtbar)&lt;br /&gt;
       &lt;br /&gt;
        ## zeige Kurzanleitung&lt;br /&gt;
        rules=1&lt;br /&gt;
       &lt;br /&gt;
        ## Erstellungsinformationen des Hashes&lt;br /&gt;
        parsetimes=1&lt;br /&gt;
       &lt;br /&gt;
        ## Zweite ebene im Bereichs-dropdown anzeigen&lt;br /&gt;
        L2sections=1&lt;br /&gt;
       &lt;br /&gt;
        ## Erste ebene im Bereichs-dropdown anzeigen&lt;br /&gt;
        L1sections=1&lt;br /&gt;
       &lt;br /&gt;
        ## Alle &amp;quot;nicht im menü&amp;quot; oder &amp;quot;im menü verstecken&amp;quot;&lt;br /&gt;
        ##(aber nicht &amp;quot;versteckte&amp;quot; seiten) mit anzeigen in section?&lt;br /&gt;
        LxALLtypes=0&lt;br /&gt;
       &lt;br /&gt;
        ## leeren des Suchfeldes nach suche&lt;br /&gt;
        clearSearchBox = 0&lt;br /&gt;
       &lt;br /&gt;
        ## Aktuelles suchwort zu den bisherigen suchwörtern hinzufügen&lt;br /&gt;
        clearSearchBox.enableSubSearchCheckBox=0&lt;br /&gt;
 }&lt;br /&gt;
 search {&lt;br /&gt;
        ## Seiten-Id auf der die Suchergebnisse ausgegeben werden sollen.&lt;br /&gt;
        ## Leer lassen entspricht auf gleicher Seite ausgeben&lt;br /&gt;
    rootPidList =&lt;br /&gt;
       &lt;br /&gt;
        ## Anzahl der auszugebenden treffer&lt;br /&gt;
    page_links = 10&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Scheint nicht zu funktionnieren&lt;br /&gt;
 &lt;br /&gt;
 plugin.tx_indexedsearch.search.page_links = 5&lt;br /&gt;
&lt;br /&gt;
stattdessen das hier verwenden:&lt;br /&gt;
&lt;br /&gt;
 plugin.tx_indexedsearch._DEFAULT_PI_VARS.results = 5&lt;/div&gt;</summary>
		<author><name>193.196.133.6</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Rss&amp;diff=18682</id>
		<title>Rss</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Rss&amp;diff=18682"/>
		<updated>2010-04-26T19:34:06Z</updated>

		<summary type="html">&lt;p&gt;193.196.133.6: /* TypoScript anpassen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Beispiel für Link im Header der Seite&lt;br /&gt;
 &amp;lt;link rel=&amp;quot;alternate&amp;quot; type=&amp;quot;application/rss+xml&amp;quot; title=&amp;quot;t3n Magazin RSS Feed&amp;quot; href=&amp;quot;http://t3n.de/magazin/feed/&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RSS für TYPO3 ==&lt;br /&gt;
tt_news Beiträge lassen sich sehr einfach als RSS News Feed bereitstellen.&lt;br /&gt;
&lt;br /&gt;
=== Quick ===&lt;br /&gt;
==== Statisches Template ==== &lt;br /&gt;
Statisches Template von tt_news einbinden. Es heißt: News Feed (RSS,RDF,Atom)&lt;br /&gt;
====TypoScript anpassen====&lt;br /&gt;
Nimmt man das statische Template kann man im Constant Editor die wichtigsten Einstellungen machen.&lt;br /&gt;
&lt;br /&gt;
Beispiel Constants&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
plugin.tt_news.displayXML.rss2_tmplFile = fileadmin/templates/news/rss_2.tmpl&lt;br /&gt;
plugin.tt_news.displayXML.xmlTitle = HfWU News&lt;br /&gt;
plugin.tt_news.displayXML.xmlLink = http://www.hfwu.de/&lt;br /&gt;
plugin.tt_news.displayXML.xmlDesc = News Feed der Hochschule für Wirtschaft und Umwelt&lt;br /&gt;
plugin.tt_news.displayXML.xmlLang = de&lt;br /&gt;
plugin.tt_news.displayXML.xmlLimit = 12&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun noch einen passenden Link im Header:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und vielleicht noch ein schönes Icon im Inhalt&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Template anpassen&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Link und Anleitung&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
=== Erläuterungen ===&lt;br /&gt;
&lt;br /&gt;
tt_news stellt ein statisches Template bereit, daß die wichtigsten Einstellungen vornimmt. Man kann natürlich auch alles selber machen. Wie unten im Beispiel gezeigt. Aber einfacher ist das statische.&lt;br /&gt;
&lt;br /&gt;
Beispiel für eigenes TypoScript (Setup)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### RSS ###&lt;br /&gt;
# Configure tt_news to display the xml template&lt;br /&gt;
&lt;br /&gt;
plugin.tt_news {&lt;br /&gt;
  displayXML {&lt;br /&gt;
    # rss091_tmplFile = EXT:tt_news/res/rss_0_91.tmpl&lt;br /&gt;
    # rdf_tmplFile = EXT:tt_news/res/rdf.tmpl&lt;br /&gt;
    # atom03_tmplFile = EXT:tt_news/res/atom_0_3.tmpl&lt;br /&gt;
    # atom1_tmplFile = EXT:tt_news/res/atom_1_0.tmpl&lt;br /&gt;
&lt;br /&gt;
    rss2_tmplFile = EXT:tt_news/res/rss_2.tmpl&lt;br /&gt;
    # possibile values: rss091 / rss2 / rdf / atom03 / atom1  &lt;br /&gt;
    xmlFormat = rss2&lt;br /&gt;
    xmlTitle = dekra-aviation: News&lt;br /&gt;
    xmlLink = http://dekra-aviation.com/&lt;br /&gt;
    xmlDesc = Latest News&lt;br /&gt;
    xmlLang = de&lt;br /&gt;
    xmlIcon = fileadmin/tt_news_article.gif&lt;br /&gt;
    title_stdWrap.htmlSpecialChars = 1&lt;br /&gt;
    title_stdWrap.htmlSpecialChars.preserveEntities = 1&lt;br /&gt;
    subheader_stdWrap.stripHtml = 1&lt;br /&gt;
    subheader_stdWrap.htmlSpecialChars = 1&lt;br /&gt;
    subheader_stdWrap.htmlSpecialChars.preserveEntities = 1&lt;br /&gt;
    subheader_stdWrap.crop = 100 | ... | 1&lt;br /&gt;
    subheader_stdWrap.ifEmpty.field = bodytext&lt;br /&gt;
    xmlLastBuildDate = 1&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
## This enables the xml news feed&lt;br /&gt;
xmlnews = PAGE&lt;br /&gt;
xmlnews {&lt;br /&gt;
  typeNum = 100&lt;br /&gt;
  10 &amp;gt;&lt;br /&gt;
  10 &amp;lt; plugin.tt_news&lt;br /&gt;
  10.pid_list &amp;gt;&lt;br /&gt;
  10.pid_list = 322&lt;br /&gt;
  10.singlePid = {$plugin.tt_news.singlePid}&lt;br /&gt;
  10.defaultCode = XML&lt;br /&gt;
  config {&lt;br /&gt;
    disableAllHeaderCode = 1&lt;br /&gt;
    additionalHeaders = Content-type:text/xml&lt;br /&gt;
    no_cache = 1&lt;br /&gt;
    xhtml_cleaning = 0&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Fall muß man auch den Header selbst setzen, damit der Browser / Feed Reader den Feed erkennt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
page.headerData.20 = TEXT&lt;br /&gt;
page.headerData.20.value = &amp;lt;link rel=&amp;quot;alternate&amp;quot; type=&amp;quot;application/rss+xml&amp;quot; title=&amp;quot;Dekra Aviation RSS-Feed&amp;quot; href=&amp;quot;http://dekra-aviation.de/index.php?id=434&amp;amp;type=100&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oder auch so wie es bei wt_gallery gemacht wird. Interessanterweise zeigt in diesem Fall der Firefox gleich in der Adressleiste an, daß es einen Feed gibt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# add rss feed to header&lt;br /&gt;
page.headerData.3135 = COA&lt;br /&gt;
page.headerData.3135 {&lt;br /&gt;
   wrap = &amp;lt;link rel=&amp;quot;alternate&amp;quot; type=&amp;quot;application/rss+xml&amp;quot; title=&amp;quot;RSS-Feed&amp;quot; href=&amp;quot;|&amp;quot; /&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   10 = TEXT&lt;br /&gt;
   10.data = getIndpEnv:TYPO3_SITE_URL&lt;br /&gt;
    &lt;br /&gt;
   20 = TEXT&lt;br /&gt;
   20 {&lt;br /&gt;
     typolink.parameter.data = page : uid&lt;br /&gt;
     typolink.additionalParams = &amp;amp;type=3135&lt;br /&gt;
     typolink.addQueryString = 1&lt;br /&gt;
     typolink.returnLast = url&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zum Vergleich das Original statische Template&lt;br /&gt;
&lt;br /&gt;
Constants:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[GLOBAL]&lt;br /&gt;
###&lt;br /&gt;
# These are the default TS-constants for RSS feeds from tt_news &lt;br /&gt;
##&lt;br /&gt;
&lt;br /&gt;
plugin.tt_news {&lt;br /&gt;
  displayXML {&lt;br /&gt;
     &lt;br /&gt;
        # cat=plugin.tt_news/file/80; type=file[html,htm,tmpl,txt]; label= RSS-News rss v2 Template File: XML template for RSS 2.0 feed&lt;br /&gt;
    rss2_tmplFile = EXT:tt_news/res/rss_2.tmpl&lt;br /&gt;
        # cat=plugin.tt_news/file/81; type=file[html,htm,tmpl,txt]; label= RSS-News rss v0.91 Template File: XML template for RSS 0.91 feed. &lt;br /&gt;
    rss091_tmplFile = EXT:tt_news/res/rss_0_91.tmpl&lt;br /&gt;
        # cat=plugin.tt_news/file/82; type=file[html,htm,tmpl,txt]; label= RDF-News RDF Template File: XML template for RDF feed.&lt;br /&gt;
    rdf_tmplFile = EXT:tt_news/res/rdf.tmpl&lt;br /&gt;
        # cat=plugin.tt_news/file/83; type=file[html,htm,tmpl,txt]; label= Atom-News Atom v0.3 Template File: XML template for Atom 0.3 feed.&lt;br /&gt;
    atom03_tmplFile = EXT:tt_news/res/atom_0_3.tmpl&lt;br /&gt;
        # cat=plugin.tt_news/file/84; type=file[html,htm,tmpl,txt]; label= Atom-News Atom v1.0 Template File: XML template for Atom 1.0 feed.&lt;br /&gt;
    atom1_tmplFile = EXT:tt_news/res/atom_1_0.tmpl&lt;br /&gt;
        # cat=plugin.tt_news//85; type=options[rss091,rss2,rdf,atom1,atom03]; label= News-Feed XML-Format: Defines the format of the news feed. Possible values are: &amp;#039;rss091&amp;#039;, &amp;#039;rss2&amp;#039; &amp;#039;rdf&amp;#039;, &amp;#039;atom1&amp;#039; and &amp;#039;atom03&amp;#039;&lt;br /&gt;
    xmlFormat = rss2&lt;br /&gt;
        # cat=plugin.tt_news//86; type=text; label= News-Feed XML-Title: The title of your news feed. (required for rss091, rss2, rdf and atom03)&lt;br /&gt;
    xmlTitle = example.com: Latest News&lt;br /&gt;
        # cat=plugin.tt_news//87; type=text; label= News-Feed XML-Link: The link to your hompage. (required for rss091, rss2, rdf and atom03)&lt;br /&gt;
    xmlLink = http://www.example.com/&lt;br /&gt;
        # cat=plugin.tt_news//88; type=text; label= News-Feed XML-Description: The description of your news feed. (required for rss091, rss2 and rdf. optional for atom03)&lt;br /&gt;
    xmlDesc = Latest news from example.com&lt;br /&gt;
       	# cat=plugin.tt_news//89; type=text; label= News-Feed XML-Language: Your site&amp;#039;s language. A list of allowable values for &amp;lt;language&amp;gt; in RSS is available at http://backend.userland.com/stories/storyReader$16 (equired for rss091, optional for rss2, not available for rdf, recommended for atom03)&lt;br /&gt;
    xmlLang = en&lt;br /&gt;
        # cat=plugin.tt_news//80; type=text; label= News-Feed XML-Icon: Provide an icon for your news feed with preferred size of 16x16 px, can be gif, jpeg or png. (required for rss091, optional for rss2 and rdf, not available for atom03)&lt;br /&gt;
    xmlIcon = EXT:tt_news/ext_icon.gif&lt;br /&gt;
        # cat=plugin.tt_news//91; type=int+; label= News-Feed XML-Limit: max news items in RSS feeds.&lt;br /&gt;
    xmlLimit = 10&lt;br /&gt;
        # cat=plugin.tt_news//92; type=boolean; label= News-Feed XML-Caching: Allow caching for the RSS feed&lt;br /&gt;
    xmlCaching = 1&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
###&lt;br /&gt;
# This is the default TS-setup RSS feed from tt_news&lt;br /&gt;
# this template has to be included after the tt_news main TS-setup because it depends on some settings from there&lt;br /&gt;
#&lt;br /&gt;
# (see Section Reference in the manual for more options &amp;amp; parameters)&lt;br /&gt;
#&lt;br /&gt;
# tt_news v 2.x&lt;br /&gt;
###&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# - - - - - - - - - - - - - -  render XML news   - - - - - - - - - - - - -  #&lt;br /&gt;
&lt;br /&gt;
# point your RSS reader to: http://your-server.org/index.php?type=100&lt;br /&gt;
&lt;br /&gt;
plugin.tt_news {&lt;br /&gt;
  displayXML {&lt;br /&gt;
    rss091_tmplFile = {$plugin.tt_news.displayXML.rss091_tmplFile}&lt;br /&gt;
    rss2_tmplFile = {$plugin.tt_news.displayXML.rss2_tmplFile}&lt;br /&gt;
    rdf_tmplFile = {$plugin.tt_news.displayXML.rdf_tmplFile}&lt;br /&gt;
    atom03_tmplFile = {$plugin.tt_news.displayXML.atom03_tmplFile}&lt;br /&gt;
    atom1_tmplFile = {$plugin.tt_news.displayXML.atom1_tmplFile}&lt;br /&gt;
     &lt;br /&gt;
        # possibile values: rss091 / rss2 / rdf / atom03&lt;br /&gt;
    xmlFormat = {$plugin.tt_news.displayXML.xmlFormat}&lt;br /&gt;
     &lt;br /&gt;
    xmlTitle = {$plugin.tt_news.displayXML.xmlTitle}&lt;br /&gt;
    xmlLink = {$plugin.tt_news.displayXML.xmlLink}&lt;br /&gt;
    xmlDesc = {$plugin.tt_news.displayXML.xmlDesc}&lt;br /&gt;
    xmlLang = {$plugin.tt_news.displayXML.xmlLang}&lt;br /&gt;
    xmlIcon = {$plugin.tt_news.displayXML.xmlIcon}&lt;br /&gt;
    xmlLimit = {$plugin.tt_news.displayXML.xmlLimit}&lt;br /&gt;
    xmlCaching = {$plugin.tt_news.displayXML.xmlCaching}&lt;br /&gt;
     &lt;br /&gt;
    title_stdWrap.htmlSpecialChars = 1&lt;br /&gt;
    title_stdWrap.htmlSpecialChars.preserveEntities = 1&lt;br /&gt;
    subheader_stdWrap.stripHtml = 1&lt;br /&gt;
    subheader_stdWrap.htmlSpecialChars = 1&lt;br /&gt;
    subheader_stdWrap.htmlSpecialChars.preserveEntities = 1&lt;br /&gt;
    subheader_stdWrap.crop = 100 | ... | 1 &lt;br /&gt;
    subheader_stdWrap.ifEmpty.field = bodytext&lt;br /&gt;
    xmlLastBuildDate = 1&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
## This enables the xml news feed&lt;br /&gt;
xmlnews = PAGE&lt;br /&gt;
xmlnews {&lt;br /&gt;
  typeNum = 100&lt;br /&gt;
   &lt;br /&gt;
  10 &amp;lt; plugin.tt_news&lt;br /&gt;
  10.pid_list &amp;gt;&lt;br /&gt;
  10.pid_list = {$plugin.tt_news.pid_list}&lt;br /&gt;
  10.singlePid = {$plugin.tt_news.singlePid}&lt;br /&gt;
  10.defaultCode = XML&lt;br /&gt;
  10.catTextMode = 1&lt;br /&gt;
  10.catImageMode = 0&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
  config {&lt;br /&gt;
    disableAllHeaderCode = 1&lt;br /&gt;
    additionalHeaders = Content-type:application/xml&lt;br /&gt;
    xhtml_cleaning = 0&lt;br /&gt;
    admPanel = 0&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
### CVS id ###&lt;br /&gt;
# $Id: setup.txt 3031 2006-05-19 13:58:06Z rupertgermann $&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>193.196.133.6</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Rss&amp;diff=1972</id>
		<title>Rss</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Rss&amp;diff=1972"/>
		<updated>2010-04-26T19:27:33Z</updated>

		<summary type="html">&lt;p&gt;193.196.133.6: /* Erläuterungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Beispiel für Link im Header der Seite&lt;br /&gt;
 &amp;lt;link rel=&amp;quot;alternate&amp;quot; type=&amp;quot;application/rss+xml&amp;quot; title=&amp;quot;t3n Magazin RSS Feed&amp;quot; href=&amp;quot;http://t3n.de/magazin/feed/&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RSS für TYPO3 ==&lt;br /&gt;
tt_news Beiträge lassen sich sehr einfach als RSS News Feed bereitstellen.&lt;br /&gt;
&lt;br /&gt;
=== Quick ===&lt;br /&gt;
==== Statisches Template ==== &lt;br /&gt;
Statisches Template von tt_news einbinden. Es heißt: News Feed (RSS,RDF,Atom)&lt;br /&gt;
====TypoScript anpassen====&lt;br /&gt;
Nimmt man das statische Template kann man im Constant Editor die wichtigsten Einstellungen machen.&lt;br /&gt;
&lt;br /&gt;
Beispiel Constants&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
plugin.tt_news.displayXML.rss2_tmplFile = fileadmin/templates/news/rss_2.tmpl&lt;br /&gt;
plugin.tt_news.displayXML.xmlTitle = HfWU News&lt;br /&gt;
plugin.tt_news.displayXML.xmlLink = http://www.hfwu.de/&lt;br /&gt;
plugin.tt_news.displayXML.xmlDesc = News Feed der Hochschule für Wirtschaft und Umwelt&lt;br /&gt;
plugin.tt_news.displayXML.xmlLang = de&lt;br /&gt;
plugin.tt_news.displayXML.xmlLimit = 12&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Template anpassen&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Link und Anleitung&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
=== Erläuterungen ===&lt;br /&gt;
&lt;br /&gt;
tt_news stellt ein statisches Template bereit, daß die wichtigsten Einstellungen vornimmt. Man kann natürlich auch alles selber machen. Wie unten im Beispiel gezeigt. Aber einfacher ist das statische.&lt;br /&gt;
&lt;br /&gt;
Beispiel für eigenes TypoScript (Setup)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### RSS ###&lt;br /&gt;
# Configure tt_news to display the xml template&lt;br /&gt;
&lt;br /&gt;
plugin.tt_news {&lt;br /&gt;
  displayXML {&lt;br /&gt;
    # rss091_tmplFile = EXT:tt_news/res/rss_0_91.tmpl&lt;br /&gt;
    # rdf_tmplFile = EXT:tt_news/res/rdf.tmpl&lt;br /&gt;
    # atom03_tmplFile = EXT:tt_news/res/atom_0_3.tmpl&lt;br /&gt;
    # atom1_tmplFile = EXT:tt_news/res/atom_1_0.tmpl&lt;br /&gt;
&lt;br /&gt;
    rss2_tmplFile = EXT:tt_news/res/rss_2.tmpl&lt;br /&gt;
    # possibile values: rss091 / rss2 / rdf / atom03 / atom1  &lt;br /&gt;
    xmlFormat = rss2&lt;br /&gt;
    xmlTitle = dekra-aviation: News&lt;br /&gt;
    xmlLink = http://dekra-aviation.com/&lt;br /&gt;
    xmlDesc = Latest News&lt;br /&gt;
    xmlLang = de&lt;br /&gt;
    xmlIcon = fileadmin/tt_news_article.gif&lt;br /&gt;
    title_stdWrap.htmlSpecialChars = 1&lt;br /&gt;
    title_stdWrap.htmlSpecialChars.preserveEntities = 1&lt;br /&gt;
    subheader_stdWrap.stripHtml = 1&lt;br /&gt;
    subheader_stdWrap.htmlSpecialChars = 1&lt;br /&gt;
    subheader_stdWrap.htmlSpecialChars.preserveEntities = 1&lt;br /&gt;
    subheader_stdWrap.crop = 100 | ... | 1&lt;br /&gt;
    subheader_stdWrap.ifEmpty.field = bodytext&lt;br /&gt;
    xmlLastBuildDate = 1&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
## This enables the xml news feed&lt;br /&gt;
xmlnews = PAGE&lt;br /&gt;
xmlnews {&lt;br /&gt;
  typeNum = 100&lt;br /&gt;
  10 &amp;gt;&lt;br /&gt;
  10 &amp;lt; plugin.tt_news&lt;br /&gt;
  10.pid_list &amp;gt;&lt;br /&gt;
  10.pid_list = 322&lt;br /&gt;
  10.singlePid = {$plugin.tt_news.singlePid}&lt;br /&gt;
  10.defaultCode = XML&lt;br /&gt;
  config {&lt;br /&gt;
    disableAllHeaderCode = 1&lt;br /&gt;
    additionalHeaders = Content-type:text/xml&lt;br /&gt;
    no_cache = 1&lt;br /&gt;
    xhtml_cleaning = 0&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Fall muß man auch den Header selbst setzen, damit der Browser / Feed Reader den Feed erkennt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
page.headerData.20 = TEXT&lt;br /&gt;
page.headerData.20.value = &amp;lt;link rel=&amp;quot;alternate&amp;quot; type=&amp;quot;application/rss+xml&amp;quot; title=&amp;quot;Dekra Aviation RSS-Feed&amp;quot; href=&amp;quot;http://dekra-aviation.de/index.php?id=434&amp;amp;type=100&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oder auch so wie es bei wt_gallery gemacht wird. Interessanterweise zeigt in diesem Fall der Firefox gleich in der Adressleiste an, daß es einen Feed gibt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# add rss feed to header&lt;br /&gt;
page.headerData.3135 = COA&lt;br /&gt;
page.headerData.3135 {&lt;br /&gt;
   wrap = &amp;lt;link rel=&amp;quot;alternate&amp;quot; type=&amp;quot;application/rss+xml&amp;quot; title=&amp;quot;RSS-Feed&amp;quot; href=&amp;quot;|&amp;quot; /&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   10 = TEXT&lt;br /&gt;
   10.data = getIndpEnv:TYPO3_SITE_URL&lt;br /&gt;
    &lt;br /&gt;
   20 = TEXT&lt;br /&gt;
   20 {&lt;br /&gt;
     typolink.parameter.data = page : uid&lt;br /&gt;
     typolink.additionalParams = &amp;amp;type=3135&lt;br /&gt;
     typolink.addQueryString = 1&lt;br /&gt;
     typolink.returnLast = url&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zum Vergleich das Original statische Template&lt;br /&gt;
&lt;br /&gt;
Constants:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[GLOBAL]&lt;br /&gt;
###&lt;br /&gt;
# These are the default TS-constants for RSS feeds from tt_news &lt;br /&gt;
##&lt;br /&gt;
&lt;br /&gt;
plugin.tt_news {&lt;br /&gt;
  displayXML {&lt;br /&gt;
     &lt;br /&gt;
        # cat=plugin.tt_news/file/80; type=file[html,htm,tmpl,txt]; label= RSS-News rss v2 Template File: XML template for RSS 2.0 feed&lt;br /&gt;
    rss2_tmplFile = EXT:tt_news/res/rss_2.tmpl&lt;br /&gt;
        # cat=plugin.tt_news/file/81; type=file[html,htm,tmpl,txt]; label= RSS-News rss v0.91 Template File: XML template for RSS 0.91 feed. &lt;br /&gt;
    rss091_tmplFile = EXT:tt_news/res/rss_0_91.tmpl&lt;br /&gt;
        # cat=plugin.tt_news/file/82; type=file[html,htm,tmpl,txt]; label= RDF-News RDF Template File: XML template for RDF feed.&lt;br /&gt;
    rdf_tmplFile = EXT:tt_news/res/rdf.tmpl&lt;br /&gt;
        # cat=plugin.tt_news/file/83; type=file[html,htm,tmpl,txt]; label= Atom-News Atom v0.3 Template File: XML template for Atom 0.3 feed.&lt;br /&gt;
    atom03_tmplFile = EXT:tt_news/res/atom_0_3.tmpl&lt;br /&gt;
        # cat=plugin.tt_news/file/84; type=file[html,htm,tmpl,txt]; label= Atom-News Atom v1.0 Template File: XML template for Atom 1.0 feed.&lt;br /&gt;
    atom1_tmplFile = EXT:tt_news/res/atom_1_0.tmpl&lt;br /&gt;
        # cat=plugin.tt_news//85; type=options[rss091,rss2,rdf,atom1,atom03]; label= News-Feed XML-Format: Defines the format of the news feed. Possible values are: &amp;#039;rss091&amp;#039;, &amp;#039;rss2&amp;#039; &amp;#039;rdf&amp;#039;, &amp;#039;atom1&amp;#039; and &amp;#039;atom03&amp;#039;&lt;br /&gt;
    xmlFormat = rss2&lt;br /&gt;
        # cat=plugin.tt_news//86; type=text; label= News-Feed XML-Title: The title of your news feed. (required for rss091, rss2, rdf and atom03)&lt;br /&gt;
    xmlTitle = example.com: Latest News&lt;br /&gt;
        # cat=plugin.tt_news//87; type=text; label= News-Feed XML-Link: The link to your hompage. (required for rss091, rss2, rdf and atom03)&lt;br /&gt;
    xmlLink = http://www.example.com/&lt;br /&gt;
        # cat=plugin.tt_news//88; type=text; label= News-Feed XML-Description: The description of your news feed. (required for rss091, rss2 and rdf. optional for atom03)&lt;br /&gt;
    xmlDesc = Latest news from example.com&lt;br /&gt;
       	# cat=plugin.tt_news//89; type=text; label= News-Feed XML-Language: Your site&amp;#039;s language. A list of allowable values for &amp;lt;language&amp;gt; in RSS is available at http://backend.userland.com/stories/storyReader$16 (equired for rss091, optional for rss2, not available for rdf, recommended for atom03)&lt;br /&gt;
    xmlLang = en&lt;br /&gt;
        # cat=plugin.tt_news//80; type=text; label= News-Feed XML-Icon: Provide an icon for your news feed with preferred size of 16x16 px, can be gif, jpeg or png. (required for rss091, optional for rss2 and rdf, not available for atom03)&lt;br /&gt;
    xmlIcon = EXT:tt_news/ext_icon.gif&lt;br /&gt;
        # cat=plugin.tt_news//91; type=int+; label= News-Feed XML-Limit: max news items in RSS feeds.&lt;br /&gt;
    xmlLimit = 10&lt;br /&gt;
        # cat=plugin.tt_news//92; type=boolean; label= News-Feed XML-Caching: Allow caching for the RSS feed&lt;br /&gt;
    xmlCaching = 1&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
###&lt;br /&gt;
# This is the default TS-setup RSS feed from tt_news&lt;br /&gt;
# this template has to be included after the tt_news main TS-setup because it depends on some settings from there&lt;br /&gt;
#&lt;br /&gt;
# (see Section Reference in the manual for more options &amp;amp; parameters)&lt;br /&gt;
#&lt;br /&gt;
# tt_news v 2.x&lt;br /&gt;
###&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# - - - - - - - - - - - - - -  render XML news   - - - - - - - - - - - - -  #&lt;br /&gt;
&lt;br /&gt;
# point your RSS reader to: http://your-server.org/index.php?type=100&lt;br /&gt;
&lt;br /&gt;
plugin.tt_news {&lt;br /&gt;
  displayXML {&lt;br /&gt;
    rss091_tmplFile = {$plugin.tt_news.displayXML.rss091_tmplFile}&lt;br /&gt;
    rss2_tmplFile = {$plugin.tt_news.displayXML.rss2_tmplFile}&lt;br /&gt;
    rdf_tmplFile = {$plugin.tt_news.displayXML.rdf_tmplFile}&lt;br /&gt;
    atom03_tmplFile = {$plugin.tt_news.displayXML.atom03_tmplFile}&lt;br /&gt;
    atom1_tmplFile = {$plugin.tt_news.displayXML.atom1_tmplFile}&lt;br /&gt;
     &lt;br /&gt;
        # possibile values: rss091 / rss2 / rdf / atom03&lt;br /&gt;
    xmlFormat = {$plugin.tt_news.displayXML.xmlFormat}&lt;br /&gt;
     &lt;br /&gt;
    xmlTitle = {$plugin.tt_news.displayXML.xmlTitle}&lt;br /&gt;
    xmlLink = {$plugin.tt_news.displayXML.xmlLink}&lt;br /&gt;
    xmlDesc = {$plugin.tt_news.displayXML.xmlDesc}&lt;br /&gt;
    xmlLang = {$plugin.tt_news.displayXML.xmlLang}&lt;br /&gt;
    xmlIcon = {$plugin.tt_news.displayXML.xmlIcon}&lt;br /&gt;
    xmlLimit = {$plugin.tt_news.displayXML.xmlLimit}&lt;br /&gt;
    xmlCaching = {$plugin.tt_news.displayXML.xmlCaching}&lt;br /&gt;
     &lt;br /&gt;
    title_stdWrap.htmlSpecialChars = 1&lt;br /&gt;
    title_stdWrap.htmlSpecialChars.preserveEntities = 1&lt;br /&gt;
    subheader_stdWrap.stripHtml = 1&lt;br /&gt;
    subheader_stdWrap.htmlSpecialChars = 1&lt;br /&gt;
    subheader_stdWrap.htmlSpecialChars.preserveEntities = 1&lt;br /&gt;
    subheader_stdWrap.crop = 100 | ... | 1 &lt;br /&gt;
    subheader_stdWrap.ifEmpty.field = bodytext&lt;br /&gt;
    xmlLastBuildDate = 1&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
## This enables the xml news feed&lt;br /&gt;
xmlnews = PAGE&lt;br /&gt;
xmlnews {&lt;br /&gt;
  typeNum = 100&lt;br /&gt;
   &lt;br /&gt;
  10 &amp;lt; plugin.tt_news&lt;br /&gt;
  10.pid_list &amp;gt;&lt;br /&gt;
  10.pid_list = {$plugin.tt_news.pid_list}&lt;br /&gt;
  10.singlePid = {$plugin.tt_news.singlePid}&lt;br /&gt;
  10.defaultCode = XML&lt;br /&gt;
  10.catTextMode = 1&lt;br /&gt;
  10.catImageMode = 0&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
  config {&lt;br /&gt;
    disableAllHeaderCode = 1&lt;br /&gt;
    additionalHeaders = Content-type:application/xml&lt;br /&gt;
    xhtml_cleaning = 0&lt;br /&gt;
    admPanel = 0&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
### CVS id ###&lt;br /&gt;
# $Id: setup.txt 3031 2006-05-19 13:58:06Z rupertgermann $&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>193.196.133.6</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Rss&amp;diff=1971</id>
		<title>Rss</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Rss&amp;diff=1971"/>
		<updated>2010-04-26T19:07:21Z</updated>

		<summary type="html">&lt;p&gt;193.196.133.6: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Beispiel für Link im Header der Seite&lt;br /&gt;
 &amp;lt;link rel=&amp;quot;alternate&amp;quot; type=&amp;quot;application/rss+xml&amp;quot; title=&amp;quot;t3n Magazin RSS Feed&amp;quot; href=&amp;quot;http://t3n.de/magazin/feed/&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RSS für TYPO3 ==&lt;br /&gt;
tt_news Beiträge lassen sich sehr einfach als RSS News Feed bereitstellen.&lt;br /&gt;
&lt;br /&gt;
=== Quick ===&lt;br /&gt;
==== Statisches Template ==== &lt;br /&gt;
Statisches Template von tt_news einbinden. Es heißt: News Feed (RSS,RDF,Atom)&lt;br /&gt;
====TypoScript anpassen====&lt;br /&gt;
Nimmt man das statische Template kann man im Constant Editor die wichtigsten Einstellungen machen.&lt;br /&gt;
&lt;br /&gt;
Beispiel Constants&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
plugin.tt_news.displayXML.rss2_tmplFile = fileadmin/templates/news/rss_2.tmpl&lt;br /&gt;
plugin.tt_news.displayXML.xmlTitle = HfWU News&lt;br /&gt;
plugin.tt_news.displayXML.xmlLink = http://www.hfwu.de/&lt;br /&gt;
plugin.tt_news.displayXML.xmlDesc = News Feed der Hochschule für Wirtschaft und Umwelt&lt;br /&gt;
plugin.tt_news.displayXML.xmlLang = de&lt;br /&gt;
plugin.tt_news.displayXML.xmlLimit = 12&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Template anpassen&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Link und Anleitung&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
=== Erläuterungen ===&lt;br /&gt;
&lt;br /&gt;
tt_news stellt ein statisches Template bereit, daß die wichtigsten Einstellungen vornimmt. Man kann natürlich auch alles selber machen. Wie unten im Beispiel gezeigt. Aber einfacher ist das statische.&lt;br /&gt;
&lt;br /&gt;
Beispiel für eigenes TypoScript (Setup)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### RSS ###&lt;br /&gt;
# Configure tt_news to display the xml template&lt;br /&gt;
&lt;br /&gt;
plugin.tt_news {&lt;br /&gt;
  displayXML {&lt;br /&gt;
    # rss091_tmplFile = EXT:tt_news/res/rss_0_91.tmpl&lt;br /&gt;
    # rdf_tmplFile = EXT:tt_news/res/rdf.tmpl&lt;br /&gt;
    # atom03_tmplFile = EXT:tt_news/res/atom_0_3.tmpl&lt;br /&gt;
    # atom1_tmplFile = EXT:tt_news/res/atom_1_0.tmpl&lt;br /&gt;
&lt;br /&gt;
    rss2_tmplFile = EXT:tt_news/res/rss_2.tmpl&lt;br /&gt;
    # possibile values: rss091 / rss2 / rdf / atom03 / atom1  &lt;br /&gt;
    xmlFormat = rss2&lt;br /&gt;
    xmlTitle = dekra-aviation: News&lt;br /&gt;
    xmlLink = http://dekra-aviation.com/&lt;br /&gt;
    xmlDesc = Latest News&lt;br /&gt;
    xmlLang = de&lt;br /&gt;
    xmlIcon = fileadmin/tt_news_article.gif&lt;br /&gt;
    title_stdWrap.htmlSpecialChars = 1&lt;br /&gt;
    title_stdWrap.htmlSpecialChars.preserveEntities = 1&lt;br /&gt;
    subheader_stdWrap.stripHtml = 1&lt;br /&gt;
    subheader_stdWrap.htmlSpecialChars = 1&lt;br /&gt;
    subheader_stdWrap.htmlSpecialChars.preserveEntities = 1&lt;br /&gt;
    subheader_stdWrap.crop = 100 | ... | 1&lt;br /&gt;
    subheader_stdWrap.ifEmpty.field = bodytext&lt;br /&gt;
    xmlLastBuildDate = 1&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
## This enables the xml news feed&lt;br /&gt;
xmlnews = PAGE&lt;br /&gt;
xmlnews {&lt;br /&gt;
  typeNum = 100&lt;br /&gt;
  10 &amp;gt;&lt;br /&gt;
  10 &amp;lt; plugin.tt_news&lt;br /&gt;
  10.pid_list &amp;gt;&lt;br /&gt;
  10.pid_list = 322&lt;br /&gt;
  10.singlePid = {$plugin.tt_news.singlePid}&lt;br /&gt;
  10.defaultCode = XML&lt;br /&gt;
  config {&lt;br /&gt;
    disableAllHeaderCode = 1&lt;br /&gt;
    additionalHeaders = Content-type:text/xml&lt;br /&gt;
    no_cache = 1&lt;br /&gt;
    xhtml_cleaning = 0&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Fall muß man auch den Header selbst setzen, damit der Browser / Feed Reader den Feed erkennt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
page.headerData.20 = TEXT&lt;br /&gt;
page.headerData.20.value = &amp;lt;link rel=&amp;quot;alternate&amp;quot; type=&amp;quot;application/rss+xml&amp;quot; title=&amp;quot;Dekra Aviation RSS-Feed&amp;quot; href=&amp;quot;http://dekra-aviation.de/index.php?id=434&amp;amp;type=100&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zum Vergleich das Original statische Template&lt;br /&gt;
&lt;br /&gt;
Constants:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[GLOBAL]&lt;br /&gt;
###&lt;br /&gt;
# These are the default TS-constants for RSS feeds from tt_news &lt;br /&gt;
##&lt;br /&gt;
&lt;br /&gt;
plugin.tt_news {&lt;br /&gt;
  displayXML {&lt;br /&gt;
     &lt;br /&gt;
        # cat=plugin.tt_news/file/80; type=file[html,htm,tmpl,txt]; label= RSS-News rss v2 Template File: XML template for RSS 2.0 feed&lt;br /&gt;
    rss2_tmplFile = EXT:tt_news/res/rss_2.tmpl&lt;br /&gt;
        # cat=plugin.tt_news/file/81; type=file[html,htm,tmpl,txt]; label= RSS-News rss v0.91 Template File: XML template for RSS 0.91 feed. &lt;br /&gt;
    rss091_tmplFile = EXT:tt_news/res/rss_0_91.tmpl&lt;br /&gt;
        # cat=plugin.tt_news/file/82; type=file[html,htm,tmpl,txt]; label= RDF-News RDF Template File: XML template for RDF feed.&lt;br /&gt;
    rdf_tmplFile = EXT:tt_news/res/rdf.tmpl&lt;br /&gt;
        # cat=plugin.tt_news/file/83; type=file[html,htm,tmpl,txt]; label= Atom-News Atom v0.3 Template File: XML template for Atom 0.3 feed.&lt;br /&gt;
    atom03_tmplFile = EXT:tt_news/res/atom_0_3.tmpl&lt;br /&gt;
        # cat=plugin.tt_news/file/84; type=file[html,htm,tmpl,txt]; label= Atom-News Atom v1.0 Template File: XML template for Atom 1.0 feed.&lt;br /&gt;
    atom1_tmplFile = EXT:tt_news/res/atom_1_0.tmpl&lt;br /&gt;
        # cat=plugin.tt_news//85; type=options[rss091,rss2,rdf,atom1,atom03]; label= News-Feed XML-Format: Defines the format of the news feed. Possible values are: &amp;#039;rss091&amp;#039;, &amp;#039;rss2&amp;#039; &amp;#039;rdf&amp;#039;, &amp;#039;atom1&amp;#039; and &amp;#039;atom03&amp;#039;&lt;br /&gt;
    xmlFormat = rss2&lt;br /&gt;
        # cat=plugin.tt_news//86; type=text; label= News-Feed XML-Title: The title of your news feed. (required for rss091, rss2, rdf and atom03)&lt;br /&gt;
    xmlTitle = example.com: Latest News&lt;br /&gt;
        # cat=plugin.tt_news//87; type=text; label= News-Feed XML-Link: The link to your hompage. (required for rss091, rss2, rdf and atom03)&lt;br /&gt;
    xmlLink = http://www.example.com/&lt;br /&gt;
        # cat=plugin.tt_news//88; type=text; label= News-Feed XML-Description: The description of your news feed. (required for rss091, rss2 and rdf. optional for atom03)&lt;br /&gt;
    xmlDesc = Latest news from example.com&lt;br /&gt;
       	# cat=plugin.tt_news//89; type=text; label= News-Feed XML-Language: Your site&amp;#039;s language. A list of allowable values for &amp;lt;language&amp;gt; in RSS is available at http://backend.userland.com/stories/storyReader$16 (equired for rss091, optional for rss2, not available for rdf, recommended for atom03)&lt;br /&gt;
    xmlLang = en&lt;br /&gt;
        # cat=plugin.tt_news//80; type=text; label= News-Feed XML-Icon: Provide an icon for your news feed with preferred size of 16x16 px, can be gif, jpeg or png. (required for rss091, optional for rss2 and rdf, not available for atom03)&lt;br /&gt;
    xmlIcon = EXT:tt_news/ext_icon.gif&lt;br /&gt;
        # cat=plugin.tt_news//91; type=int+; label= News-Feed XML-Limit: max news items in RSS feeds.&lt;br /&gt;
    xmlLimit = 10&lt;br /&gt;
        # cat=plugin.tt_news//92; type=boolean; label= News-Feed XML-Caching: Allow caching for the RSS feed&lt;br /&gt;
    xmlCaching = 1&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
###&lt;br /&gt;
# This is the default TS-setup RSS feed from tt_news&lt;br /&gt;
# this template has to be included after the tt_news main TS-setup because it depends on some settings from there&lt;br /&gt;
#&lt;br /&gt;
# (see Section Reference in the manual for more options &amp;amp; parameters)&lt;br /&gt;
#&lt;br /&gt;
# tt_news v 2.x&lt;br /&gt;
###&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# - - - - - - - - - - - - - -  render XML news   - - - - - - - - - - - - -  #&lt;br /&gt;
&lt;br /&gt;
# point your RSS reader to: http://your-server.org/index.php?type=100&lt;br /&gt;
&lt;br /&gt;
plugin.tt_news {&lt;br /&gt;
  displayXML {&lt;br /&gt;
    rss091_tmplFile = {$plugin.tt_news.displayXML.rss091_tmplFile}&lt;br /&gt;
    rss2_tmplFile = {$plugin.tt_news.displayXML.rss2_tmplFile}&lt;br /&gt;
    rdf_tmplFile = {$plugin.tt_news.displayXML.rdf_tmplFile}&lt;br /&gt;
    atom03_tmplFile = {$plugin.tt_news.displayXML.atom03_tmplFile}&lt;br /&gt;
    atom1_tmplFile = {$plugin.tt_news.displayXML.atom1_tmplFile}&lt;br /&gt;
     &lt;br /&gt;
        # possibile values: rss091 / rss2 / rdf / atom03&lt;br /&gt;
    xmlFormat = {$plugin.tt_news.displayXML.xmlFormat}&lt;br /&gt;
     &lt;br /&gt;
    xmlTitle = {$plugin.tt_news.displayXML.xmlTitle}&lt;br /&gt;
    xmlLink = {$plugin.tt_news.displayXML.xmlLink}&lt;br /&gt;
    xmlDesc = {$plugin.tt_news.displayXML.xmlDesc}&lt;br /&gt;
    xmlLang = {$plugin.tt_news.displayXML.xmlLang}&lt;br /&gt;
    xmlIcon = {$plugin.tt_news.displayXML.xmlIcon}&lt;br /&gt;
    xmlLimit = {$plugin.tt_news.displayXML.xmlLimit}&lt;br /&gt;
    xmlCaching = {$plugin.tt_news.displayXML.xmlCaching}&lt;br /&gt;
     &lt;br /&gt;
    title_stdWrap.htmlSpecialChars = 1&lt;br /&gt;
    title_stdWrap.htmlSpecialChars.preserveEntities = 1&lt;br /&gt;
    subheader_stdWrap.stripHtml = 1&lt;br /&gt;
    subheader_stdWrap.htmlSpecialChars = 1&lt;br /&gt;
    subheader_stdWrap.htmlSpecialChars.preserveEntities = 1&lt;br /&gt;
    subheader_stdWrap.crop = 100 | ... | 1 &lt;br /&gt;
    subheader_stdWrap.ifEmpty.field = bodytext&lt;br /&gt;
    xmlLastBuildDate = 1&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
## This enables the xml news feed&lt;br /&gt;
xmlnews = PAGE&lt;br /&gt;
xmlnews {&lt;br /&gt;
  typeNum = 100&lt;br /&gt;
   &lt;br /&gt;
  10 &amp;lt; plugin.tt_news&lt;br /&gt;
  10.pid_list &amp;gt;&lt;br /&gt;
  10.pid_list = {$plugin.tt_news.pid_list}&lt;br /&gt;
  10.singlePid = {$plugin.tt_news.singlePid}&lt;br /&gt;
  10.defaultCode = XML&lt;br /&gt;
  10.catTextMode = 1&lt;br /&gt;
  10.catImageMode = 0&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
  config {&lt;br /&gt;
    disableAllHeaderCode = 1&lt;br /&gt;
    additionalHeaders = Content-type:application/xml&lt;br /&gt;
    xhtml_cleaning = 0&lt;br /&gt;
    admPanel = 0&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
### CVS id ###&lt;br /&gt;
# $Id: setup.txt 3031 2006-05-19 13:58:06Z rupertgermann $&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>193.196.133.6</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Rss&amp;diff=1970</id>
		<title>Rss</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Rss&amp;diff=1970"/>
		<updated>2010-04-26T19:04:04Z</updated>

		<summary type="html">&lt;p&gt;193.196.133.6: /* Quick */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Beispiel für Link im Header der Seite&lt;br /&gt;
 &amp;lt;link rel=&amp;quot;alternate&amp;quot; type=&amp;quot;application/rss+xml&amp;quot; title=&amp;quot;t3n Magazin RSS Feed&amp;quot; href=&amp;quot;http://t3n.de/magazin/feed/&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RSS für TYPO3 ==&lt;br /&gt;
tt_news Beiträge lassen sich sehr einfach als RSS News Feed bereitstellen.&lt;br /&gt;
&lt;br /&gt;
=== Quick ===&lt;br /&gt;
==== Statisches Template ==== &lt;br /&gt;
tt_news stellt ein statisches Template bereit, daß die wichtigsten Einstellungen vornimmt. Man kann natürlich auch alles selber machen. Wie unten im Beispiel gezeigt. Aber einfacher ist das statische.&lt;br /&gt;
&lt;br /&gt;
Beispiel für eigenes TypoScript (Setup)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### RSS ###&lt;br /&gt;
# Configure tt_news to display the xml template&lt;br /&gt;
&lt;br /&gt;
plugin.tt_news {&lt;br /&gt;
  displayXML {&lt;br /&gt;
    # rss091_tmplFile = EXT:tt_news/res/rss_0_91.tmpl&lt;br /&gt;
    # rdf_tmplFile = EXT:tt_news/res/rdf.tmpl&lt;br /&gt;
    # atom03_tmplFile = EXT:tt_news/res/atom_0_3.tmpl&lt;br /&gt;
    # atom1_tmplFile = EXT:tt_news/res/atom_1_0.tmpl&lt;br /&gt;
&lt;br /&gt;
    rss2_tmplFile = EXT:tt_news/res/rss_2.tmpl&lt;br /&gt;
    # possibile values: rss091 / rss2 / rdf / atom03 / atom1  &lt;br /&gt;
    xmlFormat = rss2&lt;br /&gt;
    xmlTitle = dekra-aviation: News&lt;br /&gt;
    xmlLink = http://dekra-aviation.com/&lt;br /&gt;
    xmlDesc = Latest News&lt;br /&gt;
    xmlLang = de&lt;br /&gt;
    xmlIcon = fileadmin/tt_news_article.gif&lt;br /&gt;
    title_stdWrap.htmlSpecialChars = 1&lt;br /&gt;
    title_stdWrap.htmlSpecialChars.preserveEntities = 1&lt;br /&gt;
    subheader_stdWrap.stripHtml = 1&lt;br /&gt;
    subheader_stdWrap.htmlSpecialChars = 1&lt;br /&gt;
    subheader_stdWrap.htmlSpecialChars.preserveEntities = 1&lt;br /&gt;
    subheader_stdWrap.crop = 100 | ... | 1&lt;br /&gt;
    subheader_stdWrap.ifEmpty.field = bodytext&lt;br /&gt;
    xmlLastBuildDate = 1&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
## This enables the xml news feed&lt;br /&gt;
xmlnews = PAGE&lt;br /&gt;
xmlnews {&lt;br /&gt;
  typeNum = 100&lt;br /&gt;
  10 &amp;gt;&lt;br /&gt;
  10 &amp;lt; plugin.tt_news&lt;br /&gt;
  10.pid_list &amp;gt;&lt;br /&gt;
  10.pid_list = 322&lt;br /&gt;
  10.singlePid = {$plugin.tt_news.singlePid}&lt;br /&gt;
  10.defaultCode = XML&lt;br /&gt;
  config {&lt;br /&gt;
    disableAllHeaderCode = 1&lt;br /&gt;
    additionalHeaders = Content-type:text/xml&lt;br /&gt;
    no_cache = 1&lt;br /&gt;
    xhtml_cleaning = 0&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Fall muß man auch den Header selbst setzen, damit der Browser / Feed Reader den Feed erkennt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
page.headerData.20 = TEXT&lt;br /&gt;
page.headerData.20.value = &amp;lt;link rel=&amp;quot;alternate&amp;quot; type=&amp;quot;application/rss+xml&amp;quot; title=&amp;quot;Dekra Aviation RSS-Feed&amp;quot; href=&amp;quot;http://dekra-aviation.de/index.php?id=434&amp;amp;type=100&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zum Vergleich das Original statische Template&lt;br /&gt;
&lt;br /&gt;
Constants:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[GLOBAL]&lt;br /&gt;
###&lt;br /&gt;
# These are the default TS-constants for RSS feeds from tt_news &lt;br /&gt;
##&lt;br /&gt;
&lt;br /&gt;
plugin.tt_news {&lt;br /&gt;
  displayXML {&lt;br /&gt;
     &lt;br /&gt;
        # cat=plugin.tt_news/file/80; type=file[html,htm,tmpl,txt]; label= RSS-News rss v2 Template File: XML template for RSS 2.0 feed&lt;br /&gt;
    rss2_tmplFile = EXT:tt_news/res/rss_2.tmpl&lt;br /&gt;
        # cat=plugin.tt_news/file/81; type=file[html,htm,tmpl,txt]; label= RSS-News rss v0.91 Template File: XML template for RSS 0.91 feed. &lt;br /&gt;
    rss091_tmplFile = EXT:tt_news/res/rss_0_91.tmpl&lt;br /&gt;
        # cat=plugin.tt_news/file/82; type=file[html,htm,tmpl,txt]; label= RDF-News RDF Template File: XML template for RDF feed.&lt;br /&gt;
    rdf_tmplFile = EXT:tt_news/res/rdf.tmpl&lt;br /&gt;
        # cat=plugin.tt_news/file/83; type=file[html,htm,tmpl,txt]; label= Atom-News Atom v0.3 Template File: XML template for Atom 0.3 feed.&lt;br /&gt;
    atom03_tmplFile = EXT:tt_news/res/atom_0_3.tmpl&lt;br /&gt;
        # cat=plugin.tt_news/file/84; type=file[html,htm,tmpl,txt]; label= Atom-News Atom v1.0 Template File: XML template for Atom 1.0 feed.&lt;br /&gt;
    atom1_tmplFile = EXT:tt_news/res/atom_1_0.tmpl&lt;br /&gt;
        # cat=plugin.tt_news//85; type=options[rss091,rss2,rdf,atom1,atom03]; label= News-Feed XML-Format: Defines the format of the news feed. Possible values are: &amp;#039;rss091&amp;#039;, &amp;#039;rss2&amp;#039; &amp;#039;rdf&amp;#039;, &amp;#039;atom1&amp;#039; and &amp;#039;atom03&amp;#039;&lt;br /&gt;
    xmlFormat = rss2&lt;br /&gt;
        # cat=plugin.tt_news//86; type=text; label= News-Feed XML-Title: The title of your news feed. (required for rss091, rss2, rdf and atom03)&lt;br /&gt;
    xmlTitle = example.com: Latest News&lt;br /&gt;
        # cat=plugin.tt_news//87; type=text; label= News-Feed XML-Link: The link to your hompage. (required for rss091, rss2, rdf and atom03)&lt;br /&gt;
    xmlLink = http://www.example.com/&lt;br /&gt;
        # cat=plugin.tt_news//88; type=text; label= News-Feed XML-Description: The description of your news feed. (required for rss091, rss2 and rdf. optional for atom03)&lt;br /&gt;
    xmlDesc = Latest news from example.com&lt;br /&gt;
       	# cat=plugin.tt_news//89; type=text; label= News-Feed XML-Language: Your site&amp;#039;s language. A list of allowable values for &amp;lt;language&amp;gt; in RSS is available at http://backend.userland.com/stories/storyReader$16 (equired for rss091, optional for rss2, not available for rdf, recommended for atom03)&lt;br /&gt;
    xmlLang = en&lt;br /&gt;
        # cat=plugin.tt_news//80; type=text; label= News-Feed XML-Icon: Provide an icon for your news feed with preferred size of 16x16 px, can be gif, jpeg or png. (required for rss091, optional for rss2 and rdf, not available for atom03)&lt;br /&gt;
    xmlIcon = EXT:tt_news/ext_icon.gif&lt;br /&gt;
        # cat=plugin.tt_news//91; type=int+; label= News-Feed XML-Limit: max news items in RSS feeds.&lt;br /&gt;
    xmlLimit = 10&lt;br /&gt;
        # cat=plugin.tt_news//92; type=boolean; label= News-Feed XML-Caching: Allow caching for the RSS feed&lt;br /&gt;
    xmlCaching = 1&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
###&lt;br /&gt;
# This is the default TS-setup RSS feed from tt_news&lt;br /&gt;
# this template has to be included after the tt_news main TS-setup because it depends on some settings from there&lt;br /&gt;
#&lt;br /&gt;
# (see Section Reference in the manual for more options &amp;amp; parameters)&lt;br /&gt;
#&lt;br /&gt;
# tt_news v 2.x&lt;br /&gt;
###&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# - - - - - - - - - - - - - -  render XML news   - - - - - - - - - - - - -  #&lt;br /&gt;
&lt;br /&gt;
# point your RSS reader to: http://your-server.org/index.php?type=100&lt;br /&gt;
&lt;br /&gt;
plugin.tt_news {&lt;br /&gt;
  displayXML {&lt;br /&gt;
    rss091_tmplFile = {$plugin.tt_news.displayXML.rss091_tmplFile}&lt;br /&gt;
    rss2_tmplFile = {$plugin.tt_news.displayXML.rss2_tmplFile}&lt;br /&gt;
    rdf_tmplFile = {$plugin.tt_news.displayXML.rdf_tmplFile}&lt;br /&gt;
    atom03_tmplFile = {$plugin.tt_news.displayXML.atom03_tmplFile}&lt;br /&gt;
    atom1_tmplFile = {$plugin.tt_news.displayXML.atom1_tmplFile}&lt;br /&gt;
     &lt;br /&gt;
        # possibile values: rss091 / rss2 / rdf / atom03&lt;br /&gt;
    xmlFormat = {$plugin.tt_news.displayXML.xmlFormat}&lt;br /&gt;
     &lt;br /&gt;
    xmlTitle = {$plugin.tt_news.displayXML.xmlTitle}&lt;br /&gt;
    xmlLink = {$plugin.tt_news.displayXML.xmlLink}&lt;br /&gt;
    xmlDesc = {$plugin.tt_news.displayXML.xmlDesc}&lt;br /&gt;
    xmlLang = {$plugin.tt_news.displayXML.xmlLang}&lt;br /&gt;
    xmlIcon = {$plugin.tt_news.displayXML.xmlIcon}&lt;br /&gt;
    xmlLimit = {$plugin.tt_news.displayXML.xmlLimit}&lt;br /&gt;
    xmlCaching = {$plugin.tt_news.displayXML.xmlCaching}&lt;br /&gt;
     &lt;br /&gt;
    title_stdWrap.htmlSpecialChars = 1&lt;br /&gt;
    title_stdWrap.htmlSpecialChars.preserveEntities = 1&lt;br /&gt;
    subheader_stdWrap.stripHtml = 1&lt;br /&gt;
    subheader_stdWrap.htmlSpecialChars = 1&lt;br /&gt;
    subheader_stdWrap.htmlSpecialChars.preserveEntities = 1&lt;br /&gt;
    subheader_stdWrap.crop = 100 | ... | 1 &lt;br /&gt;
    subheader_stdWrap.ifEmpty.field = bodytext&lt;br /&gt;
    xmlLastBuildDate = 1&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
## This enables the xml news feed&lt;br /&gt;
xmlnews = PAGE&lt;br /&gt;
xmlnews {&lt;br /&gt;
  typeNum = 100&lt;br /&gt;
   &lt;br /&gt;
  10 &amp;lt; plugin.tt_news&lt;br /&gt;
  10.pid_list &amp;gt;&lt;br /&gt;
  10.pid_list = {$plugin.tt_news.pid_list}&lt;br /&gt;
  10.singlePid = {$plugin.tt_news.singlePid}&lt;br /&gt;
  10.defaultCode = XML&lt;br /&gt;
  10.catTextMode = 1&lt;br /&gt;
  10.catImageMode = 0&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
  config {&lt;br /&gt;
    disableAllHeaderCode = 1&lt;br /&gt;
    additionalHeaders = Content-type:application/xml&lt;br /&gt;
    xhtml_cleaning = 0&lt;br /&gt;
    admPanel = 0&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
### CVS id ###&lt;br /&gt;
# $Id: setup.txt 3031 2006-05-19 13:58:06Z rupertgermann $&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
====TypoScript anpassen====&lt;br /&gt;
Nimmt man das statische Template kann man im Constant Editor die wichtigsten Einstellungen machen.&lt;br /&gt;
&lt;br /&gt;
Beispiel Constants&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
plugin.tt_news.displayXML.rss2_tmplFile = fileadmin/templates/news/rss_2.tmpl&lt;br /&gt;
plugin.tt_news.displayXML.xmlTitle = HfWU News&lt;br /&gt;
plugin.tt_news.displayXML.xmlLink = http://www.hfwu.de/&lt;br /&gt;
plugin.tt_news.displayXML.xmlDesc = News Feed der Hochschule für Wirtschaft und Umwelt&lt;br /&gt;
plugin.tt_news.displayXML.xmlLang = de&lt;br /&gt;
plugin.tt_news.displayXML.xmlLimit = 12&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Template anpassen&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Link und Anleitung&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;</summary>
		<author><name>193.196.133.6</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Rss&amp;diff=1969</id>
		<title>Rss</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Rss&amp;diff=1969"/>
		<updated>2010-04-26T18:55:07Z</updated>

		<summary type="html">&lt;p&gt;193.196.133.6: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Beispiel für Link im Header der Seite&lt;br /&gt;
 &amp;lt;link rel=&amp;quot;alternate&amp;quot; type=&amp;quot;application/rss+xml&amp;quot; title=&amp;quot;t3n Magazin RSS Feed&amp;quot; href=&amp;quot;http://t3n.de/magazin/feed/&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RSS für TYPO3 ==&lt;br /&gt;
tt_news Beiträge lassen sich sehr einfach als RSS News Feed bereitstellen.&lt;br /&gt;
&lt;br /&gt;
=== Quick ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Statisches Template&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
tt_news stellt ein statisches Template bereit, daß die wichtigsten Einstellungen vornimmt. Man kann natürlich auch alles selber machen. Wie unten gezeigt. Aber einfacher ist das statische.&lt;br /&gt;
&lt;br /&gt;
Beispiel für eigenes TypoScript&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### RSS ###&lt;br /&gt;
# Configure tt_news to display the xml template&lt;br /&gt;
&lt;br /&gt;
plugin.tt_news {&lt;br /&gt;
  displayXML {&lt;br /&gt;
    # rss091_tmplFile = EXT:tt_news/res/rss_0_91.tmpl&lt;br /&gt;
    # rdf_tmplFile = EXT:tt_news/res/rdf.tmpl&lt;br /&gt;
    # atom03_tmplFile = EXT:tt_news/res/atom_0_3.tmpl&lt;br /&gt;
    # atom1_tmplFile = EXT:tt_news/res/atom_1_0.tmpl&lt;br /&gt;
&lt;br /&gt;
    rss2_tmplFile = EXT:tt_news/res/rss_2.tmpl&lt;br /&gt;
    # possibile values: rss091 / rss2 / rdf / atom03 / atom1  &lt;br /&gt;
    xmlFormat = rss2&lt;br /&gt;
    xmlTitle = dekra-aviation: News&lt;br /&gt;
    xmlLink = http://dekra-aviation.com/&lt;br /&gt;
    xmlDesc = Latest News&lt;br /&gt;
    xmlLang = de&lt;br /&gt;
    xmlIcon = fileadmin/tt_news_article.gif&lt;br /&gt;
    title_stdWrap.htmlSpecialChars = 1&lt;br /&gt;
    title_stdWrap.htmlSpecialChars.preserveEntities = 1&lt;br /&gt;
    subheader_stdWrap.stripHtml = 1&lt;br /&gt;
    subheader_stdWrap.htmlSpecialChars = 1&lt;br /&gt;
    subheader_stdWrap.htmlSpecialChars.preserveEntities = 1&lt;br /&gt;
    subheader_stdWrap.crop = 100 | ... | 1&lt;br /&gt;
    subheader_stdWrap.ifEmpty.field = bodytext&lt;br /&gt;
    xmlLastBuildDate = 1&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
## This enables the xml news feed&lt;br /&gt;
xmlnews = PAGE&lt;br /&gt;
xmlnews {&lt;br /&gt;
  typeNum = 100&lt;br /&gt;
  10 &amp;gt;&lt;br /&gt;
  10 &amp;lt; plugin.tt_news&lt;br /&gt;
  10.pid_list &amp;gt;&lt;br /&gt;
  10.pid_list = 322&lt;br /&gt;
  10.singlePid = {$plugin.tt_news.singlePid}&lt;br /&gt;
  10.defaultCode = XML&lt;br /&gt;
  config {&lt;br /&gt;
    disableAllHeaderCode = 1&lt;br /&gt;
    additionalHeaders = Content-type:text/xml&lt;br /&gt;
    no_cache = 1&lt;br /&gt;
    xhtml_cleaning = 0&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zum Vergleich das Original statische Template&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;TypoScript anpassen&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Template anpassen&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Link und Anleitung&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;</summary>
		<author><name>193.196.133.6</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Typo3_-_Scheduler&amp;diff=2027</id>
		<title>Typo3 - Scheduler</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Typo3_-_Scheduler&amp;diff=2027"/>
		<updated>2010-04-08T10:30:36Z</updated>

		<summary type="html">&lt;p&gt;193.196.133.6: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Siehe: [[Typo3_Command_Line_Interface_(CLI)]]&lt;/div&gt;</summary>
		<author><name>193.196.133.6</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Typo3_Command_Line_Interface_(CLI)&amp;diff=2023</id>
		<title>Typo3 Command Line Interface (CLI)</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Typo3_Command_Line_Interface_(CLI)&amp;diff=2023"/>
		<updated>2010-04-08T10:29:58Z</updated>

		<summary type="html">&lt;p&gt;193.196.133.6: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Weiterführendes ==&lt;br /&gt;
Podcast zum Scheduler:&lt;br /&gt;
http://castor.t3o.punkt.de/files/scheduler.mp4&lt;br /&gt;
&lt;br /&gt;
Zu Historie des CLI und neuen Techniken: http://typo3blogger.de/vom-standalone-cli-zum-scheduler/&lt;br /&gt;
&lt;br /&gt;
Die lowlevel Extensions bringt bereits einige Tasks mit &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Von Tim Lochmüller im Adventskalender 2009 ==&lt;br /&gt;
=== Vom Stand-Alone CLI zum Scheduler – Türchen 5 ===&lt;br /&gt;
&lt;br /&gt;
Tim Lochmüller in Dev, Extension, TYPO3, Tutorial&lt;br /&gt;
&lt;br /&gt;
Im heutigen Türchen möchte ich euch die Geschichte des CLI ein wenig nahe bringen, sodass ihr wisst wie ihr am besten Dinge in TYPO3 automatisieren könnt.&lt;br /&gt;
&lt;br /&gt;
Einsteigen will ich bei der Version &amp;lt; 4.1. Bei dieser Version war ein Command Line Interface noch in einer eigenen Datei und es gab keine zentrale Registrierungsstelle für Scripte, die von der Kommandozeile ausgeführt werden sollten. Ähnlich wie ein Backend Modul bestand ein CLI Script aus einer conf.php in der wenige Konfigurationsvariablen gesetzt wurden und einer beliebigen PHP Dateien in der dann die Logik implementiert wurde. Der Code konnte dann hier mit unter gebracht werden (weitere Infos http://www.typo3-tutorials.org/tutorials/entwicklung/cli-shell-scripte.html). Nachteil: Teils unstrukturiert, weil viele Leute keine Objekte benutzt haben und ggf. viele Cronjobs pro Installation. Doch das war einmal…&lt;br /&gt;
&lt;br /&gt;
Ab der Version 4.1 gab es dann ein neues Interface. Dies besaß eine eigene Registrierungsstelle an der man seine eigenen Skripte registrieren konnte. In der ext_localconf.php einer Extension wurde über einen Hook eine neue CLI Klasse an TYPO3 registriert. Die Logik war dann in eine Klasse strukturiert, welche ein wenig mehr Übersicht verschafft hat (zudem gab es dann die Möglichkeit einen CLI zu XClassen). Ebenfalls wie bei der älteren Variante wird ein spezielle Backend benutze benötigt. Ausgeführt wurde das ganze dann über einen zentralen CLI Dispatcher (typo3/cli_dispatch.phpsh) wobei die Parameter dann bestimmte Tasks ausgeführt haben. Nachteil: Immer noch viele Cronjobs, wenn es viele verschiedene Tasks gibt. Doch das war einmal….&lt;br /&gt;
&lt;br /&gt;
Ende der Version 4.1 bzw. Anfang der Version 4.2 wurde Gabriel langsam bekannt. Gabriel registrierte sich selbst an TYPO3’s CLI Schnittstelle und hat ein Backend Modul zu Verfügung gestellt über das man Aufgaben verwalten konnte. Extension hat nun die Möglichkeit Ihre aufgaben am Gabriel anzumelden und diese dann übersichtliche im Backend in einer GUI zu verwalteten. Es gab somit nur noch einen Cronjob der in kurzen Abständen durchgeführt wurde und Gabriel kümmerte sich darum, dass immer die richtigen Aufgaben durchgeführt wurden. Ein wirklich gute Idee. Nachteil: Keine hohe Akzeptanz, weil es nicht teil des Kernsystems ist. Doch das war einmal…&lt;br /&gt;
&lt;br /&gt;
Seit der TYPO3 Version 4.3 haben wir nun den Scheduler. Er ist der “neue” Gabriel bzw. die Kernversion dessen. Extensions haben nun die Möglichkeit Tasks am Scheduler zu registrieren. Durch die Integration in den Kern, hofft man auf große Akzeptanz. Ist auch eine Feine Sache. Nachteil: Weißt du wie es geht? Nein? Deshalb ließ weiter:&lt;br /&gt;
&lt;br /&gt;
Beim Scheduler muss man einzelne Tasks über die ext_localconf.php an der System-Extension anmelden. Dies geschieht über einen einfachen Hook. Neben dem Extension Key, dem Titel und der Beschreibung hat man die Möglichkeit zusätzliche Felder über einen Provider zu Verfügung zu stellen. Dadurch kann man die einzelnen Tasks hinterher besser/genauer/speziell konfigurieren.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$TYPO3_CONF_VARS[&amp;#039;SC_OPTIONS&amp;#039;][&amp;#039;scheduler&amp;#039;][&amp;#039;tasks&amp;#039;][&amp;#039;tx_extkey_TaskName&amp;#039;] = array(&lt;br /&gt;
	&amp;#039;extension&amp;#039; =&amp;gt; $_EXTKEY, // Selbsterklärend&lt;br /&gt;
	&amp;#039;title&amp;#039; =&amp;gt; &amp;#039;LLL:EXT:&amp;#039;.$_EXTKEY.&amp;#039;/locallang.xml:TaskName.name&amp;#039;, // Der Titel der Aufgabe&lt;br /&gt;
	&amp;#039;description&amp;#039; =&amp;gt; &amp;#039;LLL:EXT:&amp;#039;.$_EXTKEY.&amp;#039;/locallang.xml:TaskName.description&amp;#039;, // Die Beschreibung der Aufgabe&lt;br /&gt;
	// &amp;#039;additionalFields&amp;#039; =&amp;gt; &amp;#039;tx_extkey_TaskName_AdditionalFieldProvider&amp;#039; // Zusätzliche Felder&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die einzelnen Klassen dem System bekannt zu machen empfiehlt es sich, diese einfach in die ext_autoload.php einzutragen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
return array(&lt;br /&gt;
	&amp;#039;tx_extkey_TaskName&amp;#039; =&amp;gt; t3lib_extMgm::extPath(&amp;#039;extkey&amp;#039;, &amp;#039;scheduler/class.tx_extkey_TaskName.php&amp;#039;)&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die eigentliche Aufgabe, welche dann den Code ausführt, muss zudem die Klasse “tx_scheduler_Task” erweitern. Von dieser abstrakten Klasse muss mindestens die Methode “execute” (Übersicht über alle Funkionen: http://www.typo3-unleashed.net/typo3apidocs/latest/db/daa/classtx__scheduler__Task.html) überschrieben werden (return true/false nicht vergessen). Der Rest (zeitliche Konfiguration, kein paralleles ausführen etc.) erledigt man dann im Scheduler über die GUI des Backend Modul. Wenn man direkt welche der zusätzlichen Felder benutzen will, dann braucht man zudem eine weitere Klasse welche den AdditionalFieldProvider zu Verfügung stellt. Diese Klasse muss “tx_scheduler_AdditionalFieldProvider” erweitern.&lt;br /&gt;
&lt;br /&gt;
Ich hoffe diese kleine Historie gibt euch einen Anreiz den nächsten CLI Skript innerhalb von TYPO3 mit dem neuen Scheduler zu bauen. Viel Spaß dabei.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Von Tim Lochmüller im Adventskalender 2008 ==&lt;br /&gt;
&lt;br /&gt;
Heute im Türchen 15 möchte ich Euch die Verwendung des Command Line Interface (CLI) von TYPO3 näher bringen. Das CLI bietet sich immer an, wenn man Prozesse automatisieren möchte. Dies gilt z.B. für tägliche Erinnerungsmails, welche jeden morgen um 9 Uhr versendet werden sollen. Genau an diesem Beispiel möchte ich Euch nun zeigen, wie sowas geht:&lt;br /&gt;
&lt;br /&gt;
Es sind nur 5 einfach Schritte nötig:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;1. Backend User&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Wir benötigen einen Backend-User, welcher für die Ausführung benötigt wird. Dieser sollte mit &amp;quot;_cli_&amp;quot; beginnen. Wir nennen ihn mal &amp;quot;_cli_myext&amp;quot;, das Passwort ist eigentlich egal, da das CLI sich nicht ins Backend einloggt, jedoch könnte dieser User bei einem schwachen Passwort böswillig verwendet werden. Aus diesem Grund sollten ein sehr kryptisches Passwort gewählt werden.&lt;br /&gt;
&lt;br /&gt;
Anmerkung Steff: _cli_ user können sich nicht ins Backend einloggen, Passwort ist also egal. (getestet mit TYPO3 Version 4.2)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;2. Registrierung des CLI Scripts&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Um das CLI nutzen zu können, müssen wir nun unser Script registrieren, dazu ist folgender Eintrag in der Datei ext_localconf.php notwendig:&lt;br /&gt;
&lt;br /&gt;
if (TYPO3_MODE==&amp;#039;BE&amp;#039;) {&lt;br /&gt;
  $TYPO3_CONF_VARS[&amp;#039;SC_OPTIONS&amp;#039;][&amp;#039;GLOBAL&amp;#039;][&amp;#039;cliKeys&amp;#039;][$_EXTKEY] = array(&lt;br /&gt;
    &amp;#039;EXT:&amp;#039;.$_EXTKEY.&amp;#039;/class.tx_myext_cli.php&amp;#039;,&lt;br /&gt;
    &amp;#039;_cli_myext&amp;#039;&lt;br /&gt;
  );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Hierbei ist zu beachten, dass der Backend-User mit angeben wird.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;3. Das CLI Script selbst&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Als nächstes benötigen wir das CLI Script selbst:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (!defined(&amp;#039;TYPO3_cliMode&amp;#039;))  die(&amp;#039;You cannot run this script directly, only from the command line!&amp;#039;);&lt;br /&gt;
 &lt;br /&gt;
require_once(PATH_t3lib.&amp;#039;class.t3lib_cli.php&amp;#039;); &lt;br /&gt;
 &lt;br /&gt;
class tx_myext_cli extends t3lib_cli {&lt;br /&gt;
    function tx_myext_cli() {&lt;br /&gt;
      parent::t3lib_cli();&lt;br /&gt;
      $this-&amp;gt;cli_help[&amp;#039;name&amp;#039;] = &amp;#039;Reminder-Mailings&amp;#039;;&lt;br /&gt;
      $this-&amp;gt;cli_help[&amp;#039;synopsis&amp;#039;] = &amp;#039;###OPTIONS###&amp;#039;;&lt;br /&gt;
      $this-&amp;gt;cli_help[&amp;#039;description&amp;#039;] = &amp;#039;send reminder mailings&amp;#039;;&lt;br /&gt;
      $this-&amp;gt;cli_help[&amp;#039;examples&amp;#039;] = &amp;#039;/.../cli_dispatch.phpsh myext sendMails&amp;#039;;&lt;br /&gt;
      $this-&amp;gt;cli_help[&amp;#039;author&amp;#039;] = &amp;#039;Frank Nägler, (c) 2008&amp;#039;;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    function cli_main($args) {&lt;br /&gt;
      // extract task&lt;br /&gt;
      $task = (string) $this-&amp;amp;gt;cli_args[&amp;#039;_DEFAULT&amp;#039;][1];&lt;br /&gt;
      switch ($task) {&lt;br /&gt;
        case &amp;#039;sendMails&amp;#039;:&lt;br /&gt;
            $this-&amp;gt;sendMails();&lt;br /&gt;
        break;&lt;br /&gt;
        default:&lt;br /&gt;
          $this-&amp;gt;cli_validateArgs();&lt;br /&gt;
          $this-&amp;gt;cli_help();&lt;br /&gt;
          exit;&lt;br /&gt;
        break;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    function sendMails() {&lt;br /&gt;
    	// send some mails&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
// Call the functionality&lt;br /&gt;
$cliObj = t3lib_div::makeInstance(&amp;#039;tx_myext_cli&amp;#039;);&lt;br /&gt;
$cliObj-&amp;gt;cli_main($_SERVER[&amp;#039;argv&amp;#039;]);&lt;br /&gt;
 &lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;4. Der Aufruf&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Möchte man das CLI jetzt testen, dann brauchen wir nur die folgende Zeile in einer Shell aufrufen:&lt;br /&gt;
&lt;br /&gt;
 /path/to/typo3/cli_dispatch.phpsh myext sendMails&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;5. Der cronJob&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Da wir die Mails ja jeden morgen um 9 Uhr versenden möchte, brauchen wir noch einen Eintrag in der cronTab:&lt;br /&gt;
&lt;br /&gt;
0 9 * * * /path/to/typo3/cli_dispatch.phpsh myext sendMails&lt;br /&gt;
&lt;br /&gt;
Das war es schon, die Möglichkeiten sind quasi unerschöpflich. Viel Spaß und viel Erfolg mit dem nächsten cronJob&lt;/div&gt;</summary>
		<author><name>193.196.133.6</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Linux_-_Cronjobs&amp;diff=1999</id>
		<title>Linux - Cronjobs</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Linux_-_Cronjobs&amp;diff=1999"/>
		<updated>2010-04-07T05:58:47Z</updated>

		<summary type="html">&lt;p&gt;193.196.133.6: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Links ==&lt;br /&gt;
http://www.debian-administration.org/articles/56&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Cronjobs / Crontab ==&lt;br /&gt;
&lt;br /&gt;
Cronjobs sind Aufgaben, die regelmäßig zu einer bestimmten Zeit ausgeführt werden.&lt;br /&gt;
Das können z.B. Serverstatistiken sein, die man jede Nacht generieren möchte.&lt;br /&gt;
&lt;br /&gt;
Anzeigen kann man die Liste der Cronjobs mit dem Befehl:&lt;br /&gt;
&lt;br /&gt;
 crontab -l&lt;br /&gt;
&lt;br /&gt;
Editieren kann man die Liste mit:&lt;br /&gt;
&lt;br /&gt;
 crontab -e&lt;br /&gt;
&lt;br /&gt;
Nun wird die Liste der Cronjobs mit dem Standardeditor (in der Regel vim) geöffnet.&lt;br /&gt;
&lt;br /&gt;
Hier stehen nun Zeilen dirn, die in etwa, wie die folgende aussehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0 */6 * * * /usr/local/confixx/runwebalizer.sh 2&amp;gt;/dev/null &amp;gt;/dev/null&lt;br /&gt;
0 20 * * * /srv/scripts/backup.sh 2&amp;gt;&amp;amp;1 | /usr/global/bin/cmail -s &amp;quot;Mail-Subject&amp;quot; mail@admin.de&lt;br /&gt;
1 3 * * * /srv/scripts/backup.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die ersten 5 Stellen sind Zahlen, die durch Leerzeichen, oder Tabs getrennt werden dürfen.&lt;br /&gt;
Dabei stehen die Zahlen der Reihenfolge nach für:&lt;br /&gt;
&lt;br /&gt;
Die Minute zu der das Script ausgeführt werden soll (0-59),&lt;br /&gt;
&lt;br /&gt;
Die Stunde (0-23),&lt;br /&gt;
&lt;br /&gt;
Den Tag (1-31),&lt;br /&gt;
&lt;br /&gt;
Den Monat (1-12),&lt;br /&gt;
&lt;br /&gt;
Den Wochentag (0-6 wobei 0=Sonntag).&lt;br /&gt;
&lt;br /&gt;
Ein * steht jeweils für &amp;#039;jeden&amp;#039;.&lt;br /&gt;
 1 3 * * * &lt;br /&gt;
&lt;br /&gt;
würde also bedeuten: Jeden Tag um 3.01 Uhr&lt;br /&gt;
 */6 &lt;br /&gt;
&lt;br /&gt;
bedeutet: &amp;quot;Wenn die Zahl durch 6 teilbar ist&amp;quot;, also alle 6 Stunden/Minute, ...&lt;br /&gt;
 0 */6 * * * &lt;br /&gt;
&lt;br /&gt;
würde bedeuten jede 6 Stunden und 0 Minuten, also jeden Tag um 0.00, um 6.00, um 12.00 und um 18.00.&lt;br /&gt;
&lt;br /&gt;
Man kann mehrere Zahlen auch durch Komata trennen:&lt;br /&gt;
 7 1,2,5 * * * würde jeden Tag um 1:07, um 2:07 und um 5:07 ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Auch - (bis) ist Möglich&lt;br /&gt;
 0 0 * * 1-5 würde jeden Wochentag um 0.00 ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Nach dieser Zeitangabe folgt das Komando, dass zu den zuvor festgelegten Zeiten ausgeführt werden soll.&lt;br /&gt;
z.B.: Das Script /srv/scripts/backup.sh aufrufen, welches z.B. wichtige Dateien sichert. &lt;br /&gt;
&lt;br /&gt;
Quelle: http://www.orgapage.net/pages/server/linux/cronjobs.php (1.10.2009)&lt;/div&gt;</summary>
		<author><name>193.196.133.6</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Typo3_Extensions_programmieren_-_Snippets&amp;diff=17583</id>
		<title>Typo3 Extensions programmieren - Snippets</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Typo3_Extensions_programmieren_-_Snippets&amp;diff=17583"/>
		<updated>2010-03-01T19:52:55Z</updated>

		<summary type="html">&lt;p&gt;193.196.133.6: /* Funktionen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Templates ==&lt;br /&gt;
=== Template Code holen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    function getTemplateCode($mySubpart){&lt;br /&gt;
        $tsTemplateFile = $this-&amp;gt;conf[&amp;#039;templateFile&amp;#039;];&lt;br /&gt;
        // Wenn Flextemplate dann code aus diesem, sonst aus TS&lt;br /&gt;
	$this-&amp;gt;flexConf[&amp;#039;template&amp;#039;] ? $templateCode = this-&amp;gt;cObj-&amp;gt;fileResource(&amp;quot;uploads/tx_&amp;quot;.$this-&amp;gt;extKey.&amp;quot;/&amp;quot;.$this-&amp;gt;flexConf[&amp;#039;template&amp;#039;]) : $templateCode=$this-&amp;gt;cObj-&amp;gt;fileResource($tsTemplateFile);&lt;br /&gt;
        return $templateCode;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Saubere Links in Extensions erzeugen ===&lt;br /&gt;
Kommentar von Elmar Hinz:&lt;br /&gt;
&lt;br /&gt;
Die Linkfunktionen der tslib_pibase sind nicht garade eine Hilfe. 2/3&lt;br /&gt;
davon streichen und die Extension wird 1/3 besser. Wenn Du Dich allein auf&lt;br /&gt;
die Funktion pi_linkTP_keepPIvars konzentrierst, kannst du damit aber fast&lt;br /&gt;
alles stemmen. Noch konsequenter wendest du gleich selbst die&lt;br /&gt;
zugrundeliegende typolink Funktion an.&lt;br /&gt;
&lt;br /&gt;
Das Thema mit dem Fokus auf ein sauberes Caching hier:&lt;br /&gt;
&lt;br /&gt;
http://t3flyers.wordpress.com/2006/09/11/a-quick-guide-to-proper-caching-with-tslib_pibase-episode-1/&lt;br /&gt;
&lt;br /&gt;
== Session Variablen in Typo3 ==&lt;br /&gt;
Mit Hilfe von Sessions kann man Benutzerbezogene Daten speichern, ohne daß Parameter per Get oder Post übertragenwerden müssen. Auch Seiten über Links etc. neu geladen werden.&lt;br /&gt;
&lt;br /&gt;
Im Prinzip kann man Session Variablen folgendermaßen spreichern.&lt;br /&gt;
  $GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;fe_user-&amp;gt;setKey(&amp;quot;ses&amp;quot;,&amp;quot;$data&amp;quot;, &amp;quot;$zustand&amp;quot;);&lt;br /&gt;
  $GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;fe_user-&amp;gt;storeSessionData();&lt;br /&gt;
&lt;br /&gt;
=== Benutzer-Session oder Browser-Session ===&lt;br /&gt;
In Typo3 gibt es Standardmäßig 2 Sessions die man nutzen kann.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;User data&amp;#039;&amp;#039;&amp;#039; =&amp;gt; Eingeloggter User. Kein Zugriff mehr wenn ausgeloggt.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Session data&amp;#039;&amp;#039;&amp;#039; =&amp;gt; Jeder User. Eingeloggt oder nicht. Daten sind an die &amp;quot;browsing-session&amp;quot; gebunden und nicht an die user-id. Bleibt erhalten bis der Browser geschlossen wird.&lt;br /&gt;
&lt;br /&gt;
Default expire-time: 24h&lt;br /&gt;
&lt;br /&gt;
=== Funktionen ===&lt;br /&gt;
 $GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;fe_user-&amp;gt;getKey(type, key)&lt;br /&gt;
&lt;br /&gt;
&amp;quot;&amp;#039;&amp;#039;&amp;#039;type&amp;#039;&amp;#039;&amp;#039;&amp;quot; Entweder &amp;quot;user&amp;quot; or &amp;quot;ses&amp;quot;, definiert den Namensraum (data-space), user-session oder browsing-session (siehe oben)&lt;br /&gt;
&lt;br /&gt;
&amp;quot;&amp;#039;&amp;#039;&amp;#039;key&amp;#039;&amp;#039;&amp;#039;&amp;quot; der &amp;quot;name&amp;quot; unter dem die Daten gespeichert werden. Arrays oder Scalars.&lt;br /&gt;
&lt;br /&gt;
Note that the key &amp;quot;recs&amp;quot; is reserved for the built-in &amp;quot;shopping-basket&amp;quot;. As is &amp;quot;sys&amp;quot; (for TYPO3 standard modules and code)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Example:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ($GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;loginUser){&lt;br /&gt;
    $myData = $GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;fe_user-&amp;gt;getKey(&amp;quot;user&amp;quot;,&amp;quot;myData&amp;quot;);&lt;br /&gt;
} else {&lt;br /&gt;
    $myData = $GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;fe_user-&amp;gt;getKey(&amp;quot;ses&amp;quot;,&amp;quot;myData&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Liest die Benutzerdaten (user) mit dem Schlüssel &amp;quot;myData&amp;quot;. Wenn kein Benutzer eingeloggt ist werden die Daten aus der Browser Session verwendet.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Daten Speichern&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 $GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;fe_user-&amp;gt;setKey(type, key, data)&lt;br /&gt;
&lt;br /&gt;
&amp;quot;type&amp;quot; ist wieder &amp;quot;user&amp;quot; oder &amp;quot;ses&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;key&amp;quot; ist der Name oder auch Schlüssel unter dem die Daten gespeichert werden.&lt;br /&gt;
&lt;br /&gt;
Note that the key &amp;quot;recs&amp;quot; is reserved for the built-in &amp;quot;shopping-basket&amp;quot;. As is &amp;quot;sys&amp;quot; (for TYPO3 standard modules and code)&lt;br /&gt;
&lt;br /&gt;
&amp;quot;data&amp;quot; ist der Wert der Variablen die gespeichert werden sollen. Arrays oder normale Skalare (einfache Variablen).&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Example:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$myConfig[&amp;quot;name&amp;quot;] = &amp;quot;paul&amp;quot;;&lt;br /&gt;
$myConfig[&amp;quot;address&amp;quot;] = &amp;quot;Main street&amp;quot;;&lt;br /&gt;
$GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;fe_user-&amp;gt;setKey(&amp;quot;ses&amp;quot;,&amp;quot;myData&amp;quot;, $myConfig);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This stores the array $myConfig under the key &amp;quot;myData&amp;quot; in the session-data. This lasts as long as &amp;quot;paul&amp;quot; is surfing the site!&lt;br /&gt;
&lt;br /&gt;
=== Beispiel Prüfen ob Seite aktualisiert wurde ===&lt;br /&gt;
Manchmal ist es notwendig zu prüfen ob eine Seite mit einem Formular mit dem Submit-Button abgesendet wurde, oder ob die Daten durch Klick auf den Reload Button des Browsers nochmal aufgerufen wurde. In diesem Fall sollten etwa Berechnungen mit den Formulardaten nicht noch einmal ausgeführt werden.&lt;br /&gt;
Mit einer Session läßt sich das lösen:&lt;br /&gt;
&lt;br /&gt;
Session initialisieren&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// User Session (bei Login) oder &amp;quot;normale&amp;quot; Session nutzen&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;sesData = array();&lt;br /&gt;
($GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;loginUser)?{$this-&amp;gt;sesType = &amp;quot;user&amp;quot;:$this-&amp;gt;sesType = &amp;quot;ses&amp;quot;;&lt;br /&gt;
$this-&amp;gt;sesData = $GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;fe_user-&amp;gt;getKey($this-&amp;gt;sesType,&amp;quot;sesData&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn ein Formular abgeschickt wird, dann senden wir einen Wert mit, der sich immer verändert.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$content .= &amp;#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;&amp;#039;.$this-&amp;gt;prefixId.&amp;#039;[token]&amp;quot; value=&amp;quot;&amp;#039;.hash(&amp;quot;md5&amp;quot;,time()).&amp;#039;&amp;quot; /&amp;gt;!;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit dieser Funktion wird bei jedem Abruf festgestellt, ob der im Formular übermittelte Wert in der Session existiert. Falls nicht wird er in der Session gespeichert, die Seite wurde nicht durch klicken auf Reload generiert. Klickt der User hingegen auf Reload, wird der alte Formular Wert noch einmal übermittelt. In diesem Fall stimmt er mit dem beim ersten Aufruf gespeicherten &amp;quot;Token&amp;quot; Wert überein.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function is_reloaded(){&lt;br /&gt;
  if(!empty($this-&amp;gt;piVars[&amp;#039;token&amp;#039;])){&lt;br /&gt;
    if($this-&amp;gt;piVars[&amp;#039;token&amp;#039;] == $this-&amp;gt;sesData[&amp;#039;token&amp;#039;]){&lt;br /&gt;
      $reloaded = 1;&lt;br /&gt;
      $this-&amp;gt;piVars = array();&lt;br /&gt;
    }else{&lt;br /&gt;
      $reloaded = 0;&lt;br /&gt;
      $this-&amp;gt;sesData[&amp;#039;token&amp;#039;] = $this-&amp;gt;piVars[&amp;#039;token&amp;#039;];&lt;br /&gt;
      $GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;fe_user-&amp;gt;setKey($this-&amp;gt;sesType,&amp;quot;sesData&amp;quot;, $this-&amp;gt;sesData);&lt;br /&gt;
    }&lt;br /&gt;
  } else $reloaded = 1;&lt;br /&gt;
  return $reloaded;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Größe von Dateien lesbar ausgeben ==&lt;br /&gt;
Aus Typo3 Adventskalender 2008 von Tim Lochmüller&lt;br /&gt;
röße von Dateien ausgeben, jedoch speichert TYPO3 diese Dateigrößen in der Regel in Bytes. Um nun eine für den normalen Menschen lesbare Ausgabe zu bekommen, bietet die Klasse t3lib_div eine nette Funktion zur Formatierung:&lt;br /&gt;
&lt;br /&gt;
      t3lib_div::formatSize($sizeInBytes, $labels=&amp;#039;&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
Während sich der erste Parameter wie ich denke von selbst erklärt, bedarf der zweite eine kurze Erläuterung. Der zweite Parameter ist eine durch &amp;quot;|&amp;quot;-Zeichen separierte Liste von Labels für Bytes, Kilobytes, Megabytes und Gigabytes. Der Standard ist &amp;quot; | K| M| G&amp;quot;. In Deutschland zumindest ist man eine andere Schreibweise gewohnt, also gleich mal ein Beispiel:&lt;br /&gt;
&lt;br /&gt;
      $fileSize1 = 370&lt;br /&gt;
      $fileSize2 = 378880&lt;br /&gt;
      $fileSize3 = 387973120&lt;br /&gt;
      $fileSize4 = 397284474880&lt;br /&gt;
       &lt;br /&gt;
      echo t3lib_div::formatSize($fileSize1, $labels=&amp;#039; Bytes | KB | MB | GB&amp;#039;);&lt;br /&gt;
      // Ausgabe: 370 Bytes&lt;br /&gt;
      echo t3lib_div::formatSize($fileSize2, $labels=&amp;#039; Bytes | KB | MB | GB&amp;#039;);&lt;br /&gt;
      // Ausgabe: 370 KB&lt;br /&gt;
      echo t3lib_div::formatSize($fileSize3, $labels=&amp;#039; Bytes | KB | MB | GB&amp;#039;);&lt;br /&gt;
      // Ausgabe: 370 MB&lt;br /&gt;
      echo t3lib_div::formatSize($fileSize4, $labels=&amp;#039; Bytes | KB | MB | GB&amp;#039;);&lt;br /&gt;
      // Ausgabe: 370 GB&lt;br /&gt;
&lt;br /&gt;
== Auf die TypoScript Konfiguration einer anderen Extension zugreifen ==&lt;br /&gt;
Auf TSconf einer anderen Extension zugreifen&lt;br /&gt;
&lt;br /&gt;
Wenn man in einer Extension auf den TypoScript-Setupteil einer anderen Extension zugreifen möchte und im TypoScript-Code die Variablen nicht mehrfach aufführen möchte, kann man dies mit folgender Zeile machen:&lt;br /&gt;
&lt;br /&gt;
 $extConf = $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;tmpl-&amp;gt;setup[&amp;#039;plugin.&amp;#039;][&amp;#039;tx_MYEXT_pi1.&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
Dadurch erhält man den kompletten conf-Teil der Extension. Einzelne Variablen bzw. Bereiche erhält man, wenn man die Variable mit [VAR] anhängt.&lt;br /&gt;
&lt;br /&gt;
(Quelle: Typo3 Snippets Juni 2009)&lt;br /&gt;
siehe auch: http://www.lisardo.biz/wiki/GLOBALS-TSFE/&lt;/div&gt;</summary>
		<author><name>193.196.133.6</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Typo3_-_Extensions_programmieren&amp;diff=1850</id>
		<title>Typo3 - Extensions programmieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Typo3_-_Extensions_programmieren&amp;diff=1850"/>
		<updated>2010-03-01T15:41:41Z</updated>

		<summary type="html">&lt;p&gt;193.196.133.6: /* Typo3 Extensions programmieren - Nützliche Funktionen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Weiterführende Links:&lt;br /&gt;
&lt;br /&gt;
http://typo3.org/documentation/api/&lt;br /&gt;
&lt;br /&gt;
http://wiki.typo3.org/De:Create_your_own_extension&lt;br /&gt;
&lt;br /&gt;
http://wiki.typo3.org/Extension_Developers_Guide&lt;br /&gt;
&lt;br /&gt;
http://typo3.org/documentation/document-library/core-documentation/doc_core_api/4.2.0/view/3/2/#id4144512&lt;br /&gt;
&lt;br /&gt;
(High Priority Functions)&lt;br /&gt;
&lt;br /&gt;
== Templates ==&lt;br /&gt;
[[Typo3 Extension Developer Templates]]&lt;br /&gt;
== Wie fange ich an ? ==&lt;br /&gt;
Was möchtest du tun?&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ein vorhandenes Inhaltselement verändern, z.B. Felder hinzufügen oder ein neues Erstellen.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[Typo3 Extensions - Inhaltstypen anlegen und bearbeiten]]&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel dafür ist die Extension metatags die den Inhaltselementen Text mit Bild und Bild zusätzliche Felder für Alt und Title Tag hinzufügt.&lt;br /&gt;
&lt;br /&gt;
== Extensions Programmieren in der Praxis ==&lt;br /&gt;
=== Typo3 Extensions - Sicherheit ===&lt;br /&gt;
[[Typo3 Extensions programmieren - Security Tipps]]&lt;br /&gt;
=== JavaScript in Typo3 Extensions ===&lt;br /&gt;
[[Typo3 - JavaScript einbinden]]&lt;br /&gt;
&lt;br /&gt;
=== Typo3 und AJAX ===&lt;br /&gt;
[[AJAX in TYPO3 Extensions]]&lt;br /&gt;
&lt;br /&gt;
=== TypoScript in Extensions ===&lt;br /&gt;
[[TypoScript Einstellungen in Extensions auslagern]]&lt;br /&gt;
&lt;br /&gt;
=== Frontend Plugin ===&lt;br /&gt;
[[Typo3 Extensions - ein Frontend Plugin Programmieren]]&lt;br /&gt;
=== IRRE ===&lt;br /&gt;
[[Typo3 Extensions mit IRRE]]&lt;br /&gt;
&lt;br /&gt;
Das IRRE Konzept hilft beim erstellen von Extensions mit &amp;quot;echten&amp;quot; relationalen Datenbankabfragen&lt;br /&gt;
=== FlexForms ===&lt;br /&gt;
[[Typo3 Extensions mit FlexForms]]&lt;br /&gt;
&lt;br /&gt;
=== Backendformulare ===&lt;br /&gt;
[[Typo3 Extensions - Backend Formulare und TCA Konfiguration]]&lt;br /&gt;
&lt;br /&gt;
siehe auch&lt;br /&gt;
&lt;br /&gt;
http://wiki.zone30.info/wikizone/index.php/Typo3_-_Extensions_programmieren#Formulare_im_Backend&lt;br /&gt;
&lt;br /&gt;
=== Erweitern von Funktionalitäten mit Hooks ===&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel findet sich hier unter Funktionen vor oder nach der Backendeingabe ausführen: &lt;br /&gt;
&lt;br /&gt;
[[Typo3 Extensions - Backend Formulare und TCA Konfiguration]]&lt;br /&gt;
&lt;br /&gt;
Eine schöne Einführung von Typo3 Blogger:&lt;br /&gt;
[[Typo3 - Alles über Hooks]]&lt;br /&gt;
&lt;br /&gt;
=== Arbeiten mit Templates ===&lt;br /&gt;
[[Typo3 Extensions - Arbeiten mit Templates]]&lt;br /&gt;
&lt;br /&gt;
=== Typo3 Extensions programmieren - Snippets ===&lt;br /&gt;
[[Typo3 Extensions programmieren - Snippets]]&lt;br /&gt;
&lt;br /&gt;
=== Typo3 Extensions programmieren - Rich Text Editor (RTE) ===&lt;br /&gt;
[[Typo3 Extensions programmieren - RTE]]&lt;br /&gt;
&lt;br /&gt;
=== Typo3 Extensions programmieren - Session Verwaltung ===&lt;br /&gt;
Siehe auch Sessions in Typo3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Standardmäßig gibt es Sessions für eingeloggte Frontend User Session und Browser Sessions&lt;br /&gt;
&lt;br /&gt;
Browser Session Variable setzen&lt;br /&gt;
 $GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;fe_user-&amp;gt;setKey(&amp;quot;ses&amp;quot;,&amp;quot;zaehler&amp;quot;, $wert);&lt;br /&gt;
und auslesen:&lt;br /&gt;
 $GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;fe_user-&amp;gt;getKey(&amp;quot;ses&amp;quot;,&amp;quot;zaehler&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Bei der User Session wird statt &amp;#039;ses&amp;#039; &amp;#039;user&amp;#039; als 1. Parameter verwendet&lt;br /&gt;
Beispiele User Session: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $this-&amp;gt;lastSelection[&amp;#039;filters&amp;#039;][&amp;#039;sem&amp;#039;] = 0;&lt;br /&gt;
 //User SEssion Data lesen&lt;br /&gt;
 $this-&amp;gt;lastSelection = $GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;fe_user-&amp;gt;getKey(&amp;quot;user&amp;quot;,&amp;quot;lastSelection&amp;quot;);&lt;br /&gt;
 // User Session Data schreiben&lt;br /&gt;
 GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;fe_user-&amp;gt;setKey(&amp;quot;user&amp;quot;,&amp;quot;lastSelection&amp;quot;,$this-&amp;gt;lastSelection);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ein weiterer netter Artikel von Tim Lochmüller aus typo3weblog.de&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Diesmal geht es um die Benutzung der Session in TYPO3. In der Regel genügt nur eine Zeile Code um einen Wert in die Session zu schreiben oder wieder heraus zu holen. Schauen wir uns erstmal an, wie man etwas in die Session schreibt:&lt;br /&gt;
&lt;br /&gt;
 $GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;fe_user-&amp;gt;setKey(&amp;quot;ses&amp;quot;, &amp;quot;tx_myext&amp;quot;, $data);&lt;br /&gt;
&lt;br /&gt;
Die Funktion setKey() erwartet drei Parameter:&lt;br /&gt;
&lt;br /&gt;
# Type: Dieser kann &amp;quot;ses&amp;quot; oder &amp;quot;user&amp;quot; sein.&lt;br /&gt;
# Key: Eindeutiger Ident für eine Session Variable&lt;br /&gt;
# Data: Die Daten die gespeichert werden sollen.&lt;br /&gt;
&lt;br /&gt;
Die beiden Typen &amp;quot;ses&amp;quot; und &amp;quot;user&amp;quot; unterscheiden sich wesentlich. Während der Typ &amp;quot;ses&amp;quot; nur temporär die Daten speichert, also genau so lange, wie die Session besteht (Session-Cookie), ist es mit dem Key &amp;quot;user&amp;quot; möglich, die Daten auch über mehrere Sessions hinweg zu speichern, wobei diese an den FE-User gekoppelt werden.&lt;br /&gt;
&lt;br /&gt;
Der Key sollte so gewählt werden, dass man nicht in Konflikt mit anderen Extensions kommt. Am besten benutzt man seinen Extension-Key dafür.&lt;br /&gt;
&lt;br /&gt;
Die Daten die man speichern will kann jede beliebige PHP Variable sein, sogar komplette Objekte kann man ablegen.&lt;br /&gt;
&lt;br /&gt;
So, nun wollen wir uns den Wert mal wieder raus holen, auch dies geht sehr schnell und einfach:&lt;br /&gt;
&lt;br /&gt;
 $data = $GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;fe_user-&amp;gt;getKey(&amp;quot;ses&amp;quot;, &amp;quot;tx_myext&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Die Methode getKey erwartet nur zwei Parameter, die Bedeutung ist die gleiche wie bei setKey().&lt;br /&gt;
&lt;br /&gt;
Das Leben kann so einfach sein, wenn es nicht ab und an diese kleinen fiesen Sonderfälle gibt ;)&lt;br /&gt;
&lt;br /&gt;
Nehmen wir mal an, man erzeugt ein PDF oder eine AJAX-Antwort, dann gibt man das PDF aus und steigt mit einem exit() oder die() aus. In diesen Fällen, reicht ein einfacher Aufruf von setKey() nicht aus. Denn TYPO3 kann dann die Daten nicht automatisch speichern. Aber hier schafft der folgende Code Abhilfe:&lt;br /&gt;
&lt;br /&gt;
 $GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;fe_user-&amp;gt;setKey(&amp;quot;ses&amp;quot;, &amp;quot;tx_myext&amp;quot;, $data);&lt;br /&gt;
 $GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;fe_user-&amp;gt;storeSessionData();&lt;br /&gt;
&lt;br /&gt;
Mit storeSessionData() sorgen wir dafür, dass TYPO3 umgehend die Werte speichert. Sehr häufig wird gerade auf die letzte Zeile verzichtet, was in der Regel auch funktioniert, jedoch nur so lange, wie kein Fehler auftritt oder das Script vorzeitig beendet wird.&lt;br /&gt;
&lt;br /&gt;
Fröhliches Session-Handling Euch allen :)&lt;br /&gt;
&lt;br /&gt;
=== Caching in Typo3 Extensions - Cache Mechanismen ===&lt;br /&gt;
[[Typo3 - Caching in Extensions]]&lt;br /&gt;
&lt;br /&gt;
=== Typo3 Extensions programmieren - Nützliche Funktionen ===&lt;br /&gt;
Aus Adventskalender 2008 typo3blog &lt;br /&gt;
&lt;br /&gt;
Interessante Funktionen aus der Klasse t3lib_div vor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. t3lib_div::array2json($data)&lt;br /&gt;
Mit dieser Funktion kann man sehr einfach seine Daten in ein JSON Objekt konvertieren. Die Funktion erwartet ein Array mit den Daten, dieses kann beliebig verschachtelt sein. Natürlich gibt es auch noch die PHP native Funktion json_encode, jedoch muss dies von der installierten PHP Installation unterstüzt werden.&lt;br /&gt;
&lt;br /&gt;
2. t3lib_div::convUmlauts($str)&lt;br /&gt;
Eine sehr nützliche Funktion ist convUmlauts, welche die deutschen Umlaute konvertiert, dabei wird aus einem Ä eine Ae oder aus einem ü ein ue. Groß und Klein-Schreibung wird also berücksichtigt.&lt;br /&gt;
&lt;br /&gt;
3. t3lib_div::rmFromList($element, $list)&lt;br /&gt;
Auch diese Funktion ist sehr nützlich. Möchte man aus einer kommaseparierten Liste ein Element entfernen, ist dies mit einem Funktionsaufruf getan. Gerade bei TYPO3 ist diese Funktion sehr hilfreich, wenn man z.B. eine Benutzergruppe eines FE-Users entfernen möchte.&lt;br /&gt;
&lt;br /&gt;
=== Typo3 Extensions programmieren - Sprachlabels ===&lt;br /&gt;
==== Probleme mit Umlauten ====&lt;br /&gt;
Bei den Sprachdateien locallang.xml etc. kann es Probleme mit Umlauten geben, wenn die Codierung der Datei nicht mit der der Typo3 Installation zusammen passt. Es funktioniert aber automatisch, wenn man die Codierung der xml Datei im Header angibt angibt. Also oben z.B. reinschreiben:&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; standalone=&amp;quot;yes&amp;quot; ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Wichtige Variablen ==&lt;br /&gt;
 $_EXTKEY &lt;br /&gt;
bzw. im Array...&lt;br /&gt;
Enthält den Extension Key.  Immer die Variable benutzen, dann kann man den Code leichte wieder verwenden.&lt;br /&gt;
 $TYPO3_CONF_VARS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Wie arbeitet eine Extension ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Laden:&amp;#039;&amp;#039;&amp;#039; Extension Manager (EM) ruft &amp;#039;&amp;#039;ext_emconf.php&amp;#039;&amp;#039; (enthält nur das Array: $EM_CONF[$_EXTKEY]) bei allen Extensions auf die in der localconf.php aufgeführt sind.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Aufruf von Backend oder Frontend:&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;ext_localconf.php&amp;#039;&amp;#039; wird ausgeführt (oder eine gecachete Kopie) In dieser wird die /typo3conf/localconf.php erweitert.&lt;br /&gt;
Funktion: weitere Klassen includieren (require_once())&lt;br /&gt;
&lt;br /&gt;
=== Wichtige Dateien einer Extension ===&lt;br /&gt;
&lt;br /&gt;
====ext_emconf.php====&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Metadaten&amp;#039;&amp;#039;&amp;#039; wie Name, Kategorie, Status einer Extension - muß vorhanden sein sonst wird die Extension nicht geladen. Die Informationen landen in $EM_CONF[$_EXTKEY] = ARRAY&lt;br /&gt;
&lt;br /&gt;
==== ext_localconf.php ====&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;TCA Konfiguration für das Backend&amp;#039;&amp;#039;&amp;#039;. (Werte für das Array $TYPO3_CONF_VARS). Z.B. Namen der zu ladenden Klassen, statische TSFiles etc.&lt;br /&gt;
&lt;br /&gt;
Wird immer geladen wenn ein Aufruf in Frontend oder Backend erfolgt. Kann deshalb dazu benutzt werden wichtige Klassendaten zu laden oder Skripte zu inkludieren.&lt;br /&gt;
&lt;br /&gt;
Optional - wird genutzt wenn Sie gefunden wird.&lt;br /&gt;
&lt;br /&gt;
==== ext_tables.php ====&lt;br /&gt;
Erweiterungen für  $&amp;#039;&amp;#039;&amp;#039;TCA&amp;#039;&amp;#039;&amp;#039;(Table Configuration Array). Beschreibungen von Tabellen und Formularen.&lt;br /&gt;
&lt;br /&gt;
Wird außerdem genutzt um den &amp;#039;&amp;#039;&amp;#039;Code von Frontend-Plugins, Modulen oder statischem TypoScript zu laden&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Optional - wird genutzt wenn Sie gefunden wird.&lt;br /&gt;
&lt;br /&gt;
==== Weitere häufige Dateien ====&lt;br /&gt;
ext_tables.sql - SQL Statements für die &amp;#039;&amp;#039;&amp;#039;Datenbank-Tabellen&amp;#039;&amp;#039;&amp;#039; beim Installieren der Extension.&lt;br /&gt;
&lt;br /&gt;
ext_tables_static+adt.sql - SQL Insert Statements für &amp;#039;&amp;#039;&amp;#039;statische Werte in Tabellen&amp;#039;&amp;#039;&amp;#039; (z.B. PLZ Liste).&lt;br /&gt;
&lt;br /&gt;
ext_conf_template.txt&lt;br /&gt;
&lt;br /&gt;
tca.php - Anpassungen für &amp;#039;&amp;#039;&amp;#039;$TCA,&amp;#039;&amp;#039;&amp;#039; Informationen für die Behandlung von Datenbanktabellen&lt;br /&gt;
&lt;br /&gt;
locallang[...].xml und locallang[...].php - &amp;#039;&amp;#039;&amp;#039;Sprachdateien&amp;#039;&amp;#039;&amp;#039; (Begriffe).&lt;br /&gt;
&lt;br /&gt;
====Typische Unterordner (optional)====&lt;br /&gt;
pi1, pi2 - Enthalten Frontend Plugins&lt;br /&gt;
&lt;br /&gt;
mod1, mod2 - Backend Module&lt;br /&gt;
&lt;br /&gt;
sv1, sv2 - Services&lt;br /&gt;
&lt;br /&gt;
=== Wichtige Globale Variablen ===&lt;br /&gt;
$_EXTKEY - der Extension Key&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Formulare im Backend ===&lt;br /&gt;
Das &amp;#039;&amp;#039;&amp;#039;$TCA&amp;#039;&amp;#039;&amp;#039; (Table Configuration Array) bestimmt welche Formularfelder verwendet werden.&lt;br /&gt;
Das Array ist in ext_tables.php(Bereiche: ctrl und feinterface s.u.) und tca.php gespeichert&lt;br /&gt;
&lt;br /&gt;
* Jeder Eintrag im $TCA ist an eine Datenbanktabelle geknüpft&lt;br /&gt;
* Der erste Index ist der Tabellenname.&lt;br /&gt;
* Im zweiten Index gibt es 6 Bereiche: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 ctrl -&amp;gt; Informationen zur Tabelle&lt;br /&gt;
 interface -&amp;gt; Konfiguration für die Auflistung und Darstellung im Backend&lt;br /&gt;
 feInterface -&amp;gt; Eigenschaften für das Frontend Editing&lt;br /&gt;
 columns -&amp;gt; Informationen zu den Feldtypen der Tabelle und der Verarbeitung der Daten (zweiter Index ist hier der Spaltenname)&lt;br /&gt;
 types -&amp;gt; legt fest welche der in columns definierten Spalten dargestellt werden und in welcher Reihenfolge, &lt;br /&gt;
          außerdem Zusatzinfo wie alternative Feldbezeichnung, Palettennummer, style codes...&lt;br /&gt;
 palettes -&amp;gt; Zum Zusammenfassen von mehreren Eingabefeldern, Zusammenstellungen wiederverwenden, Hilfsfelder definieren&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Daten bearbeiten mit TCE und TCEforms ===&lt;br /&gt;
Die im $TCA definierten Daten müssen in irgend einer Form bearbeitet werden. Ein umfangreiches Modul dazu befindet sich  in der Extension CMS (typo3/sysext/cms/layout/db_layout.php. DDas Modul greift auf die &amp;#039;&amp;#039;&amp;#039;Typo3 Core Engine (TCE)&amp;#039;&amp;#039;&amp;#039; zurück, die zum Verarbeiten und Speichern von Daten dient. Die &amp;#039;&amp;#039;&amp;#039;Formulare werden mit der Klasse TCEforms&amp;#039;&amp;#039;&amp;#039; erzeugt. Bearbeitet wird hierbei im Backend.&lt;br /&gt;
&lt;br /&gt;
Immer dann, wenn man die &amp;#039;&amp;#039;&amp;#039;im $TCA eingetragenen Tabellen über Eingabemasken manipulieren&amp;#039;&amp;#039;&amp;#039; will ist des sinnvoll die TCE zu nutzen.&lt;br /&gt;
&lt;br /&gt;
 t3lib_TCEmain -&amp;gt; t3lib/class.t3lib_tce-main.php&lt;br /&gt;
 t3lib_TCEforms -&amp;gt; TCEforms&lt;br /&gt;
&lt;br /&gt;
==== Einsatz in Extensions ====&lt;br /&gt;
Instanz von t3lib_TCEmain erzeugen:&lt;br /&gt;
 require_once(PATH_t3lib.&amp;quot;class.t3lib_tcemain.php&amp;quot;);&lt;br /&gt;
 $tce=t3lib_div::makeInstance(&amp;#039;t3lib_TCEmain&amp;#039;);&lt;br /&gt;
Arrays für Daten und Kommandos erzeugen:&lt;br /&gt;
 $data[tabelle][uid][feld] = wert&lt;br /&gt;
um neue Daten zu schreiben bevor man eine uid hat belegt man uid mit NEW und einem Zufallsstring z.B. NEWo1amh&lt;br /&gt;
 $cmd[tabelle][uid][befehl] = wert&lt;br /&gt;
dabei stehen verschiedene Befehle zur Verfügung:&lt;br /&gt;
 copy, move, delete, localize, version, new&lt;br /&gt;
Die beiden Arrays werden dann mittels &lt;br /&gt;
 $tce-&amp;gt;start($data,$cmd) &lt;br /&gt;
an die TCE übergeben und von &lt;br /&gt;
$tce-&amp;gt;process_cmdmap() &lt;br /&gt;
abgearbeitet.&lt;br /&gt;
&lt;br /&gt;
== Wie kann ich eine eigene Extension debuggen? ==&lt;br /&gt;
=== Hilfreiche Extensions zur Entwicklung von Extensions ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;devlog&amp;#039;&amp;#039;&amp;#039; -&amp;gt; schreibt log Einträge in eine Datenbanktabelle. Dazu ruft man an in seiner Extension die Funktion TODO auf und übergibt die Werte die man loggen will.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; Extension Development Evaluator  (extdeveval) &amp;#039;&amp;#039;&amp;#039; -&amp;gt; Referenzen aufrufen, Autmatisch Funktionsinfos schreiben u.v.m.&lt;br /&gt;
	&lt;br /&gt;
=== permalink ===&lt;br /&gt;
Wenn man eine eigene Extension schreibt benutzt man zum größten Teil Array, und um den Überblick zu behalten was nach den ganzen schritten in einem Array noch so drin steht hat man die möglichkeit mit einer Funktion das Array schön und sauber in einer tabelle anzeigen zu lassen.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
PHP-Code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$data = array(&amp;quot;Name&amp;quot; =&amp;gt; &amp;quot;Peter KeineAhnung&amp;quot;, &amp;quot;Alter&amp;quot; =&amp;gt; 22, &amp;quot;Wohnort&amp;quot; =&amp;gt; &amp;quot;Ratingen&amp;quot;);&lt;br /&gt;
t3lib_div::debug($data);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ergebnis:&lt;br /&gt;
&lt;br /&gt;
je nach devIPMask Einstellungen ist auch nur&lt;br /&gt;
&lt;br /&gt;
PHP-Code:&lt;br /&gt;
&lt;br /&gt;
 debug();&lt;br /&gt;
&lt;br /&gt;
nützlich, vor allem wenn ein Kundenprojekt Online ist einfach im Installtool und devIpMask deine IP eingeben und dann mit debug(); arbeiten, so kannst nur du den debug sehen und nicht irgendwelche User die grade auf der Site sind.&lt;br /&gt;
&lt;br /&gt;
Kleiner Zusatz Tip:&lt;br /&gt;
&lt;br /&gt;
Ihr lasst euch gleichzeitig mehrere Debugs ausgeben und verliert den überblick welcher debug welcher ist... Beispiel Ihr lasst euch ein Array vor einer funktion debugen und anschliessend...&lt;br /&gt;
&lt;br /&gt;
da habt ihr dann die möglichkeit euerem Debug einen Namen zu geben..&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
PHP-Code:&lt;br /&gt;
 $data = array(&amp;quot;Name&amp;quot; =&amp;gt; &amp;quot;Peter KeineAhnung&amp;quot;, &amp;quot;Alter&amp;quot; =&amp;gt; 22);&lt;br /&gt;
 t3lib_div::debug(,&amp;#039;Array vorher&amp;#039;);&lt;br /&gt;
        &lt;br /&gt;
 $data[&amp;#039;Name&amp;#039;] = &amp;#039;T.uX&amp;#039;;&lt;br /&gt;
 $data[&amp;#039;Alter&amp;#039;] = 32;&lt;br /&gt;
&lt;br /&gt;
 t3lib_div::debug(,&amp;#039;Array nachher&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
Auch bei der Verwendung der integrierten DB-Abstraktionsschicht können eine Reihe von Fehlern auftreten, die teilweise nur sehr magere Fehlermeldungen produzieren. Um eine etwas explizitere Fehlerausgabe zu erzwingen sollte man folgende Zeile in seine Extension integrieren*:&lt;br /&gt;
&lt;br /&gt;
PHP-Code:&lt;br /&gt;
 $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;debugOutput = true;&lt;br /&gt;
So wird z.B. das SQL-Stement Ausgegeben, das zu einem Fehler geführt hat.&lt;br /&gt;
&lt;br /&gt;
== Datenbankabfrage in Extensions ==&lt;br /&gt;
[[TYPO3 - Datenbankabfragen in Extensions]]&lt;br /&gt;
&lt;br /&gt;
== Struktur einer Extension ==&lt;br /&gt;
===ext_emconf.php===&lt;br /&gt;
&lt;br /&gt;
Informationen und Metadaten zur Extension. Etwa die Infos die im Kickstarter unter General Info stehen.&lt;br /&gt;
&lt;br /&gt;
* Root-Verzeichnis&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;ext_localconf.php&amp;#039;&amp;#039;&amp;#039; Enthält &amp;#039;&amp;#039;&amp;#039;Konfigurationsdaten&amp;#039;&amp;#039;&amp;#039; ($TYPO3_CONF_VARS) für das Backend und Frontend. Hier kann über die Extension API auch &amp;#039;&amp;#039;&amp;#039;TypoScript&amp;#039;&amp;#039;&amp;#039; eingebunden werden. Hier können auch Klassendateien aufgerufen werden (require_once() ) die bei jedem Aufruf zur Verfügung stehen sollen.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;ext_tables.php&amp;#039;&amp;#039;&amp;#039; Konfiguration von &amp;#039;&amp;#039;&amp;#039;Datenbanktabellen&amp;#039;&amp;#039;&amp;#039;. Plugins und Module über die Extension API einbinden. (Alles über Kickstarter)&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;ext_tables.sql&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;SQL-Daten&amp;#039;&amp;#039;&amp;#039; für die Tabellendefinition. Die Auswertung erfolgt über den Extension Manager und das Install-Tool.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;ext_tables_static+adt.sql&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;SQL-Tabellendefinition&amp;#039;&amp;#039;&amp;#039; inkl. Daten. Z.B. für statische Daten (Länderinfos etc.)Die Tabellen müssen zusätzlich in ext_tables.sql definiert sein.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;ext_typoscript_*.txt&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;Globaler TypoScript-Code&amp;#039;&amp;#039;&amp;#039;. Steht nicht üver Template-Datensätze zur Auswahl (siehe /static)&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;ext_conf_template.txt&amp;#039;&amp;#039;&amp;#039; Hier werden &amp;#039;&amp;#039;&amp;#039;Optionen zur Konfiguration&amp;#039;&amp;#039;&amp;#039; angelegt, die der Benutzer im Extensionmanager einstellen kann.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;*icon*.gif&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;Symbol-Dateien&amp;#039;&amp;#039;&amp;#039; für Extension,DB-Tabellen,Plugins, Module...&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;locallang*.php&amp;#039;&amp;#039;&amp;#039; Texte für die &amp;#039;&amp;#039;&amp;#039;Lokalisierung&amp;#039;&amp;#039;&amp;#039; in verschiedenen Sprachen&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;class.ext_update.php&amp;#039;&amp;#039;&amp;#039; Funktionen für ein &amp;#039;&amp;#039;&amp;#039;Update der Extension&amp;#039;&amp;#039;&amp;#039; (Beispiel siehe newloginbox).&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;pi1/&amp;#039;&amp;#039;&amp;#039; Verzeichnis für &amp;#039;&amp;#039;&amp;#039;Skripte und Daten&amp;#039;&amp;#039;&amp;#039; des Plugin&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;class*.php&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;PHP-Klassen&amp;#039;&amp;#039;&amp;#039; z.B. für Plugins oder Submodule&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;cm1/&amp;#039;&amp;#039;&amp;#039; Verzeichnis für Dateien die das &amp;#039;&amp;#039;&amp;#039;Kontext-Menü&amp;#039;&amp;#039;&amp;#039; betreffen&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;mod1/&amp;#039;&amp;#039;&amp;#039; Verzeichnis für ein Modul.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;conf.php&amp;#039;&amp;#039;&amp;#039; Konfigurationsdatei für ein &amp;#039;&amp;#039;&amp;#039;Modul&amp;#039;&amp;#039;&amp;#039; zum einbinden ins Backend.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;index.php&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;Hauptscript eines Moduls&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;modfunc1/&amp;#039;&amp;#039;&amp;#039; Skripte und Daten für &amp;#039;&amp;#039;&amp;#039;Submodul-Funktionen&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;static/&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;TypoScript-Template&amp;#039;&amp;#039;&amp;#039;-Dateien. Diese werden über die Extension-API eingebunden und stehen dann in Template-Datensätzen, ähnlich den Standard Templates zur Auswahl.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;sv1/&amp;#039;&amp;#039;&amp;#039; Verzeichnis für &amp;#039;&amp;#039;&amp;#039;Services&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;res/&amp;#039;&amp;#039;&amp;#039; Verzeichnis für beliebige &amp;#039;recourcen&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;doc/&amp;#039;&amp;#039;&amp;#039; Verzeichnis der &amp;#039;&amp;#039;&amp;#039;Dokumentation&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
== Wo werden Extensions installiert ? ==&lt;br /&gt;
===typo3/sysext/ (System)===&lt;br /&gt;
System Extensions wie cms und lang. Hier können keine Extensions mit dem Extension Manager installiert werden.&lt;br /&gt;
===typo3/ext/ - globale Extensions (Global) ===&lt;br /&gt;
Z.B. diese die von Typo3 mitgeliefert werden. Mit der Option allowGlobalInstall kann man die Installation in dieses Verzeichnis erlauben. Das ist dann nicht sinnvoll wenn sich mehrere Typo3 WEbsites eine Installation teilen, weil es hier zu Versionskonflikten kommen kann.&lt;br /&gt;
===typo3conf/ext - lokale Extensions (Local)===&lt;br /&gt;
Hier werden normalerweise alle Extensions installiert. Die Lokale Installation hat immer Vorang vor einer globalen.&lt;br /&gt;
&lt;br /&gt;
== Typolinks richtig in Extensions einsetzen ==&lt;br /&gt;
&lt;br /&gt;
In diesem kurzem Tutorial möchte ich zeigen, wie man Typolinks in eigenen Erweiterungen erstellt, die das&lt;br /&gt;
Feature &amp;#039;Simulate Static Documents&amp;#039; unterstützen und eine Ausgabe erstellen, die von Typo3 gecached wird&lt;br /&gt;
und so auch mit der Indexed search verwendet werden können. Diese Informationen wurden aus anderen&lt;br /&gt;
Erweiterungen zusammengetragen, speziell aus der Erweiterung tt_board.&lt;br /&gt;
Typoscript&lt;br /&gt;
Zuerst erstelle in der Datei &amp;#039;ext_typoscript_setup.txt&amp;#039; eine Eigenschaft, die deiner Erweiterung mitteilt, ob&lt;br /&gt;
caching genutzt werden soll oder nicht:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
plugin.tx_myextension_pi1 {&lt;br /&gt;
allowCaching = 1&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn das später auf 0 gesetzt wird, werden diese Seiten nicht mehr gecached.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Vorbereitung&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Bereite in der main() Funktion den Typolink vor und konfiguriere das caching:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class tx_myextension_pi1 extends tslib_pibase {&lt;br /&gt;
...&lt;br /&gt;
var $allowCaching = &amp;quot;&amp;quot;;&lt;br /&gt;
function main($content,$conf) {&lt;br /&gt;
$this-&amp;gt;conf=$conf;&lt;br /&gt;
...&lt;br /&gt;
// Preconfigure the typolink&lt;br /&gt;
$this-&amp;gt;local_cObj = t3lib_div::makeInstance(&amp;quot;tslib_cObj&amp;quot;);&lt;br /&gt;
$this-&amp;gt;local_cObj-&amp;gt;setCurrentVal($GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;id);&lt;br /&gt;
$this-&amp;gt;typolink_conf = $this-&amp;gt;conf[&amp;quot;typolink.&amp;quot;];&lt;br /&gt;
$this-&amp;gt;typolink_conf[&amp;quot;parameter.&amp;quot;][&amp;quot;current&amp;quot;] = 1;&lt;br /&gt;
$this-&amp;gt;typolink_conf[&amp;quot;additionalParams&amp;quot;] =&lt;br /&gt;
$this-&amp;gt;cObj-&amp;gt;stdWrap($this-&amp;gt;typolink_conf[&amp;quot;additionalParams&amp;quot;],&lt;br /&gt;
$this-&amp;gt;typolink_conf[&amp;quot;additionalParams.&amp;quot;]);&lt;br /&gt;
unset($this-&amp;gt;typolink_conf[&amp;quot;additionalParams.&amp;quot;]);&lt;br /&gt;
// Configure caching&lt;br /&gt;
$this-&amp;gt;allowCaching = $this-&amp;gt;conf[&amp;quot;allowCaching&amp;quot;]?1:0;&lt;br /&gt;
if (!$this-&amp;gt;allowCaching) {&lt;br /&gt;
$GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;set_no_cache();&lt;br /&gt;
}&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
Links erstellen&lt;br /&gt;
Um nun Links in der Erweiterung zu erstellen, benutze das folgende Code Fragment:&lt;br /&gt;
$temp_conf = $this-&amp;gt;typolink_conf;&lt;br /&gt;
$temp_conf[&amp;quot;additionalParams&amp;quot;] .= &amp;quot;&amp;amp;tx_myextension_pi1[key]=value&amp;quot;;&lt;br /&gt;
$temp_conf[&amp;quot;useCacheHash&amp;quot;] = $this-&amp;gt;allowCaching;&lt;br /&gt;
$temp_conf[&amp;quot;no_cache&amp;quot;] = !$this-&amp;gt;allowCaching;&lt;br /&gt;
$the_link = $this-&amp;gt;local_cObj-&amp;gt;typolink(&amp;quot;Linktext&amp;quot;, $temp_conf);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach kann man &amp;#039;$the_link&amp;#039; zu der Ausgabe hinzufügen. Das &amp;#039;$temp_conf&amp;#039; Array kann man mit allen&lt;br /&gt;
Eigenschaften des typolink Objektes erweitern.&lt;br /&gt;
&lt;br /&gt;
Tutorial by typo3.hachmeister.org&lt;br /&gt;
Von:fruit-lab.de&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Datei Uploads in Backend Extensions ==&lt;br /&gt;
Feld im Kickstarter anlegen. in der tca.php kannst du den uploadfolder festlegen.&lt;br /&gt;
&lt;br /&gt;
Komplizierter wirds in folgendem Fall (aus typo3.net 12-2007)&lt;br /&gt;
&lt;br /&gt;
 stimmt schon, dass man da den ordner ändern kann, aber was wenn ich nicht alle dateien in einen ordner speichern will?&lt;br /&gt;
ich brauche 2 ordner. einen für normale downloads und in den anderen würden die dateien reinkommen, die kostenpflichtig downzuloaden sind. diesen ordner muss ich also per htaccess schützen. darum wärs nötig, dass der upload-ordner für den späteren redakteur frei wählbar, oder zumindest 2 ordner auswählbar sind.&lt;br /&gt;
&lt;br /&gt;
irgendwelche ideen?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
alles kein Problem.&lt;br /&gt;
&lt;br /&gt;
Man kann in der ext_emconf.php unter createDirs die benötigten Verzeichnisse angeben.&lt;br /&gt;
Für Fileupload gibts auch einige Typofunktionen die man nutzen kann, so helfen einem folgende Klassen weiter:&lt;br /&gt;
t3lib_basicFileFunctions&lt;br /&gt;
t3lib_extFileFunctions&lt;br /&gt;
&lt;br /&gt;
== Debug Methode ==&lt;br /&gt;
Typo3 | Debug Methode :: Hilfe bei der Programmierung&lt;br /&gt;
&lt;br /&gt;
Wenn man eine eigene Extension schreibt benutzt man zum größten Teil Array, und um den Überblick zu&lt;br /&gt;
behalten was nach den ganzen schritten in einem Array noch so drin steht hat man die möglichkeit mit einer Funktion das Array schön und sauber in einer tabelle anzeigen zu lassen.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$data = array(&amp;quot;Name&amp;quot; =&amp;gt; &amp;quot;Peter KeineAhnung&amp;quot;, &amp;quot;Alter&amp;quot; =&amp;gt; 22, &amp;quot;Wohnort&amp;quot; =&amp;gt; &amp;quot;Ratingen&amp;quot;);&lt;br /&gt;
echo t3lib_div::debug($data);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ergebnis:&lt;br /&gt;
&lt;br /&gt;
[[Bild:TS_debug01.gif]]&lt;br /&gt;
&lt;br /&gt;
je nach devIPMask Einstellungen ist auch nur&lt;br /&gt;
 debug($sonstwas);&lt;br /&gt;
nützlich, vor allem wenn ein Kundenprojekt Online isteinfach im Installtool und devIpMask deine IP eingeben und dann mit debug($sonstwas); arbeiten, so kannst nur du den debug sehen und nicht irgendwelche User die grade auf der Site sind.&lt;br /&gt;
&lt;br /&gt;
Kleiner Zusatz Tip:&lt;br /&gt;
&lt;br /&gt;
Ihr lasst euch gleichzeitig mehrere Debugs ausgeben und verliert den überblick welcher debug welcher ist...&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Ihr lasst euch ein Array vor einer funktion debugen und anschliessend...&lt;br /&gt;
da habt ihr dann die möglichkeit euerem Debug einen Namen zu geben..&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$data = array(&amp;quot;Name&amp;quot; =&amp;gt; &amp;quot;Peter KeineAhnung&amp;quot;, &amp;quot;Alter&amp;quot; =&amp;gt; 22, &amp;quot;Wohnort&amp;quot; =&amp;gt; &amp;quot;Ratingen&amp;quot;);&lt;br /&gt;
echo t3lib_div::debug($data,&amp;#039;Array vorher&amp;#039;);&lt;br /&gt;
$data[&amp;#039;Name&amp;#039;] = &amp;#039;T.uX&amp;#039;;&lt;br /&gt;
$data[&amp;#039;Alter&amp;#039;] = 32;&lt;br /&gt;
echo t3lib_div::debug($data,&amp;#039;Array nachher&amp;#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ergebnis:&lt;br /&gt;
&lt;br /&gt;
[[Bild:TS_debug02.gif]]&lt;br /&gt;
&lt;br /&gt;
Hinweis:&lt;br /&gt;
läst du dir eine Variable im debug ausgeben erscheint [b]|debug|[/b]. das funzt nur mit Arrays ;-)&lt;br /&gt;
Auch bei der Verwendung der integrierten DB-Abstrktionsschicht können eine Reihe von Fehlern auftreten,&lt;br /&gt;
die teilweise nur sehr magere Fehlermeldungen produzieren. Um eine etwas explizitere Fehlerausgabe zu&lt;br /&gt;
erzwingen sollte man folgende Zeile in seine Extension integrieren*:&lt;br /&gt;
$GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;debugOutput = true;&lt;br /&gt;
&lt;br /&gt;
So wird z.B. das SQL-Stement Ausgegeben, das zu einem Fehler geführt hat.&lt;br /&gt;
Tutorial by typo3.kj187.de&lt;br /&gt;
&lt;br /&gt;
== PHP-Skripte einbinden ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== mit PHP_SCRIPT ===&lt;br /&gt;
&lt;br /&gt;
Im Typo Script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
##############################&lt;br /&gt;
### temporäres Test Script ###&lt;br /&gt;
##############################&lt;br /&gt;
&lt;br /&gt;
temp.phpScript = PHP_SCRIPT&lt;br /&gt;
temp.phpScript {&lt;br /&gt;
   file = demo/test.inc.php&lt;br /&gt;
   myVerySpecialOwnParameter = Hallo Welt&lt;br /&gt;
   myParamArray {&lt;br /&gt;
      a = 2&lt;br /&gt;
      b = 5&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Im Skript text.inc.php&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// Use the debug-function to view the config&lt;br /&gt;
// array $conf given by TypoScript:&lt;br /&gt;
debug( $conf );&lt;br /&gt;
&lt;br /&gt;
$contentArr[] = &amp;quot;Test&amp;quot;;&lt;br /&gt;
$contentArr[] = $conf[&amp;#039;file&amp;#039;];&lt;br /&gt;
$contentArr[] = $conf[&amp;#039;myVerySpecialOwnParameter&amp;#039;];&lt;br /&gt;
$contentArr[] = implode( $conf[&amp;#039;myParamArray.&amp;#039;], &amp;#039;, &amp;#039; );&lt;br /&gt;
&lt;br /&gt;
// Put all your output to $content,&lt;br /&gt;
// that TYPO3 will display for you:&lt;br /&gt;
$content = implode( $contentArr, &amp;#039;&amp;lt; br /&amp;gt;&amp;#039; );&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== mit PHP_SCRIPT_EXT ===&lt;br /&gt;
Typo3 | Externe PHP Scripte einbinden&lt;br /&gt;
&lt;br /&gt;
Haben Sie ihr Projekt auf Typo3 umgestellt und wollen dennoch ihre eigenen PHP-Scripte verwenden? Dann machen Sie folgendes.&lt;br /&gt;
&lt;br /&gt;
Schreiben Sie in das SETUP Feld des Templates:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tt_content.script = CASE&lt;br /&gt;
tt_content.script {&lt;br /&gt;
key.field = select_key&lt;br /&gt;
test = PHP_SCRIPT_EXT&lt;br /&gt;
test.file = fileadmin/dein_script.php&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um das Script jetzt als Contentelement in die Seite einzubinden, legen Sie einen neuen Seiteninhalt an. Wechseln Sie von Typ = Text auf Typ = Skript. In das CODE Feld müssen Sie jetzt nur noch test eintragen und sie sind fertig. &lt;br /&gt;
&lt;br /&gt;
Dies ist die einfachste Methode. Die Ausgabe des Scripts wird aber nicht in den Cache aufgenommen! Diese Funktion wird leider nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
Tutorial by typo3.kj187.de&lt;br /&gt;
&lt;br /&gt;
Anmerkung Steff: Für die Cache Funktion kann man z.B. eine Einfache Extension basteln.&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
===Einträge aus Bildausrichtungen im Backend entfernen===&lt;br /&gt;
aus cron_cssstyledimgtext&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (!defined (&amp;#039;TYPO3_MODE&amp;#039;))     die (&amp;#039;Access denied.&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
t3lib_extMgm::addPItoST43($_EXTKEY,&amp;#039;pi1/class.tx_croncssstyledimgtext_pi1.php&amp;#039;,&amp;#039;_pi1&amp;#039;,&amp;#039;&amp;#039;,1);&lt;br /&gt;
&lt;br /&gt;
$_EXTCONF = unserialize($_EXTCONF);&lt;br /&gt;
if ($_EXTCONF[&amp;#039;addPageTS&amp;#039;])	{&lt;br /&gt;
	t3lib_extMgm::addPageTSConfig(&amp;#039;&lt;br /&gt;
TCEFORM.tt_content.imageorient.types.image.removeItems = 8,9,10,17,18,25,26&lt;br /&gt;
&amp;#039;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;XCLASS&amp;#039;][&amp;#039;tslib/class.tslib_content.php&amp;#039;]=t3lib_extMgm::extPath($_EXTKEY).&amp;#039;class.ux_tslib_content.php&amp;#039;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Bilder in eigener Extension rendern ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel benutzte Variablen:&lt;br /&gt;
 $BildAdresse&lt;br /&gt;
 $ParameterFuerImgTag&lt;br /&gt;
 $Alttext&lt;br /&gt;
&lt;br /&gt;
In PHP-Datei der Extension:&lt;br /&gt;
&lt;br /&gt;
 $this-&amp;gt;conf[&amp;quot;imageBeispiel.&amp;quot;][&amp;quot;file&amp;quot;]=&amp;quot;uploads/pics/&amp;quot;.$BildAdresse;&lt;br /&gt;
 $this-&amp;gt;conf[&amp;quot;imageBeispiel.&amp;quot;][&amp;quot;params&amp;quot;]=$ParameterFuerImgTag;&lt;br /&gt;
 $this-&amp;gt;conf[&amp;quot;imageBeispiel.&amp;quot;][&amp;quot;altText&amp;quot;]=$Alttext;&lt;br /&gt;
 $Bild=$this-&amp;gt;cObj-&amp;gt;IMAGE($this-&amp;gt;conf[&amp;quot;imageBeispiel.&amp;quot;]);&lt;br /&gt;
 $Content.=$Bild;&lt;br /&gt;
&lt;br /&gt;
In Typoscript Setup&lt;br /&gt;
&lt;br /&gt;
 plugin.tx_hoTest_pi1 {     //hier Plugin-Name&lt;br /&gt;
 imageArtikel{&lt;br /&gt;
     file.maxW = {$ho_Test.BildWidthNews}  &lt;br /&gt;
     imageLinkWrap = 1&lt;br /&gt;
     imageLinkWrap {&lt;br /&gt;
       enable = 1&lt;br /&gt;
       bodyTag = &amp;lt;BODY bgColor=white&amp;gt;&lt;br /&gt;
       wrap = |&lt;br /&gt;
       width = 400m&lt;br /&gt;
       height = 400&lt;br /&gt;
       JSwindow = 1&lt;br /&gt;
       JSwindow.newWindow = 1&lt;br /&gt;
       JSwindow.expand = 17,20&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Der Wert {$ho_Test.BildWidthNews} kann aus Constants übernommen werden.&lt;br /&gt;
&lt;br /&gt;
Siehe dazu auch&lt;br /&gt;
Konstanten von Constants im Setup verwenden&lt;br /&gt;
und&lt;br /&gt;
Konstanten für Constant-Editor bereitstellen&lt;br /&gt;
&lt;br /&gt;
(aus www.easy-office4you.de/ 10.1.2006)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Spalten der Seiten umbenennen ===&lt;br /&gt;
&lt;br /&gt;
Um die Spalten der Seite im Backend beliebig umzubenennen und/oder zusätzliche eigene Spalten zu verwenden, muß die Extension zed_more_columns installiert werden und dann in der Datei ext_tables.php die Spalten-Namen eingeben werden.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
 $TCA[&amp;quot;tt_content&amp;quot;][&amp;quot;columns&amp;quot;][&amp;quot;colPos&amp;quot;][&amp;quot;config&amp;quot;][&amp;quot;items&amp;quot;] = array (&lt;br /&gt;
 &amp;quot;0&amp;quot; =&amp;gt; array (&amp;quot;Mitte||Mitte||||||||&amp;quot;,&amp;quot;0&amp;quot;),&lt;br /&gt;
 &amp;quot;1&amp;quot; =&amp;gt; array (&amp;quot;Links||Links||||||||&amp;quot;,&amp;quot;1&amp;quot;),&lt;br /&gt;
 &amp;quot;2&amp;quot; =&amp;gt; array (&amp;quot;Rechts||Rechts||||||||&amp;quot;,&amp;quot;2&amp;quot;),&lt;br /&gt;
 &amp;quot;3&amp;quot; =&amp;gt; array (&amp;quot;Teaser||Teaser||||||||&amp;quot;,&amp;quot;3&amp;quot;),&lt;br /&gt;
 &amp;quot;4&amp;quot; =&amp;gt; array (&amp;quot;Fusszeile||Fusszeile||||||||&amp;quot;,&amp;quot;4&amp;quot;)&lt;br /&gt;
 );&lt;br /&gt;
&lt;br /&gt;
== Bei Extension dafür sorgen, daß im Backend kein Sortierungs-Button entsteht ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In der Datei ext_tables.php der Extension folgende Zeile ändern&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;sortby&amp;quot; =&amp;gt; &amp;quot;name&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
ändern in&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;default_sortby&amp;quot; =&amp;gt; &amp;quot;ORDER BY name&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
Anstatt &amp;quot;name&amp;quot; kann natürlich auch ein anderes Suchkriterium verwendet werden.&lt;br /&gt;
&lt;br /&gt;
== Ausgaben im HTML-Header in Extensions programmieren ==&lt;br /&gt;
Manchmal möchte man bestimmte Angaben in den Header schreiben, um zum Beispiel ein JavaScript einzubinden o.ä.&lt;br /&gt;
&lt;br /&gt;
Man könnte im statischen TypoScript für das Objekt page etwas hernehmen. Das funktioniert aber nur wenn das PAGE Objekt auch wirklich page heißt.&lt;br /&gt;
&lt;br /&gt;
Also besser mit einer Typo3 Eigenen Funktion.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel - JavaScript einbinden&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function includeJavaScript() {&lt;br /&gt;
  $js .= &amp;#039;&amp;lt;script src=&amp;quot;&amp;#039;.t3lib_extMgm::siteRelPath($this-&amp;gt;extKey).dirname($this-&amp;gt;scriptRelPath).&amp;#039;/JS-Verzeichnis/js-file.js&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;!-- //--&amp;gt;&amp;lt;/script&amp;gt;&amp;#039;;&lt;br /&gt;
  $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;additionalHeaderData[$this-&amp;gt;extKey] = $js;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Aufruf der Funktion:&lt;br /&gt;
$content=$this-&amp;gt;includeJavaScript(); &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Variable $this-&amp;gt;extKey wird normalerweise immer in der Klassendefinition der Extensiongesetzt und enthält den Namen der Extension (z.B. meineextension)&lt;br /&gt;
&lt;br /&gt;
Für $this-&amp;gt;scriptRelPath gilt das gleiche. Hier steht der Pfad ab dem Extension Ordner (z.B. pi1/class.tx_meineExtension_pi1.php)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mehrsprachige Extensions ==&lt;br /&gt;
Seit der Version 4 hat sich die Vorgehensweise bei der Lokalisierung geändert. Um zu verstehen wie die Lokalisierung von Backend, Frontend etc. funktioniert gibt es hier eine kleine Übersicht:&lt;br /&gt;
[[Sprachverwaltung und Lokalisierung in Typo3]]&lt;br /&gt;
&lt;br /&gt;
== $GLOBALS[&amp;#039;TSFE&amp;#039;] ==&lt;br /&gt;
&lt;br /&gt;
TSFE ist ein Abbild der Klasse tslib_fe, die kannst Du auch untersuchen.&lt;/div&gt;</summary>
		<author><name>193.196.133.6</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Linux_-_Server_Administration&amp;diff=18625</id>
		<title>Linux - Server Administration</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Linux_-_Server_Administration&amp;diff=18625"/>
		<updated>2010-02-22T15:57:44Z</updated>

		<summary type="html">&lt;p&gt;193.196.133.6: /* Linux Server mit Plesk */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Links ==&lt;br /&gt;
siehe Debian Apache FastCGI&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/apache2 reload etc&lt;br /&gt;
&lt;br /&gt;
== Linux Server mit Plesk ==&lt;br /&gt;
Quick Info:&lt;br /&gt;
&lt;br /&gt;
Apache Konfiguration Testen:&lt;br /&gt;
 apache2ctl configtest&lt;br /&gt;
&lt;br /&gt;
Apache Neu starten:&lt;br /&gt;
 apache2ctl -k restart&lt;br /&gt;
&lt;br /&gt;
Plesk vhost.conf neu einlesen:&lt;br /&gt;
 /usr/local/psa/admin/sbin/websrvmng -u --vhost-name=domain.com &lt;br /&gt;
&lt;br /&gt;
oder für alle sites &lt;br /&gt;
&lt;br /&gt;
 /usr/local/psa/admin/bin/websrvmng -a.&lt;br /&gt;
&lt;br /&gt;
Plesk legt die Domains in eigenen vhosts an und liest und schreibt dort jeweils eine eigene httpd.conf für den Apache. Ändert man dort etwas kann das bei der nächste Änderung über Plesk wieder überschrieben werden.&lt;br /&gt;
&lt;br /&gt;
hier gab es einen schönen Ansatz:&lt;br /&gt;
Quelle: http://www.schreinert.com/eigenen-apache-config-anlegen-plesk-per-vhostconf-50/ (12.12.2008)&lt;br /&gt;
&lt;br /&gt;
=== Eigenen Apache-Config anlegen: Plesk per vhost.conf ===&lt;br /&gt;
&lt;br /&gt;
Plesk als Server-Management-Software schreibt und überschreibt die Konfugrationsdateien des Apache-Web-Servers mit jeder Änderung der entsprechenden Plesk-Einstellungen. Das heißt, dass es nicht ratsam ist, die Apache-Konfiguration httpd.conf nachträglich per Editor anzupassen. Damit doch eigene Änderungen an den Domain-Einstellungen möglich sind, bietet Plesk die vhost.conf - Datei an, welche aber nicht ohne weiteres aktiv ist.&lt;br /&gt;
&lt;br /&gt;
Für ergänzende Konfigurations-Anweisungen des Apaches sind die folgenden beiden Schritte notwendig:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;1. Anlegen der vhost.conf für die gewünschte Domain.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
      Im Konfigurations-Verzeichnis der Domain liegt von Haus aus die Datei httpd.conf, welche von Plesk gelesen und geschrieben wird. Das Konfigurationsverzeichnis für die Domain www.domain.de liegt beispielsweise bei SuSE Linux hier: /srv/www/vhosts/domain.de/conf/. In dieses Verzeichnis gehört nun die vhost.conf - Datei, in die die Apache-Einstellungen eingetragen werden können. Alle Einträge sind dabei automatisch innerhalb der &amp;lt;Virtual&amp;gt; Konfiguration enthalten. Anschließend noch daran denken, die vhost.conf für den Web-Server lesbar zu machen:&lt;br /&gt;
&lt;br /&gt;
 $&amp;gt; chmod go+r /srv/www/vhosts/domain.de/conf/vhost.conf&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;2. Plesk dazu bringen, die vhost.conf Datei einzubinden.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Auch wenn die eigenen Einstellungen in der Datei bereits korrekt eingetragen sind, so weiß der Apache noch nichts von der erweiterten Konfiguration. Plesk muss zuvor noch die Datei in die bestehende httpd.conf per Include einbinden ganz am Ende der Datei foltgende eintragen &amp;quot;Include /srv/www/vhosts/domainname.de/conf/vhost.conf.&amp;quot; &lt;br /&gt;
Dies kann hervorgerufen werden, indem die Einstellungen zu der Domain in Plesk aufgerufen und (unverändert) gespeichert werden.&lt;br /&gt;
&lt;br /&gt;
Jetzt ist die vhost.conf in der httpd.conf inkludiert und dem Apache bekannt gegeben.&lt;br /&gt;
&lt;br /&gt;
Noch ein Tipp für Änderungen an der Konfiguration: Die geänderte Konfiguration sollte immer &amp;#039;&amp;#039;&amp;#039;überprüft werden, bevor der Apache neu gestartet wird&amp;#039;&amp;#039;&amp;#039; — egal ob per rcapache restart oder apache2ctl graceful. Bei Fehlern droht sonst, dass der Apache seinen Dienst verweigert.&lt;br /&gt;
&lt;br /&gt;
Daher immer ein &amp;#039;&amp;#039;&amp;#039;apache2ctl configtest&amp;#039;&amp;#039;&amp;#039; vor dem “reload” durchführen &lt;br /&gt;
&lt;br /&gt;
Ende des Zitats&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ein weiterer Artikel bringt noch mehr Licht ins Dunkel:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
=== Wondering how to create a good vhost.conf? ===&lt;br /&gt;
Well you’ve come to the right place. &lt;br /&gt;
&lt;br /&gt;
Quelle: http://www.gadberry.com/aaron/2006/02/09/plesk_vhost/ (12.12.2008)&lt;br /&gt;
&lt;br /&gt;
Using Plesk and vhost.conf&lt;br /&gt;
&lt;br /&gt;
9th February 2006 - By Aaron&lt;br /&gt;
&lt;br /&gt;
Plesk automatically updates httpd.include for each domain, making changes to this file only temporary. You don’t want to use this file if you need to make changes to Apache’s config on the fly, such as php’s open_basedir values per domain.&lt;br /&gt;
&lt;br /&gt;
Instead you will want to use a vhost.conf file. This file will be placed inside your domain’s conf directory, usually found at /var/www/vhosts/yourdomain.com/conf. &amp;#039;&amp;#039;&amp;#039;Create a file called vhost.conf&amp;#039;&amp;#039;&amp;#039; in whatever editor you prefer. I use joe.&lt;br /&gt;
&lt;br /&gt;
You can now put in any &amp;#039;&amp;#039;&amp;#039;Apache configuration options&amp;#039;&amp;#039;&amp;#039; like you would into httpd.include. In my case I wanted to do three things, give my site access to /php/includes, add a mod_rewrite rule, and tell Apache to follow symlinks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here is my resulting vhost.conf file.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;Directory /var/www/vhosts/yourdomain.com/httpdocs/&amp;gt; &lt;br /&gt;
php_admin_value open_basedir &amp;quot;/var/www/vhosts/yourdomain.com/httpdocs:/php/includes&amp;quot; &lt;br /&gt;
&amp;lt;/Directory&amp;gt; &lt;br /&gt;
Options +FollowSymLinks &lt;br /&gt;
RewriteEngine on &lt;br /&gt;
RewriteRule /ministries/(.*)\.php$ /ministries/ministry.php?url=$1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And some annotations from users about a redirection:&lt;br /&gt;
&lt;br /&gt;
You probably need to edit your vhost.conf of the redirected domain to include the httpdocs of the first domain, such as&lt;br /&gt;
&lt;br /&gt;
 php_admin_value open_basedir &amp;quot;/var/www/vhosts/redirecteddomain.com/httpdocs:/var/www/vhosts/firstdomain.com/httpdocs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
I did this same thing for a while. I would encourage you instead to just send a php header redirect with a “permenantly moved” header. The search engines will drop your second site off the listings either way. They don’t play friendly with mirrors.&lt;br /&gt;
You can see the first three lines take care of the additional base directory for php, the line after the empty one takes care of following symlinks, and the last two lines turn on the rewrite engine and add a rule to it.&lt;br /&gt;
&lt;br /&gt;
Save your file and we’re almost done. This is the part that everyone forgets, you need to tell Plesk to update it’s information. See your httpd.include file will soon have an include for your vhost.conf, but it doesn’t yet. Plesk has to realize it’s there and then add the include. The command to reconfigure Plesk for one site is &lt;br /&gt;
&lt;br /&gt;
 /usr/local/psa/admin/sbin/websrvmng -u --vhost-name=domain.com &lt;br /&gt;
&lt;br /&gt;
or the command I use reconfigures all sites, &lt;br /&gt;
&lt;br /&gt;
 /usr/local/psa/admin/bin/websrvmng -a.&lt;br /&gt;
&lt;br /&gt;
After running that there is no need to restart Apache or any other service. Your changes should have taken effect already.&lt;br /&gt;
&lt;br /&gt;
Another Post:&lt;br /&gt;
&lt;br /&gt;
If you need to add &amp;#039;&amp;#039;&amp;#039;more directories&amp;#039;&amp;#039;&amp;#039; try this:&lt;br /&gt;
&lt;br /&gt;
 php_admin_value open_basedir “**Directory 1**:**Directory 2**”&lt;br /&gt;
&lt;br /&gt;
=== Vhost mit Header 301 komplett weiterleiten ===&lt;br /&gt;
&lt;br /&gt;
von http://www.robo47.net/faq/vhost--301-header-weiterleitung (12.12.2008)&lt;br /&gt;
&lt;br /&gt;
Mit diesem Code in einem Vhost spart man sich unnötige Ordner auf der Festplatte, wenn man diese eh nur Weiterleiten will. &lt;br /&gt;
 &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
 ServerName subdomain.domain.tld&lt;br /&gt;
 RedirectMatch 301 (.*) http://www.domain2.tld&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Es werden auch Aufrufe von subdomain.domain.tld/asdf/ oder anderen Dokumenten und unterordnern automatisch auf die andere Domain weitergeleitet an die passende URL weitergeleitet, sprich aus subdomain.domain.tld/asdf/ wird www.domain2.tld/asdf/.&lt;br /&gt;
Wenn man das nicht will muss man nur das weglassen und alles auf die Hauptdomain weitergeleitet. &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
 ServerName subdomain.domain.tld&lt;br /&gt;
 RedirectMatch 301 (.*) http://www.domain2.tld&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Plesk Infos ==&lt;br /&gt;
Ein paar gesammelte Infos (ungeprüft)&lt;br /&gt;
&lt;br /&gt;
/opt/psa/admin/conf/php.ini die PHP Einstellungen für den Admin  (nicht für die Kunden !!!)&lt;br /&gt;
&lt;br /&gt;
Änderungen für die Kundeneinstellungen finden in der vhost.conf im Kundenverzeichnis statt&lt;/div&gt;</summary>
		<author><name>193.196.133.6</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Apache2_und_CGI/FastCGI&amp;diff=1930</id>
		<title>Apache2 und CGI/FastCGI</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Apache2_und_CGI/FastCGI&amp;diff=1930"/>
		<updated>2010-02-21T20:44:34Z</updated>

		<summary type="html">&lt;p&gt;193.196.133.6: /* Zugriff auf PHP Konfigurieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Apache2 mit php5 und mod_fcgid auf Debian Lenny (Debian 5) ==&lt;br /&gt;
Quelle (en):http://www.howtoforge.com/how-to-set-up-apache2-with-mod_fcgid-and-php5-on-debian-lenny 19.2.2010&lt;br /&gt;
&lt;br /&gt;
=== Einleitung ===&lt;br /&gt;
&lt;br /&gt;
==== FastCGI ====&lt;br /&gt;
Wenn man PHP nicht als Modul von Apache laufen lassen will kann man es über das Common Gateway Interface ansprechen. FastCGI erzeugt im Gegensatz zu CGI nicht für jede Anfreage einen neuen Thread und ist dementsprechend genügsamer was die Performance betrifft.&lt;br /&gt;
&lt;br /&gt;
Das FastCGI Modul &amp;#039;&amp;#039;&amp;#039;mod_fcgid&amp;#039;&amp;#039;&amp;#039; ist eine Alternative zum älteren mod_fastcgi.&lt;br /&gt;
Durch den klassischen CGI - Ansatz können wir PHP-Skripte mit dem jeweiligen Besitzer und nicht nur mit dem Apache User auszuführen. Das erlaubt eine saubere Trennung von Virutellen Hosts. &lt;br /&gt;
&lt;br /&gt;
==== Beispiel Konfiguration ====&lt;br /&gt;
Im Beispiel werden zwei vhosts (www.example1.com und www.example2.com) konfiguriert die jeweils ein eigenes Web-Verzeichnis, eigene Benutzer und theoretisch auch eigene php.ini Konfigurationen beinhalten können.&lt;br /&gt;
Wir nehmen an das Web Rootvezeichnis liegt Debian üblich in /var/www/&lt;br /&gt;
&lt;br /&gt;
=== Apache2, PHP5 CGI Version und mod_fcgid installieren ===&lt;br /&gt;
Geht auf Debian einfach mit dem aptitude Tool:&lt;br /&gt;
 aptitude install apache2 apache2-suexec libapache2-mod-fcgid php5-cgi&lt;br /&gt;
&lt;br /&gt;
Falls der Apache schon mit aktiviertem php5 Modul installiert wurde müssen wir dieses abschalten:&lt;br /&gt;
&lt;br /&gt;
 a2dismod php5&lt;br /&gt;
&lt;br /&gt;
Folgende Module schalten wir ein:&lt;br /&gt;
&lt;br /&gt;
 a2enmod rewrite&lt;br /&gt;
 a2enmod suexec&lt;br /&gt;
 a2enmod include&lt;br /&gt;
 a2enmod fcgid&lt;br /&gt;
&lt;br /&gt;
Folgende PHP Einstellung sorgt für ein intelligenteres Handling der Skriptnamen und Pfade in PHP Skripten. Es funktioniert jedoch nicht auf allen Servern (z.B. nicht auf (OmniHttp oder Microsoft). Dort muß es abgeschalten werden.&lt;br /&gt;
&lt;br /&gt;
Wir editieren das Standard php.ini File z.B. mit vim (Pfad für Debian angegeben)&lt;br /&gt;
&lt;br /&gt;
 vim /etc/php5/cgi/php.ini&lt;br /&gt;
&lt;br /&gt;
Am Ende fügen wir die Zeile:&lt;br /&gt;
&lt;br /&gt;
 cgi.fix_pathinfo = 1 &lt;br /&gt;
&lt;br /&gt;
ein.&lt;br /&gt;
&lt;br /&gt;
Apache neustarten:&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/apache2 restart&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== VHOSTs einrichten ===&lt;br /&gt;
Wir richten 2 vhosts ein:&lt;br /&gt;
&lt;br /&gt;
* www.example1.com &lt;br /&gt;
* Benutzer: web1&lt;br /&gt;
* Gruppe: web1&lt;br /&gt;
* Document Root: /var/www/web1/web&lt;br /&gt;
&lt;br /&gt;
Analog dazu www.example2.com&lt;br /&gt;
&lt;br /&gt;
==== Benutzer und Gruppen anlegen ====&lt;br /&gt;
Für www.example1.com erzeugen wir einen Benutzer web1 und eine Gruppe web1. Analog dazu für www.example2.com:&lt;br /&gt;
&lt;br /&gt;
 groupadd web1&lt;br /&gt;
 groupadd web2&lt;br /&gt;
 useradd -s /bin/false -d /var/www/web1 -m -g web1 web1&lt;br /&gt;
 useradd -s /bin/false -d /var/www/web2 -m -g web2 web2&lt;br /&gt;
&lt;br /&gt;
==== Webverzeichnisse der vhosts anlegen ====&lt;br /&gt;
 mkdir -p /var/www/web1/web&lt;br /&gt;
 mkdir -p /var/www/web2/web&lt;br /&gt;
&lt;br /&gt;
==== Benutzerrechte anpassen ====&lt;br /&gt;
&lt;br /&gt;
 chown web1:web1 /var/www/web1/web&lt;br /&gt;
 chown web2:web2 /var/www/web2/web&lt;br /&gt;
&lt;br /&gt;
==== Zugriff auf PHP Konfigurieren ====&lt;br /&gt;
Auf PHP greift man über das Modul suexec zu.&lt;br /&gt;
&lt;br /&gt;
PHP liegt in&lt;br /&gt;
 /usr/lib/cgi-bin/php&lt;br /&gt;
also außerhalb des Web Verzeichnisses. suexec hat aber nur Zugriff auf das Webverzeichnis (DOC_ROOT):&lt;br /&gt;
&lt;br /&gt;
 /usr/lib/apache2/suexec -V&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe sieht ungefähr so aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
server1:~# /usr/lib/apache2/suexec -V&lt;br /&gt;
 -D AP_DOC_ROOT=&amp;quot;/var/www&amp;quot;&lt;br /&gt;
 -D AP_GID_MIN=100&lt;br /&gt;
 -D AP_HTTPD_USER=&amp;quot;www-data&amp;quot;&lt;br /&gt;
 -D AP_LOG_EXEC=&amp;quot;/var/log/apache2/suexec.log&amp;quot;&lt;br /&gt;
 -D AP_SAFE_PATH=&amp;quot;/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
 -D AP_UID_MIN=100&lt;br /&gt;
 -D AP_USERDIR_SUFFIX=&amp;quot;public_html&amp;quot;&lt;br /&gt;
server1:~#&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies lösen wir mit einem sog. Wrapper-Skript,das für jeden VHOST erstellt wird. Das Skript leitet die Anfragen an PHP weiter. Es liegt innerhalb des Webverzeichnisses und bekommt Benutzer und Gruppe des zugehörigen vhosts zugewiesen. Zu beachten ist das das Skript für &amp;#039;&amp;#039;other&amp;#039;&amp;#039; nicht beschreibbar ist. Sonst verweigert suexec seinen Dienst aus Sicherheitsgründen.&lt;br /&gt;
Die Wrapper Skripte bekommen ein eigenes Verzeichnis, damit wir die Übersicht behalten: /var/www/php-fcgi-scripts&lt;br /&gt;
&lt;br /&gt;
So gehts:&lt;br /&gt;
&lt;br /&gt;
WrapperSkript für www.example1.com&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/www/php-fcgi-scripts/web1&lt;br /&gt;
 vim /var/www/php-fcgi-scripts/web1/php-fcgi-starter&lt;br /&gt;
 &lt;br /&gt;
Code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
PHPRC=/etc/php5/cgi/&lt;br /&gt;
export PHPRC&lt;br /&gt;
&lt;br /&gt;
# max num of requests before fcgid process is stopped and new one is launched.&lt;br /&gt;
export PHP_FCGI_MAX_REQUESTS=5000&lt;br /&gt;
&lt;br /&gt;
# number of PHP children that will be launched&lt;br /&gt;
export PHP_FCGI_CHILDREN=8&lt;br /&gt;
exec /usr/lib/cgi-bin/php&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analog für www.example2.com. Hier muß nur web1 zu web2 verändert werden.&lt;br /&gt;
&lt;br /&gt;
Die php-fcgi-starter Skripte müssen ausführbar sein und der Gruppe und dem User der entsprechenden Website gehören:&lt;br /&gt;
&lt;br /&gt;
 chmod 755 /var/www/php-fcgi-scripts/web1/php-fcgi-starter&lt;br /&gt;
 chmod 755 /var/www/php-fcgi-scripts/web2/php-fcgi-starter&lt;br /&gt;
 chown -R web1:web1 /var/www/php-fcgi-scripts/web1&lt;br /&gt;
 chown -R web2:web2 /var/www/php-fcgi-scripts/web2&lt;br /&gt;
&lt;br /&gt;
=== Apache VirtualHosts anlegen ===&lt;br /&gt;
Im Apache Verzeichnis sites-available werden die VirtualHosts angelegt...&lt;br /&gt;
 vim /etc/apache2/sites-available/web1&lt;br /&gt;
Code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
  ServerName www.example1.com&lt;br /&gt;
  ServerAlias example1.com&lt;br /&gt;
  ServerAdmin webmaster@example1.com&lt;br /&gt;
  DocumentRoot /var/www/web1/web/&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;IfModule mod_fcgid.c&amp;gt;&lt;br /&gt;
    SuexecUserGroup web1 web1&lt;br /&gt;
    PHP_Fix_Pathinfo_Enable 1&lt;br /&gt;
    &amp;lt;Directory /var/www/web1/web/&amp;gt;&lt;br /&gt;
      Options +ExecCGI&lt;br /&gt;
      AllowOverride All&lt;br /&gt;
      AddHandler fcgid-script .php&lt;br /&gt;
      FCGIWrapper /var/www/php-fcgi-scripts/web1/php-fcgi-starter .php&lt;br /&gt;
      Order allow,deny&lt;br /&gt;
      Allow from all&lt;br /&gt;
    &amp;lt;/Directory&amp;gt;&lt;br /&gt;
  &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  # ErrorLog /var/log/apache2/error.log&lt;br /&gt;
  # CustomLog /var/log/apache2/access.log combined&lt;br /&gt;
&lt;br /&gt;
  ServerSignature Off&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
... und die neue Site aktiviert&lt;br /&gt;
 &lt;br /&gt;
 a2ensite web1&lt;br /&gt;
&lt;br /&gt;
Analog dazu für www.example2.com (Pfade und Name des Host anpassen)&lt;br /&gt;
&lt;br /&gt;
Server neu laden:&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/apache2 reload&lt;br /&gt;
&lt;br /&gt;
=== Test ===&lt;br /&gt;
Zum Test erzeugen wir eine kleine PHP Testdatei in www.example1.com&lt;br /&gt;
&lt;br /&gt;
 vim /var/www/web1/web/info.php&lt;br /&gt;
&lt;br /&gt;
Code:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 phpinfo();&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
und rufen sie im Browser auf. Eventuell muß man dazu die hosts Datei auf seinem Rechner so anpassen, das sie auf die richtige ServerIP zeigt (Suche nach hosts Datei)&lt;br /&gt;
&lt;br /&gt;
Wenn alles stimmt sollte eine Infoseite ausgegeben werden, und der Zeile Server API sollte der Wert CGI/FastCGI stehen.&lt;br /&gt;
&lt;br /&gt;
Wenn es nicht klappt lohnt sich meist ein Blick in die error.log und suexec.log Dateien des Apache (/var/log/apache2/ auf Debian) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Eine individuelle PHP Konfiguration für jeden Host ===&lt;br /&gt;
&lt;br /&gt;
Da jede Site ihr eigenes php-fcgi-starter Wrapper Skript hat, ist es möglich eigene php.ini Dateien zu konfigurieren&lt;br /&gt;
&lt;br /&gt;
==== Beispiel 1 ====&lt;br /&gt;
Am Anfang bietet es sich an eine Kopie der Standard php.ini Datei zu nehmen und diese anzupassen:&lt;br /&gt;
&lt;br /&gt;
===== php.ini Kopieren und Rechte anpassen =====&lt;br /&gt;
&lt;br /&gt;
 cp /etc/php5/cgi/php.ini /var/www/web2/&lt;br /&gt;
 chown web2:web2 /var/www/web2/php.ini&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== Wrapperskript anpassen damit die neue Konfiguration gelesen wird =====&lt;br /&gt;
&lt;br /&gt;
 vim /var/www/php-fcgi-scripts/web2/php-fcgi-starter&lt;br /&gt;
&lt;br /&gt;
Die Konstante PHPRC bekommt einen neuen Wert: &amp;#039;&amp;#039;/var/www/web2/&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
PHPRC=/var/www/web2/&lt;br /&gt;
export PHPRC&lt;br /&gt;
export PHP_FCGI_MAX_REQUESTS=5000&lt;br /&gt;
export PHP_FCGI_CHILDREN=8&lt;br /&gt;
exec /usr/lib/cgi-bin/php&lt;br /&gt;
&lt;br /&gt;
Apache neu laden:&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/apache2 reload&lt;br /&gt;
&lt;br /&gt;
==== Beispiel 2 ====&lt;br /&gt;
Man kann auch einzelne Werte der geladenen php Konfiguration direkt im Wrapperskript überscheiben oder hinzufügen, indem man den -d Schalter nutzt.&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel deaktivieren wir die magic_quotes_gpc für die Site www.example2.com&lt;br /&gt;
&lt;br /&gt;
 vim /var/www/php-fcgi-scripts/web2/php-fcgi-starter&lt;br /&gt;
&lt;br /&gt;
Code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
PHPRC=/etc/php5/cgi/&lt;br /&gt;
export PHPRC&lt;br /&gt;
export PHP_FCGI_MAX_REQUESTS=5000&lt;br /&gt;
export PHP_FCGI_CHILDREN=8&lt;br /&gt;
exec /usr/lib/cgi-bin/php -d magic_quotes_gpc=off&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Neuladen des Apache:&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/apache2 reload&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Links ==&lt;br /&gt;
* http://www.heise.de/security/artikel/Grundsicherung-fuer-PHP-Software-270918.html&lt;br /&gt;
* php.ini Optionen Referenz: http://www.tu-chemnitz.de/docs/php/ini.core.html&lt;br /&gt;
*  mod_fcgid: http://fastcgi.coremail.cn/&lt;br /&gt;
* Apache: http://httpd.apache.org/&lt;br /&gt;
* PHP: http://www.php.net/&lt;br /&gt;
* Debian: http://www.debian.org/&lt;/div&gt;</summary>
		<author><name>193.196.133.6</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Apache2_und_CGI/FastCGI&amp;diff=1839</id>
		<title>Apache2 und CGI/FastCGI</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Apache2_und_CGI/FastCGI&amp;diff=1839"/>
		<updated>2010-02-20T09:59:58Z</updated>

		<summary type="html">&lt;p&gt;193.196.133.6: /* Weiterführende Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Apache2 mit php5 und mod_fcgid auf Debian Lenny (Debian 5) ==&lt;br /&gt;
Quelle (en):http://www.howtoforge.com/how-to-set-up-apache2-with-mod_fcgid-and-php5-on-debian-lenny 19.2.2010&lt;br /&gt;
&lt;br /&gt;
=== Einleitung ===&lt;br /&gt;
&lt;br /&gt;
==== FastCGI ====&lt;br /&gt;
Wenn man PHP nicht als Modul von Apache laufen lassen will kann man es über das Common Gateway Interface ansprechen. FastCGI erzeugt im Gegensatz zu CGI nicht für jede Anfreage einen neuen Thread und ist dementsprechend genügsamer was die Performance betrifft.&lt;br /&gt;
&lt;br /&gt;
Das FastCGI Modul &amp;#039;&amp;#039;&amp;#039;mod_fcgid&amp;#039;&amp;#039;&amp;#039; ist eine Alternative zum älteren mod_fastcgi.&lt;br /&gt;
Durch den klassischen CGI - Ansatz können wir PHP-Skripte mit dem jeweiligen Besitzer und nicht nur mit dem Apache User auszuführen. Das erlaubt eine saubere Trennung von Virutellen Hosts. &lt;br /&gt;
&lt;br /&gt;
==== Beispiel Konfiguration ====&lt;br /&gt;
Im Beispiel werden zwei vhosts (www.example1.com und www.example2.com) konfiguriert die jeweils ein eigenes Web-Verzeichnis, eigene Benutzer und theoretisch auch eigene php.ini Konfigurationen beinhalten können.&lt;br /&gt;
Wir nehmen an das Web Rootvezeichnis liegt Debian üblich in /var/www/&lt;br /&gt;
&lt;br /&gt;
=== Apache2, PHP5 CGI Version und mod_fcgid installieren ===&lt;br /&gt;
Geht auf Debian einfach mit dem aptitude Tool:&lt;br /&gt;
 aptitude install apache2 apache2-suexec libapache2-mod-fcgid php5-cgi&lt;br /&gt;
&lt;br /&gt;
Falls der Apache schon mit aktiviertem php5 Modul installiert wurde müssen wir dieses abschalten:&lt;br /&gt;
&lt;br /&gt;
 a2dismod php5&lt;br /&gt;
&lt;br /&gt;
Folgende Module schalten wir ein:&lt;br /&gt;
&lt;br /&gt;
 a2enmod rewrite&lt;br /&gt;
 a2enmod suexec&lt;br /&gt;
 a2enmod include&lt;br /&gt;
 a2enmod fcgid&lt;br /&gt;
&lt;br /&gt;
Folgende PHP Einstellung sorgt für ein intelligenteres Handling der Skriptnamen und Pfade in PHP Skripten. Es funktioniert jedoch nicht auf allen Servern (z.B. nicht auf (OmniHttp oder Microsoft). Dort muß es abgeschalten werden.&lt;br /&gt;
&lt;br /&gt;
Wir editieren das Standard php.ini File z.B. mit vim (Pfad für Debian angegeben)&lt;br /&gt;
&lt;br /&gt;
 vim /etc/php5/cgi/php.ini&lt;br /&gt;
&lt;br /&gt;
Am Ende fügen wir die Zeile:&lt;br /&gt;
&lt;br /&gt;
 cgi.fix_pathinfo = 1 &lt;br /&gt;
&lt;br /&gt;
ein.&lt;br /&gt;
&lt;br /&gt;
Apache neustarten:&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/apache2 restart&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== VHOSTs einrichten ===&lt;br /&gt;
Wir richten 2 vhosts ein:&lt;br /&gt;
&lt;br /&gt;
* www.example1.com &lt;br /&gt;
* Benutzer: web1&lt;br /&gt;
* Gruppe: web1&lt;br /&gt;
* Document Root: /var/www/web1/web&lt;br /&gt;
&lt;br /&gt;
Analog dazu www.example2.com&lt;br /&gt;
&lt;br /&gt;
==== Benutzer und Gruppen anlegen ====&lt;br /&gt;
Für www.example1.com erzeugen wir einen Benutzer web1 und eine Gruppe web1. Analog dazu für www.example2.com:&lt;br /&gt;
&lt;br /&gt;
 groupadd web1&lt;br /&gt;
 groupadd web2&lt;br /&gt;
 useradd -s /bin/false -d /var/www/web1 -m -g web1 web1&lt;br /&gt;
 useradd -s /bin/false -d /var/www/web2 -m -g web2 web2&lt;br /&gt;
&lt;br /&gt;
==== Webverzeichnisse der vhosts anlegen ====&lt;br /&gt;
 mkdir -p /var/www/web1/web&lt;br /&gt;
 mkdir -p /var/www/web2/web&lt;br /&gt;
&lt;br /&gt;
==== Benutzerrechte anpassen ====&lt;br /&gt;
&lt;br /&gt;
 chown web1:web1 /var/www/web1/web&lt;br /&gt;
 chown web2:web2 /var/www/web2/web&lt;br /&gt;
&lt;br /&gt;
==== Zugriff auf PHP Konfigurieren ====&lt;br /&gt;
Auf PHP greift man über das Modul suexec zu.&lt;br /&gt;
&lt;br /&gt;
PHP liegt in&lt;br /&gt;
 /usr/lib/cgi-bin/php&lt;br /&gt;
also außerhalb des Web Verzeichnisses. suexec hat aber nur Zugriff auf das Webverzeichnis (DOC_ROOT):&lt;br /&gt;
&lt;br /&gt;
 /usr/lib/apache2/suexec -V&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe sieht ungefähr so aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
server1:~# /usr/lib/apache2/suexec -V&lt;br /&gt;
 -D AP_DOC_ROOT=&amp;quot;/var/www&amp;quot;&lt;br /&gt;
 -D AP_GID_MIN=100&lt;br /&gt;
 -D AP_HTTPD_USER=&amp;quot;www-data&amp;quot;&lt;br /&gt;
 -D AP_LOG_EXEC=&amp;quot;/var/log/apache2/suexec.log&amp;quot;&lt;br /&gt;
 -D AP_SAFE_PATH=&amp;quot;/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
 -D AP_UID_MIN=100&lt;br /&gt;
 -D AP_USERDIR_SUFFIX=&amp;quot;public_html&amp;quot;&lt;br /&gt;
server1:~#&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies lösen wir mit einem sog. Wrapper-Skript,das für jeden VHOST erstellt wird. Das Skript leitet die Anfragen an PHP weiter. Es liegt innerhalb des Webverzeichnisses und bekommt Benutzer und Gruppe des zugehörigen vhosts zugewiesen. Zu beachten ist das das Skript für &amp;#039;&amp;#039;other&amp;#039;&amp;#039; nicht beschreibbar ist. Sonst verweigert suexec seinen Dienst aus Sicherheitsgründen.&lt;br /&gt;
Die Wrapper Skripte bekommen ein eigenes Verzeichnis, damit wir die Übersicht behalten: /var/www/php-fcgi-scripts&lt;br /&gt;
&lt;br /&gt;
So gehts:&lt;br /&gt;
&lt;br /&gt;
WrapperSkript für www.example1.com&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/www/php-fcgi-scripts/web1&lt;br /&gt;
 vim /var/www/php-fcgi-scripts/web1/php-fcgi-starter&lt;br /&gt;
 &lt;br /&gt;
Code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
PHPRC=/etc/php5/cgi/&lt;br /&gt;
export PHPRC&lt;br /&gt;
&lt;br /&gt;
# max num of requests before fcgid process is stopped and new one is launched.&lt;br /&gt;
export PHP_FCGI_MAX_REQUESTS=5000&lt;br /&gt;
&lt;br /&gt;
# number of PHP children that will be launched&lt;br /&gt;
export PHP_FCGI_CHILDREN=8&lt;br /&gt;
exec /usr/lib/cgi-bin/php&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analog für www.example2.com. Hier muß nur web1 zu web2 verändert werden.&lt;br /&gt;
&lt;br /&gt;
Die php-fcgi-starter Skripte müssen ausführbar sein und der Gruppe und dem User der entsprechenden Website gehören:&lt;br /&gt;
&lt;br /&gt;
chmod 755 /var/www/php-fcgi-scripts/web1/php-fcgi-starter&lt;br /&gt;
chmod 755 /var/www/php-fcgi-scripts/web2/php-fcgi-starter&lt;br /&gt;
chown -R web1:web1 /var/www/php-fcgi-scripts/web1&lt;br /&gt;
chown -R web2:web2 /var/www/php-fcgi-scripts/web2&lt;br /&gt;
&lt;br /&gt;
=== Apache VirtualHosts anlegen ===&lt;br /&gt;
Im Apache Verzeichnis sites-available werden die VirtualHosts angelegt...&lt;br /&gt;
 vim /etc/apache2/sites-available/web1&lt;br /&gt;
Code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
  ServerName www.example1.com&lt;br /&gt;
  ServerAlias example1.com&lt;br /&gt;
  ServerAdmin webmaster@example1.com&lt;br /&gt;
  DocumentRoot /var/www/web1/web/&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;IfModule mod_fcgid.c&amp;gt;&lt;br /&gt;
    SuexecUserGroup web1 web1&lt;br /&gt;
    PHP_Fix_Pathinfo_Enable 1&lt;br /&gt;
    &amp;lt;Directory /var/www/web1/web/&amp;gt;&lt;br /&gt;
      Options +ExecCGI&lt;br /&gt;
      AllowOverride All&lt;br /&gt;
      AddHandler fcgid-script .php&lt;br /&gt;
      FCGIWrapper /var/www/php-fcgi-scripts/web1/php-fcgi-starter .php&lt;br /&gt;
      Order allow,deny&lt;br /&gt;
      Allow from all&lt;br /&gt;
    &amp;lt;/Directory&amp;gt;&lt;br /&gt;
  &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  # ErrorLog /var/log/apache2/error.log&lt;br /&gt;
  # CustomLog /var/log/apache2/access.log combined&lt;br /&gt;
&lt;br /&gt;
  ServerSignature Off&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
... und die neue Site aktiviert&lt;br /&gt;
 &lt;br /&gt;
 a2ensite web1&lt;br /&gt;
&lt;br /&gt;
Analog dazu für www.example2.com (Pfade und Name des Host anpassen)&lt;br /&gt;
&lt;br /&gt;
Server neu laden:&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/apache2 reload&lt;br /&gt;
&lt;br /&gt;
=== Test ===&lt;br /&gt;
Zum Test erzeugen wir eine kleine PHP Testdatei in www.example1.com&lt;br /&gt;
&lt;br /&gt;
 vim /var/www/web1/web/info.php&lt;br /&gt;
&lt;br /&gt;
Code:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 phpinfo();&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
und rufen sie im Browser auf. Eventuell muß man dazu die hosts Datei auf seinem Rechner so anpassen, das sie auf die richtige ServerIP zeigt (Suche nach hosts Datei)&lt;br /&gt;
&lt;br /&gt;
Wenn alles stimmt sollte eine Infoseite ausgegeben werden, und der Zeile Server API sollte der Wert CGI/FastCGI stehen.&lt;br /&gt;
&lt;br /&gt;
Wenn es nicht klappt lohnt sich meist ein Blick in die error.log und suexec.log Dateien des Apache (/var/log/apache2/ auf Debian) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Eine individuelle PHP Konfiguration für jeden Host ===&lt;br /&gt;
&lt;br /&gt;
Da jede Site ihr eigenes php-fcgi-starter Wrapper Skript hat, ist es möglich eigene php.ini Dateien zu konfigurieren&lt;br /&gt;
&lt;br /&gt;
==== Beispiel 1 ====&lt;br /&gt;
Am Anfang bietet es sich an eine Kopie der Standard php.ini Datei zu nehmen und diese anzupassen:&lt;br /&gt;
&lt;br /&gt;
===== php.ini Kopieren und Rechte anpassen =====&lt;br /&gt;
&lt;br /&gt;
 cp /etc/php5/cgi/php.ini /var/www/web2/&lt;br /&gt;
 chown web2:web2 /var/www/web2/php.ini&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== Wrapperskript anpassen damit die neue Konfiguration gelesen wird =====&lt;br /&gt;
&lt;br /&gt;
 vim /var/www/php-fcgi-scripts/web2/php-fcgi-starter&lt;br /&gt;
&lt;br /&gt;
Die Konstante PHPRC bekommt einen neuen Wert: &amp;#039;&amp;#039;/var/www/web2/&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
PHPRC=/var/www/web2/&lt;br /&gt;
export PHPRC&lt;br /&gt;
export PHP_FCGI_MAX_REQUESTS=5000&lt;br /&gt;
export PHP_FCGI_CHILDREN=8&lt;br /&gt;
exec /usr/lib/cgi-bin/php&lt;br /&gt;
&lt;br /&gt;
Apache neu laden:&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/apache2 reload&lt;br /&gt;
&lt;br /&gt;
==== Beispiel 2 ====&lt;br /&gt;
Man kann auch einzelne Werte der geladenen php Konfiguration direkt im Wrapperskript überscheiben oder hinzufügen, indem man den -d Schalter nutzt.&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel deaktivieren wir die magic_quotes_gpc für die Site www.example2.com&lt;br /&gt;
&lt;br /&gt;
 vim /var/www/php-fcgi-scripts/web2/php-fcgi-starter&lt;br /&gt;
&lt;br /&gt;
Code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
PHPRC=/etc/php5/cgi/&lt;br /&gt;
export PHPRC&lt;br /&gt;
export PHP_FCGI_MAX_REQUESTS=5000&lt;br /&gt;
export PHP_FCGI_CHILDREN=8&lt;br /&gt;
exec /usr/lib/cgi-bin/php -d magic_quotes_gpc=off&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Neuladen des Apache:&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/apache2 reload&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Links ==&lt;br /&gt;
* http://www.heise.de/security/artikel/Grundsicherung-fuer-PHP-Software-270918.html&lt;br /&gt;
* php.ini Optionen Referenz: http://www.tu-chemnitz.de/docs/php/ini.core.html&lt;br /&gt;
*  mod_fcgid: http://fastcgi.coremail.cn/&lt;br /&gt;
* Apache: http://httpd.apache.org/&lt;br /&gt;
* PHP: http://www.php.net/&lt;br /&gt;
* Debian: http://www.debian.org/&lt;/div&gt;</summary>
		<author><name>193.196.133.6</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Apache2_und_CGI/FastCGI&amp;diff=1838</id>
		<title>Apache2 und CGI/FastCGI</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Apache2_und_CGI/FastCGI&amp;diff=1838"/>
		<updated>2010-02-20T09:58:41Z</updated>

		<summary type="html">&lt;p&gt;193.196.133.6: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Apache2 mit php5 und mod_fcgid auf Debian Lenny (Debian 5) ==&lt;br /&gt;
Quelle (en):http://www.howtoforge.com/how-to-set-up-apache2-with-mod_fcgid-and-php5-on-debian-lenny 19.2.2010&lt;br /&gt;
&lt;br /&gt;
=== Einleitung ===&lt;br /&gt;
&lt;br /&gt;
==== FastCGI ====&lt;br /&gt;
Wenn man PHP nicht als Modul von Apache laufen lassen will kann man es über das Common Gateway Interface ansprechen. FastCGI erzeugt im Gegensatz zu CGI nicht für jede Anfreage einen neuen Thread und ist dementsprechend genügsamer was die Performance betrifft.&lt;br /&gt;
&lt;br /&gt;
Das FastCGI Modul &amp;#039;&amp;#039;&amp;#039;mod_fcgid&amp;#039;&amp;#039;&amp;#039; ist eine Alternative zum älteren mod_fastcgi.&lt;br /&gt;
Durch den klassischen CGI - Ansatz können wir PHP-Skripte mit dem jeweiligen Besitzer und nicht nur mit dem Apache User auszuführen. Das erlaubt eine saubere Trennung von Virutellen Hosts. &lt;br /&gt;
&lt;br /&gt;
==== Beispiel Konfiguration ====&lt;br /&gt;
Im Beispiel werden zwei vhosts (www.example1.com und www.example2.com) konfiguriert die jeweils ein eigenes Web-Verzeichnis, eigene Benutzer und theoretisch auch eigene php.ini Konfigurationen beinhalten können.&lt;br /&gt;
Wir nehmen an das Web Rootvezeichnis liegt Debian üblich in /var/www/&lt;br /&gt;
&lt;br /&gt;
=== Apache2, PHP5 CGI Version und mod_fcgid installieren ===&lt;br /&gt;
Geht auf Debian einfach mit dem aptitude Tool:&lt;br /&gt;
 aptitude install apache2 apache2-suexec libapache2-mod-fcgid php5-cgi&lt;br /&gt;
&lt;br /&gt;
Falls der Apache schon mit aktiviertem php5 Modul installiert wurde müssen wir dieses abschalten:&lt;br /&gt;
&lt;br /&gt;
 a2dismod php5&lt;br /&gt;
&lt;br /&gt;
Folgende Module schalten wir ein:&lt;br /&gt;
&lt;br /&gt;
 a2enmod rewrite&lt;br /&gt;
 a2enmod suexec&lt;br /&gt;
 a2enmod include&lt;br /&gt;
 a2enmod fcgid&lt;br /&gt;
&lt;br /&gt;
Folgende PHP Einstellung sorgt für ein intelligenteres Handling der Skriptnamen und Pfade in PHP Skripten. Es funktioniert jedoch nicht auf allen Servern (z.B. nicht auf (OmniHttp oder Microsoft). Dort muß es abgeschalten werden.&lt;br /&gt;
&lt;br /&gt;
Wir editieren das Standard php.ini File z.B. mit vim (Pfad für Debian angegeben)&lt;br /&gt;
&lt;br /&gt;
 vim /etc/php5/cgi/php.ini&lt;br /&gt;
&lt;br /&gt;
Am Ende fügen wir die Zeile:&lt;br /&gt;
&lt;br /&gt;
 cgi.fix_pathinfo = 1 &lt;br /&gt;
&lt;br /&gt;
ein.&lt;br /&gt;
&lt;br /&gt;
Apache neustarten:&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/apache2 restart&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== VHOSTs einrichten ===&lt;br /&gt;
Wir richten 2 vhosts ein:&lt;br /&gt;
&lt;br /&gt;
* www.example1.com &lt;br /&gt;
* Benutzer: web1&lt;br /&gt;
* Gruppe: web1&lt;br /&gt;
* Document Root: /var/www/web1/web&lt;br /&gt;
&lt;br /&gt;
Analog dazu www.example2.com&lt;br /&gt;
&lt;br /&gt;
==== Benutzer und Gruppen anlegen ====&lt;br /&gt;
Für www.example1.com erzeugen wir einen Benutzer web1 und eine Gruppe web1. Analog dazu für www.example2.com:&lt;br /&gt;
&lt;br /&gt;
 groupadd web1&lt;br /&gt;
 groupadd web2&lt;br /&gt;
 useradd -s /bin/false -d /var/www/web1 -m -g web1 web1&lt;br /&gt;
 useradd -s /bin/false -d /var/www/web2 -m -g web2 web2&lt;br /&gt;
&lt;br /&gt;
==== Webverzeichnisse der vhosts anlegen ====&lt;br /&gt;
 mkdir -p /var/www/web1/web&lt;br /&gt;
 mkdir -p /var/www/web2/web&lt;br /&gt;
&lt;br /&gt;
==== Benutzerrechte anpassen ====&lt;br /&gt;
&lt;br /&gt;
 chown web1:web1 /var/www/web1/web&lt;br /&gt;
 chown web2:web2 /var/www/web2/web&lt;br /&gt;
&lt;br /&gt;
==== Zugriff auf PHP Konfigurieren ====&lt;br /&gt;
Auf PHP greift man über das Modul suexec zu.&lt;br /&gt;
&lt;br /&gt;
PHP liegt in&lt;br /&gt;
 /usr/lib/cgi-bin/php&lt;br /&gt;
also außerhalb des Web Verzeichnisses. suexec hat aber nur Zugriff auf das Webverzeichnis (DOC_ROOT):&lt;br /&gt;
&lt;br /&gt;
 /usr/lib/apache2/suexec -V&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe sieht ungefähr so aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
server1:~# /usr/lib/apache2/suexec -V&lt;br /&gt;
 -D AP_DOC_ROOT=&amp;quot;/var/www&amp;quot;&lt;br /&gt;
 -D AP_GID_MIN=100&lt;br /&gt;
 -D AP_HTTPD_USER=&amp;quot;www-data&amp;quot;&lt;br /&gt;
 -D AP_LOG_EXEC=&amp;quot;/var/log/apache2/suexec.log&amp;quot;&lt;br /&gt;
 -D AP_SAFE_PATH=&amp;quot;/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
 -D AP_UID_MIN=100&lt;br /&gt;
 -D AP_USERDIR_SUFFIX=&amp;quot;public_html&amp;quot;&lt;br /&gt;
server1:~#&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies lösen wir mit einem sog. Wrapper-Skript,das für jeden VHOST erstellt wird. Das Skript leitet die Anfragen an PHP weiter. Es liegt innerhalb des Webverzeichnisses und bekommt Benutzer und Gruppe des zugehörigen vhosts zugewiesen. Zu beachten ist das das Skript für &amp;#039;&amp;#039;other&amp;#039;&amp;#039; nicht beschreibbar ist. Sonst verweigert suexec seinen Dienst aus Sicherheitsgründen.&lt;br /&gt;
Die Wrapper Skripte bekommen ein eigenes Verzeichnis, damit wir die Übersicht behalten: /var/www/php-fcgi-scripts&lt;br /&gt;
&lt;br /&gt;
So gehts:&lt;br /&gt;
&lt;br /&gt;
WrapperSkript für www.example1.com&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/www/php-fcgi-scripts/web1&lt;br /&gt;
 vim /var/www/php-fcgi-scripts/web1/php-fcgi-starter&lt;br /&gt;
 &lt;br /&gt;
Code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
PHPRC=/etc/php5/cgi/&lt;br /&gt;
export PHPRC&lt;br /&gt;
&lt;br /&gt;
# max num of requests before fcgid process is stopped and new one is launched.&lt;br /&gt;
export PHP_FCGI_MAX_REQUESTS=5000&lt;br /&gt;
&lt;br /&gt;
# number of PHP children that will be launched&lt;br /&gt;
export PHP_FCGI_CHILDREN=8&lt;br /&gt;
exec /usr/lib/cgi-bin/php&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analog für www.example2.com. Hier muß nur web1 zu web2 verändert werden.&lt;br /&gt;
&lt;br /&gt;
Die php-fcgi-starter Skripte müssen ausführbar sein und der Gruppe und dem User der entsprechenden Website gehören:&lt;br /&gt;
&lt;br /&gt;
chmod 755 /var/www/php-fcgi-scripts/web1/php-fcgi-starter&lt;br /&gt;
chmod 755 /var/www/php-fcgi-scripts/web2/php-fcgi-starter&lt;br /&gt;
chown -R web1:web1 /var/www/php-fcgi-scripts/web1&lt;br /&gt;
chown -R web2:web2 /var/www/php-fcgi-scripts/web2&lt;br /&gt;
&lt;br /&gt;
=== Apache VirtualHosts anlegen ===&lt;br /&gt;
Im Apache Verzeichnis sites-available werden die VirtualHosts angelegt...&lt;br /&gt;
 vim /etc/apache2/sites-available/web1&lt;br /&gt;
Code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
  ServerName www.example1.com&lt;br /&gt;
  ServerAlias example1.com&lt;br /&gt;
  ServerAdmin webmaster@example1.com&lt;br /&gt;
  DocumentRoot /var/www/web1/web/&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;IfModule mod_fcgid.c&amp;gt;&lt;br /&gt;
    SuexecUserGroup web1 web1&lt;br /&gt;
    PHP_Fix_Pathinfo_Enable 1&lt;br /&gt;
    &amp;lt;Directory /var/www/web1/web/&amp;gt;&lt;br /&gt;
      Options +ExecCGI&lt;br /&gt;
      AllowOverride All&lt;br /&gt;
      AddHandler fcgid-script .php&lt;br /&gt;
      FCGIWrapper /var/www/php-fcgi-scripts/web1/php-fcgi-starter .php&lt;br /&gt;
      Order allow,deny&lt;br /&gt;
      Allow from all&lt;br /&gt;
    &amp;lt;/Directory&amp;gt;&lt;br /&gt;
  &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  # ErrorLog /var/log/apache2/error.log&lt;br /&gt;
  # CustomLog /var/log/apache2/access.log combined&lt;br /&gt;
&lt;br /&gt;
  ServerSignature Off&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
... und die neue Site aktiviert&lt;br /&gt;
 &lt;br /&gt;
 a2ensite web1&lt;br /&gt;
&lt;br /&gt;
Analog dazu für www.example2.com (Pfade und Name des Host anpassen)&lt;br /&gt;
&lt;br /&gt;
Server neu laden:&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/apache2 reload&lt;br /&gt;
&lt;br /&gt;
=== Test ===&lt;br /&gt;
Zum Test erzeugen wir eine kleine PHP Testdatei in www.example1.com&lt;br /&gt;
&lt;br /&gt;
 vim /var/www/web1/web/info.php&lt;br /&gt;
&lt;br /&gt;
Code:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 phpinfo();&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
und rufen sie im Browser auf. Eventuell muß man dazu die hosts Datei auf seinem Rechner so anpassen, das sie auf die richtige ServerIP zeigt (Suche nach hosts Datei)&lt;br /&gt;
&lt;br /&gt;
Wenn alles stimmt sollte eine Infoseite ausgegeben werden, und der Zeile Server API sollte der Wert CGI/FastCGI stehen.&lt;br /&gt;
&lt;br /&gt;
Wenn es nicht klappt lohnt sich meist ein Blick in die error.log und suexec.log Dateien des Apache (/var/log/apache2/ auf Debian) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Eine individuelle PHP Konfiguration für jeden Host ===&lt;br /&gt;
&lt;br /&gt;
Da jede Site ihr eigenes php-fcgi-starter Wrapper Skript hat, ist es möglich eigene php.ini Dateien zu konfigurieren&lt;br /&gt;
&lt;br /&gt;
==== Beispiel 1 ====&lt;br /&gt;
Am Anfang bietet es sich an eine Kopie der Standard php.ini Datei zu nehmen und diese anzupassen:&lt;br /&gt;
&lt;br /&gt;
===== php.ini Kopieren und Rechte anpassen =====&lt;br /&gt;
&lt;br /&gt;
 cp /etc/php5/cgi/php.ini /var/www/web2/&lt;br /&gt;
 chown web2:web2 /var/www/web2/php.ini&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== Wrapperskript anpassen damit die neue Konfiguration gelesen wird =====&lt;br /&gt;
&lt;br /&gt;
 vim /var/www/php-fcgi-scripts/web2/php-fcgi-starter&lt;br /&gt;
&lt;br /&gt;
Die Konstante PHPRC bekommt einen neuen Wert: &amp;#039;&amp;#039;/var/www/web2/&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
PHPRC=/var/www/web2/&lt;br /&gt;
export PHPRC&lt;br /&gt;
export PHP_FCGI_MAX_REQUESTS=5000&lt;br /&gt;
export PHP_FCGI_CHILDREN=8&lt;br /&gt;
exec /usr/lib/cgi-bin/php&lt;br /&gt;
&lt;br /&gt;
Apache neu laden:&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/apache2 reload&lt;br /&gt;
&lt;br /&gt;
==== Beispiel 2 ====&lt;br /&gt;
Man kann auch einzelne Werte der geladenen php Konfiguration direkt im Wrapperskript überscheiben oder hinzufügen, indem man den -d Schalter nutzt.&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel deaktivieren wir die magic_quotes_gpc für die Site www.example2.com&lt;br /&gt;
&lt;br /&gt;
 vim /var/www/php-fcgi-scripts/web2/php-fcgi-starter&lt;br /&gt;
&lt;br /&gt;
Code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
PHPRC=/etc/php5/cgi/&lt;br /&gt;
export PHPRC&lt;br /&gt;
export PHP_FCGI_MAX_REQUESTS=5000&lt;br /&gt;
export PHP_FCGI_CHILDREN=8&lt;br /&gt;
exec /usr/lib/cgi-bin/php -d magic_quotes_gpc=off&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Neuladen des Apache:&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/apache2 reload&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Links ==&lt;br /&gt;
http://www.heise.de/security/artikel/Grundsicherung-fuer-PHP-Software-270918.html&lt;br /&gt;
&lt;br /&gt;
php.ini Optionen Referenz: http://www.tu-chemnitz.de/docs/php/ini.core.html&lt;/div&gt;</summary>
		<author><name>193.196.133.6</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Apache2_und_CGI/FastCGI&amp;diff=1837</id>
		<title>Apache2 und CGI/FastCGI</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Apache2_und_CGI/FastCGI&amp;diff=1837"/>
		<updated>2010-02-20T08:50:19Z</updated>

		<summary type="html">&lt;p&gt;193.196.133.6: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Apache2 mit php5 und mod_fcgid auf Debian Lenny (Debian 5) ==&lt;br /&gt;
Quelle (en):http://www.howtoforge.com/how-to-set-up-apache2-with-mod_fcgid-and-php5-on-debian-lenny 19.2.2010&lt;br /&gt;
&lt;br /&gt;
=== Einleitung ===&lt;br /&gt;
&lt;br /&gt;
==== FastCGI ====&lt;br /&gt;
Wenn man PHP nicht als Modul von Apache laufen lassen will kann man es über das Common Gateway Interface ansprechen. FastCGI erzeugt im Gegensatz zu CGI nicht für jede Anfreage einen neuen Thread und ist dementsprechend genügsamer was die Performance betrifft.&lt;br /&gt;
&lt;br /&gt;
Das FastCGI Modul &amp;#039;&amp;#039;&amp;#039;mod_fcgid&amp;#039;&amp;#039;&amp;#039; ist eine Alternative zum älteren mod_fastcgi und erlaubt es PHP-Skripte mit dem jeweiligen Besitzer und nicht nur mit dem Apache User auszuführen. Das erlaubt eine saubere Trennung von Virutellen Hosts.&lt;br /&gt;
&lt;br /&gt;
==== Beispiel Konfiguration ====&lt;br /&gt;
Im Beispiel werden zwei vhosts (www.example1.com und www.example2.com) konfiguriert die jeweils ein eigenes Web-Verzeichnis, eigene Benutzer und theoretisch auch eigene php.ini Konfigurationen beinhalten können.&lt;br /&gt;
&lt;br /&gt;
== Apache2, PHP5 CGI Version und mod_fcgid installieren ==&lt;br /&gt;
Geht auf Debian einfach mit dem aptitude Tool:&lt;br /&gt;
 aptitude install apache2 apache2-suexec libapache2-mod-fcgid php5-cgi&lt;br /&gt;
&lt;br /&gt;
Falls der Apache schon mit aktiviertem php5 Modul installiert wurde müssen wir dieses abschalten:&lt;br /&gt;
&lt;br /&gt;
 a2dismod php5&lt;br /&gt;
&lt;br /&gt;
Folgende Module schalten wir ein:&lt;br /&gt;
&lt;br /&gt;
 a2enmod rewrite&lt;br /&gt;
 a2enmod suexec&lt;br /&gt;
 a2enmod include&lt;br /&gt;
 a2enmod fcgid&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Links ==&lt;br /&gt;
http://www.heise.de/security/artikel/Grundsicherung-fuer-PHP-Software-270918.html&lt;br /&gt;
&lt;br /&gt;
php.ini Optionen Referenz: http://www.tu-chemnitz.de/docs/php/ini.core.html&lt;/div&gt;</summary>
		<author><name>193.196.133.6</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Apache&amp;diff=18645</id>
		<title>Apache</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Apache&amp;diff=18645"/>
		<updated>2010-02-20T08:24:39Z</updated>

		<summary type="html">&lt;p&gt;193.196.133.6: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tipps und Tricks für die Arbeit mit dem Apache Server.&lt;br /&gt;
&lt;br /&gt;
Siehe auch: htaccess Apache auf dem Mac etc.&lt;br /&gt;
&lt;br /&gt;
== Apache2 und CGI/FastCGI  ==&lt;br /&gt;
[[Apache2 und CGI/FastCGI]]&lt;br /&gt;
&lt;br /&gt;
== Informationen der Apache Umgebung herausfinden ==&lt;br /&gt;
In der Shell &lt;br /&gt;
 httpd -V &lt;br /&gt;
gibt einige Informationen zu Logfiles, Konfigurationsfiles etc. aus.&lt;br /&gt;
Funktioniert auch unter Windows, Mac usw.&lt;/div&gt;</summary>
		<author><name>193.196.133.6</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Linux_Shell_Skripte_mit_ssh_und_scp_ohne_Passworteingabe&amp;diff=1847</id>
		<title>Linux Shell Skripte mit ssh und scp ohne Passworteingabe</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Linux_Shell_Skripte_mit_ssh_und_scp_ohne_Passworteingabe&amp;diff=1847"/>
		<updated>2010-02-08T09:06:06Z</updated>

		<summary type="html">&lt;p&gt;193.196.133.6: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;http://www.hostingrails.com/HowTo-SSH-SCP-without-a-password (Zugriff am 8.2.)&lt;br /&gt;
&lt;br /&gt;
HowTo SSH/SCP without a password.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a wiki article created by HostingRails users. Please login or signup to make edits.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This small HowTo will explain how to setup key-based authentication for password-less SSH and SCP usage.&lt;br /&gt;
&lt;br /&gt;
This HowTo does assume the reader has some basic knowledge of ssh and a terminal, and is using an operating system that implements SSH. If you&amp;#039;re using a Windows OS and want to use SSH, try PuTTY. For Putty, see key-based auth with Putty.&lt;br /&gt;
&lt;br /&gt;
In the examples that follow please substitute &amp;#039;servername&amp;#039; , &amp;#039;ipaddress&amp;#039; and &amp;#039;username&amp;#039; with the proper information for your setup. I have included a list of weblinks for the words in italic at the end of this document.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Step 1. Verify Connection ==&lt;br /&gt;
Verify that you can connect normally (using a password) to the server you intend to setup keys for:&lt;br /&gt;
&lt;br /&gt;
Examples&lt;br /&gt;
&lt;br /&gt;
 user@homebox ~ $ ssh username@&amp;#039;servername&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Or:&lt;br /&gt;
&lt;br /&gt;
 user@homebox ~ $ ssh username@&amp;#039;ipaddress&amp;#039;&lt;br /&gt;
&lt;br /&gt;
If your username is the same on both the client (&amp;#039;homebox&amp;#039;) and the server (&amp;#039;servername&amp;#039;):&lt;br /&gt;
&lt;br /&gt;
 user@homebox ~ $ ssh &amp;#039;servername&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Or:&lt;br /&gt;
&lt;br /&gt;
user@homebox ~ $ ssh &amp;#039;ipaddress&amp;#039;&lt;br /&gt;
&lt;br /&gt;
If this is your first time connecting to &amp;#039;servername&amp;#039; (or &amp;#039;ipaddress&amp;#039;), upon establishing a connection with the server you&amp;#039;ll be asked if you want to add the servers fingerprint to the known_hosts file on your computer.&lt;br /&gt;
&lt;br /&gt;
Press &amp;#039;enter&amp;#039; to add the fingerprint.&lt;br /&gt;
&lt;br /&gt;
== Step 2 ==&lt;br /&gt;
Now that you&amp;#039;re connected to the server and verified that you have everything you need for access (hopefully), disconnect by typing &amp;#039;exit&amp;#039; . ==&lt;br /&gt;
&lt;br /&gt;
Examples&lt;br /&gt;
&lt;br /&gt;
user@servername ~ $ exit&lt;br /&gt;
&lt;br /&gt;
# You should be back at:&lt;br /&gt;
&lt;br /&gt;
user@homebox ~ $&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Step 3. Generate and Use Key ==&lt;br /&gt;
 &lt;br /&gt;
The next step is to copy a unique key generated on your &amp;#039;homebox&amp;#039; to the server you are connecting too. First, before you generate a new key, check to see if you already have a key:&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@homebox ~ $ ls -l ~/.ssh&lt;br /&gt;
total 20&lt;br /&gt;
-rwx--xr-x 1 user user  601 Feb  2 01:58 authorized_keys&lt;br /&gt;
-rwx--xr-x 1 user user  668 Jan  1 19:26 id_dsa&lt;br /&gt;
-rwx--xr-x 1 user user  599 Jan  1 19:26 id_dsa.pub&lt;br /&gt;
-rwx--xr-x 1 user user 6257 Feb  2 21:04 known_hosts&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The file we need to copy to the server is named id_dsa.pub. As you can see above, the file needed exists. You may or may not have other files in ~/.ssh as I do. If the key doesn&amp;#039;t exist, however, you can make one as follows:&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 user@homebox ~ $ ssh-keygen -t dsa&lt;br /&gt;
&lt;br /&gt;
Generating public/private dsa key pair.&lt;br /&gt;
Enter file in which to save the key (/home/user/.ssh/id_dsa):     # Press &amp;#039;enter&amp;#039; here&lt;br /&gt;
&lt;br /&gt;
 Enter passphrase (empty for no passphrase):     # Press &amp;#039;enter&amp;#039; here&lt;br /&gt;
&lt;br /&gt;
 Enter same passphrase again:     # Press &amp;#039;enter&amp;#039; here&lt;br /&gt;
&lt;br /&gt;
 Your identification has been saved in /home/user/.ssh/id_dsa.&lt;br /&gt;
 Your public key has been saved in /home/user/.ssh/id_dsa.pub.&lt;br /&gt;
 The key fingerprint is:&lt;br /&gt;
 6f:c3:cb:50:e6:e9:90:f0:0f:68:d2:10:56:eb:1d:91 user@host&lt;br /&gt;
&lt;br /&gt;
# Entering a password when asked during the key generation processes when prompted would require you to enter a  password each time you SSH/SCP to the server which defeats the purpose of this document.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Step 4. Copy the Key ==&lt;br /&gt;
Regardless whether you had a key ready to go or if you had to generate a new key, the next step is the same in either case. Now you&amp;#039;re ready to copy the key to the server. Do so like this:&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 user@homebox ~ $ ssh-copy-id -i ~/.ssh/id_dsa.pub user@&amp;#039;servername&amp;#039; (or &amp;#039;ipaddress&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
# If you are asked weather or not you wish to continue, say yes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Step 5. Test==&lt;br /&gt;
Now it&amp;#039;s time to test the setup. To do that, try to ssh to the server:&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 user@homebox ~ $ ssh &amp;#039;servername&amp;#039; (or &amp;#039;ipaddress&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
# You should log in to the remote host without being asked for a password.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Step 6. Protect Keys ==&lt;br /&gt;
You can now SSH or SCP to the remote host without having to enter a password at each connection. To make sure your public key stays secure from prying eyes, do the following to change permissions and restrict access on &amp;#039;homebox&amp;#039; and also on &amp;#039;servername&amp;#039; to ~/.ssh:&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 user@homebox ~ $ chmod 600 ~/.ssh/id_dsa ~/.ssh/id_dsa.pub&lt;br /&gt;
&lt;br /&gt;
===Verify the permissions on the files ===&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@homebox ~ $ ls -l ~/.ssh&lt;br /&gt;
-rw-------  1 user user  668 Feb  4 19:26 id_dsa&lt;br /&gt;
-rw-------  1 user user  599 Feb  4 19:26 id_dsa.pub&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. OpenSSH&lt;br /&gt;
&lt;br /&gt;
2. known_hosts&lt;br /&gt;
&lt;br /&gt;
3. fingerprint&lt;br /&gt;
&lt;br /&gt;
------&lt;br /&gt;
&lt;br /&gt;
== Comments ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nice post!&lt;br /&gt;
&lt;br /&gt;
I&amp;#039;ve noticed that I don&amp;#039;t have the command ssh-copy-id on my OS X machine (I didn&amp;#039;t even know one existed!). To achieve the same effect I usually do the following:&lt;br /&gt;
&lt;br /&gt;
 user@homebox ~ $ scp ~/.ssh/id_dsa.pub user@&amp;#039;servername&amp;#039;:.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
This is assuming you&amp;#039;ve already created a .ssh directory on your server &amp;#039;servername&amp;#039; (just ssh in as normal and `mkdir .ssh`). This also assumes that you don&amp;#039;t already have an `authorized_keys` file in the .ssh directory on your server. If you do just copy (scp) the id_dsa.pub file to a temporary file in your server&amp;#039;s home directory and then&lt;br /&gt;
&lt;br /&gt;
 user@homebox ~ $ scp .ssh/id_dsa.pub user@servername:homebox_dsa.pub&lt;br /&gt;
 user@homebox ~ $ ssh user@servername&lt;br /&gt;
 user@servername ~ $ cat homebox_dsa.pub &amp;gt;&amp;gt; .ssh/authorized_keys&lt;br /&gt;
 user@servername ~ $ rm homebox_dsa.pub &lt;br /&gt;
&lt;br /&gt;
If you&amp;#039;ve got it, the ssh-copy-id way is clearly a lot easier!&lt;br /&gt;
&lt;br /&gt;
~ Mark&lt;br /&gt;
&lt;br /&gt;
Hi Mark. Thanks for adding that bit. I don&amp;#039;t have access to a Mac (new one anyway) so that&amp;#039;s very nice to know.&lt;br /&gt;
&lt;br /&gt;
Seth&lt;br /&gt;
&lt;br /&gt;
Seth, I liked this post a lot, but felt the formatting and wording can be improved. I&amp;#039;ve made a few changes to the introduction.&lt;br /&gt;
&lt;br /&gt;
Xin&lt;br /&gt;
(I wish I had used my name for my username now!)&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
I found an elegant way of creating a new, or adding to an existing authorized_keys file with a single command:&lt;br /&gt;
&lt;br /&gt;
 ssh username@somedomain.com -n &amp;quot;echo `cat ~/.ssh/id_dsa.pub` &amp;gt;&amp;gt; ~/.ssh/authorized_keys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
I think it *is* a good practice to use pass phrases when using ssh keys. You can use ssh-agent on Linux and SSH Agent or SSHKeychain on Mac OS X, to avoid you to type your pass phrase everytime you access a remote host. Also, you can forward your keys using &amp;#039;ssh -A&amp;#039; if you need to hop onto some host in the middle.&lt;br /&gt;
&lt;br /&gt;
-- Igor&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
I&amp;#039;m using PUTTY (pageant) on a XP and on Vista.  I use 2048 RSA private key that is password protected.  I typically use PUTTY to connect, fyi: my purpose is really to be able to use git (which uses SSH) without having to log in every time I commit. Assuming you are too and have a key generated already...&lt;br /&gt;
&lt;br /&gt;
load key into PuttyGen (enter password for the key) in the window copy the &amp;quot;public key for pasting into OpenSSH...&amp;quot; append this to the ~/.ssh/authorized_keys.  &lt;br /&gt;
&lt;br /&gt;
One comment: when I used the append from above aka the elegant code, it did not add a \n at the end of the line aka didn&amp;#039;t work. I vi&amp;#039;d the file added a new line.&lt;br /&gt;
&lt;br /&gt;
--Eric&lt;/div&gt;</summary>
		<author><name>193.196.133.6</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Linux_Shell_Skripte_mit_ssh_und_scp_ohne_Passworteingabe&amp;diff=1822</id>
		<title>Linux Shell Skripte mit ssh und scp ohne Passworteingabe</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Linux_Shell_Skripte_mit_ssh_und_scp_ohne_Passworteingabe&amp;diff=1822"/>
		<updated>2010-02-08T09:05:00Z</updated>

		<summary type="html">&lt;p&gt;193.196.133.6: /* Step 6. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>193.196.133.6</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Linux_Shell_Skripte_mit_ssh_und_scp_ohne_Passworteingabe&amp;diff=1821</id>
		<title>Linux Shell Skripte mit ssh und scp ohne Passworteingabe</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Linux_Shell_Skripte_mit_ssh_und_scp_ohne_Passworteingabe&amp;diff=1821"/>
		<updated>2010-02-08T09:04:07Z</updated>

		<summary type="html">&lt;p&gt;193.196.133.6: /* Step 6. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;http://www.hostingrails.com/HowTo-SSH-SCP-without-a-password (Zugriff am 8.2.)&lt;br /&gt;
&lt;br /&gt;
HowTo SSH/SCP without a password.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a wiki article created by HostingRails users. Please login or signup to make edits.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This small HowTo will explain how to setup key-based authentication for password-less SSH and SCP usage.&lt;br /&gt;
&lt;br /&gt;
This HowTo does assume the reader has some basic knowledge of ssh and a terminal, and is using an operating system that implements SSH. If you&amp;#039;re using a Windows OS and want to use SSH, try PuTTY. For Putty, see key-based auth with Putty.&lt;br /&gt;
&lt;br /&gt;
In the examples that follow please substitute &amp;#039;servername&amp;#039; , &amp;#039;ipaddress&amp;#039; and &amp;#039;username&amp;#039; with the proper information for your setup. I have included a list of weblinks for the words in italic at the end of this document.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Step 1. Verify Connection ==&lt;br /&gt;
Verify that you can connect normally (using a password) to the server you intend to setup keys for:&lt;br /&gt;
&lt;br /&gt;
Examples&lt;br /&gt;
&lt;br /&gt;
 user@homebox ~ $ ssh username@&amp;#039;servername&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Or:&lt;br /&gt;
&lt;br /&gt;
 user@homebox ~ $ ssh username@&amp;#039;ipaddress&amp;#039;&lt;br /&gt;
&lt;br /&gt;
If your username is the same on both the client (&amp;#039;homebox&amp;#039;) and the server (&amp;#039;servername&amp;#039;):&lt;br /&gt;
&lt;br /&gt;
 user@homebox ~ $ ssh &amp;#039;servername&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Or:&lt;br /&gt;
&lt;br /&gt;
user@homebox ~ $ ssh &amp;#039;ipaddress&amp;#039;&lt;br /&gt;
&lt;br /&gt;
If this is your first time connecting to &amp;#039;servername&amp;#039; (or &amp;#039;ipaddress&amp;#039;), upon establishing a connection with the server you&amp;#039;ll be asked if you want to add the servers fingerprint to the known_hosts file on your computer.&lt;br /&gt;
&lt;br /&gt;
Press &amp;#039;enter&amp;#039; to add the fingerprint.&lt;br /&gt;
&lt;br /&gt;
== Step 2 ==&lt;br /&gt;
Now that you&amp;#039;re connected to the server and verified that you have everything you need for access (hopefully), disconnect by typing &amp;#039;exit&amp;#039; . ==&lt;br /&gt;
&lt;br /&gt;
Examples&lt;br /&gt;
&lt;br /&gt;
user@servername ~ $ exit&lt;br /&gt;
&lt;br /&gt;
# You should be back at:&lt;br /&gt;
&lt;br /&gt;
user@homebox ~ $&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Step 3. Generate and Use Key ==&lt;br /&gt;
 &lt;br /&gt;
The next step is to copy a unique key generated on your &amp;#039;homebox&amp;#039; to the server you are connecting too. First, before you generate a new key, check to see if you already have a key:&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@homebox ~ $ ls -l ~/.ssh&lt;br /&gt;
total 20&lt;br /&gt;
-rwx--xr-x 1 user user  601 Feb  2 01:58 authorized_keys&lt;br /&gt;
-rwx--xr-x 1 user user  668 Jan  1 19:26 id_dsa&lt;br /&gt;
-rwx--xr-x 1 user user  599 Jan  1 19:26 id_dsa.pub&lt;br /&gt;
-rwx--xr-x 1 user user 6257 Feb  2 21:04 known_hosts&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The file we need to copy to the server is named id_dsa.pub. As you can see above, the file needed exists. You may or may not have other files in ~/.ssh as I do. If the key doesn&amp;#039;t exist, however, you can make one as follows:&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 user@homebox ~ $ ssh-keygen -t dsa&lt;br /&gt;
&lt;br /&gt;
Generating public/private dsa key pair.&lt;br /&gt;
Enter file in which to save the key (/home/user/.ssh/id_dsa):     # Press &amp;#039;enter&amp;#039; here&lt;br /&gt;
&lt;br /&gt;
 Enter passphrase (empty for no passphrase):     # Press &amp;#039;enter&amp;#039; here&lt;br /&gt;
&lt;br /&gt;
 Enter same passphrase again:     # Press &amp;#039;enter&amp;#039; here&lt;br /&gt;
&lt;br /&gt;
 Your identification has been saved in /home/user/.ssh/id_dsa.&lt;br /&gt;
 Your public key has been saved in /home/user/.ssh/id_dsa.pub.&lt;br /&gt;
 The key fingerprint is:&lt;br /&gt;
 6f:c3:cb:50:e6:e9:90:f0:0f:68:d2:10:56:eb:1d:91 user@host&lt;br /&gt;
&lt;br /&gt;
# Entering a password when asked during the key generation processes when prompted would require you to enter a  password each time you SSH/SCP to the server which defeats the purpose of this document.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Step 4. Copy the Key ==&lt;br /&gt;
Regardless whether you had a key ready to go or if you had to generate a new key, the next step is the same in either case. Now you&amp;#039;re ready to copy the key to the server. Do so like this:&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 user@homebox ~ $ ssh-copy-id -i ~/.ssh/id_dsa.pub user@&amp;#039;servername&amp;#039; (or &amp;#039;ipaddress&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
# If you are asked weather or not you wish to continue, say yes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Step 5. Test==&lt;br /&gt;
Now it&amp;#039;s time to test the setup. To do that, try to ssh to the server:&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 user@homebox ~ $ ssh &amp;#039;servername&amp;#039; (or &amp;#039;ipaddress&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
# You should log in to the remote host without being asked for a password.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Step 6. Protect Key ==&lt;br /&gt;
You can now SSH or SCP to the remote host without having to enter a password at each connection. To make sure your public key stays secure from prying eyes, do the following to change permissions and restrict access on &amp;#039;homebox&amp;#039; and also on &amp;#039;servername&amp;#039; to ~/.ssh:&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 user@homebox ~ $ chmod 600 ~/.ssh/id_dsa ~/.ssh/id_dsa.pub&lt;br /&gt;
&lt;br /&gt;
===Verify the permissions on the files ===&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@homebox ~ $ ls -l ~/.ssh&lt;br /&gt;
-rw-------  1 user user  668 Feb  4 19:26 id_dsa&lt;br /&gt;
-rw-------  1 user user  599 Feb  4 19:26 id_dsa.pub&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. OpenSSH&lt;br /&gt;
&lt;br /&gt;
2. known_hosts&lt;br /&gt;
&lt;br /&gt;
3. fingerprint&lt;br /&gt;
&lt;br /&gt;
------&lt;br /&gt;
&lt;br /&gt;
== Comments ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nice post!&lt;br /&gt;
&lt;br /&gt;
I&amp;#039;ve noticed that I don&amp;#039;t have the command ssh-copy-id on my OS X machine (I didn&amp;#039;t even know one existed!). To achieve the same effect I usually do the following:&lt;br /&gt;
&lt;br /&gt;
 user@homebox ~ $ scp ~/.ssh/id_dsa.pub user@&amp;#039;servername&amp;#039;:.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
This is assuming you&amp;#039;ve already created a .ssh directory on your server &amp;#039;servername&amp;#039; (just ssh in as normal and `mkdir .ssh`). This also assumes that you don&amp;#039;t already have an `authorized_keys` file in the .ssh directory on your server. If you do just copy (scp) the id_dsa.pub file to a temporary file in your server&amp;#039;s home directory and then&lt;br /&gt;
&lt;br /&gt;
 user@homebox ~ $ scp .ssh/id_dsa.pub user@servername:homebox_dsa.pub&lt;br /&gt;
 user@homebox ~ $ ssh user@servername&lt;br /&gt;
 user@servername ~ $ cat homebox_dsa.pub &amp;gt;&amp;gt; .ssh/authorized_keys&lt;br /&gt;
 user@servername ~ $ rm homebox_dsa.pub &lt;br /&gt;
&lt;br /&gt;
If you&amp;#039;ve got it, the ssh-copy-id way is clearly a lot easier!&lt;br /&gt;
&lt;br /&gt;
~ Mark&lt;br /&gt;
&lt;br /&gt;
Hi Mark. Thanks for adding that bit. I don&amp;#039;t have access to a Mac (new one anyway) so that&amp;#039;s very nice to know.&lt;br /&gt;
&lt;br /&gt;
Seth&lt;br /&gt;
&lt;br /&gt;
Seth, I liked this post a lot, but felt the formatting and wording can be improved. I&amp;#039;ve made a few changes to the introduction.&lt;br /&gt;
&lt;br /&gt;
Xin&lt;br /&gt;
(I wish I had used my name for my username now!)&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
I found an elegant way of creating a new, or adding to an existing authorized_keys file with a single command:&lt;br /&gt;
&lt;br /&gt;
 ssh username@somedomain.com -n &amp;quot;echo `cat ~/.ssh/id_dsa.pub` &amp;gt;&amp;gt; ~/.ssh/authorized_keys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
I think it *is* a good practice to use pass phrases when using ssh keys. You can use ssh-agent on Linux and SSH Agent or SSHKeychain on Mac OS X, to avoid you to type your pass phrase everytime you access a remote host. Also, you can forward your keys using &amp;#039;ssh -A&amp;#039; if you need to hop onto some host in the middle.&lt;br /&gt;
&lt;br /&gt;
-- Igor&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
I&amp;#039;m using PUTTY (pageant) on a XP and on Vista.  I use 2048 RSA private key that is password protected.  I typically use PUTTY to connect, fyi: my purpose is really to be able to use git (which uses SSH) without having to log in every time I commit. Assuming you are too and have a key generated already...&lt;br /&gt;
&lt;br /&gt;
load key into PuttyGen (enter password for the key) in the window copy the &amp;quot;public key for pasting into OpenSSH...&amp;quot; append this to the ~/.ssh/authorized_keys.  &lt;br /&gt;
&lt;br /&gt;
One comment: when I used the append from above aka the elegant code, it did not add a \n at the end of the line aka didn&amp;#039;t work. I vi&amp;#039;d the file added a new line.&lt;br /&gt;
&lt;br /&gt;
--Eric&lt;/div&gt;</summary>
		<author><name>193.196.133.6</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Linux_Shell_Skripte_mit_ssh_und_scp_ohne_Passworteingabe&amp;diff=1820</id>
		<title>Linux Shell Skripte mit ssh und scp ohne Passworteingabe</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Linux_Shell_Skripte_mit_ssh_und_scp_ohne_Passworteingabe&amp;diff=1820"/>
		<updated>2010-02-08T09:03:25Z</updated>

		<summary type="html">&lt;p&gt;193.196.133.6: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;http://www.hostingrails.com/HowTo-SSH-SCP-without-a-password (Zugriff am 8.2.)&lt;br /&gt;
&lt;br /&gt;
HowTo SSH/SCP without a password.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a wiki article created by HostingRails users. Please login or signup to make edits.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This small HowTo will explain how to setup key-based authentication for password-less SSH and SCP usage.&lt;br /&gt;
&lt;br /&gt;
This HowTo does assume the reader has some basic knowledge of ssh and a terminal, and is using an operating system that implements SSH. If you&amp;#039;re using a Windows OS and want to use SSH, try PuTTY. For Putty, see key-based auth with Putty.&lt;br /&gt;
&lt;br /&gt;
In the examples that follow please substitute &amp;#039;servername&amp;#039; , &amp;#039;ipaddress&amp;#039; and &amp;#039;username&amp;#039; with the proper information for your setup. I have included a list of weblinks for the words in italic at the end of this document.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Step 1. Verify Connection ==&lt;br /&gt;
Verify that you can connect normally (using a password) to the server you intend to setup keys for:&lt;br /&gt;
&lt;br /&gt;
Examples&lt;br /&gt;
&lt;br /&gt;
 user@homebox ~ $ ssh username@&amp;#039;servername&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Or:&lt;br /&gt;
&lt;br /&gt;
 user@homebox ~ $ ssh username@&amp;#039;ipaddress&amp;#039;&lt;br /&gt;
&lt;br /&gt;
If your username is the same on both the client (&amp;#039;homebox&amp;#039;) and the server (&amp;#039;servername&amp;#039;):&lt;br /&gt;
&lt;br /&gt;
 user@homebox ~ $ ssh &amp;#039;servername&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Or:&lt;br /&gt;
&lt;br /&gt;
user@homebox ~ $ ssh &amp;#039;ipaddress&amp;#039;&lt;br /&gt;
&lt;br /&gt;
If this is your first time connecting to &amp;#039;servername&amp;#039; (or &amp;#039;ipaddress&amp;#039;), upon establishing a connection with the server you&amp;#039;ll be asked if you want to add the servers fingerprint to the known_hosts file on your computer.&lt;br /&gt;
&lt;br /&gt;
Press &amp;#039;enter&amp;#039; to add the fingerprint.&lt;br /&gt;
&lt;br /&gt;
== Step 2 ==&lt;br /&gt;
Now that you&amp;#039;re connected to the server and verified that you have everything you need for access (hopefully), disconnect by typing &amp;#039;exit&amp;#039; . ==&lt;br /&gt;
&lt;br /&gt;
Examples&lt;br /&gt;
&lt;br /&gt;
user@servername ~ $ exit&lt;br /&gt;
&lt;br /&gt;
# You should be back at:&lt;br /&gt;
&lt;br /&gt;
user@homebox ~ $&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Step 3. Generate and Use Key ==&lt;br /&gt;
 &lt;br /&gt;
The next step is to copy a unique key generated on your &amp;#039;homebox&amp;#039; to the server you are connecting too. First, before you generate a new key, check to see if you already have a key:&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@homebox ~ $ ls -l ~/.ssh&lt;br /&gt;
total 20&lt;br /&gt;
-rwx--xr-x 1 user user  601 Feb  2 01:58 authorized_keys&lt;br /&gt;
-rwx--xr-x 1 user user  668 Jan  1 19:26 id_dsa&lt;br /&gt;
-rwx--xr-x 1 user user  599 Jan  1 19:26 id_dsa.pub&lt;br /&gt;
-rwx--xr-x 1 user user 6257 Feb  2 21:04 known_hosts&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The file we need to copy to the server is named id_dsa.pub. As you can see above, the file needed exists. You may or may not have other files in ~/.ssh as I do. If the key doesn&amp;#039;t exist, however, you can make one as follows:&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 user@homebox ~ $ ssh-keygen -t dsa&lt;br /&gt;
&lt;br /&gt;
Generating public/private dsa key pair.&lt;br /&gt;
Enter file in which to save the key (/home/user/.ssh/id_dsa):     # Press &amp;#039;enter&amp;#039; here&lt;br /&gt;
&lt;br /&gt;
 Enter passphrase (empty for no passphrase):     # Press &amp;#039;enter&amp;#039; here&lt;br /&gt;
&lt;br /&gt;
 Enter same passphrase again:     # Press &amp;#039;enter&amp;#039; here&lt;br /&gt;
&lt;br /&gt;
 Your identification has been saved in /home/user/.ssh/id_dsa.&lt;br /&gt;
 Your public key has been saved in /home/user/.ssh/id_dsa.pub.&lt;br /&gt;
 The key fingerprint is:&lt;br /&gt;
 6f:c3:cb:50:e6:e9:90:f0:0f:68:d2:10:56:eb:1d:91 user@host&lt;br /&gt;
&lt;br /&gt;
# Entering a password when asked during the key generation processes when prompted would require you to enter a  password each time you SSH/SCP to the server which defeats the purpose of this document.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Step 4. Copy the Key ==&lt;br /&gt;
Regardless whether you had a key ready to go or if you had to generate a new key, the next step is the same in either case. Now you&amp;#039;re ready to copy the key to the server. Do so like this:&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 user@homebox ~ $ ssh-copy-id -i ~/.ssh/id_dsa.pub user@&amp;#039;servername&amp;#039; (or &amp;#039;ipaddress&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
# If you are asked weather or not you wish to continue, say yes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Step 5. Test==&lt;br /&gt;
Now it&amp;#039;s time to test the setup. To do that, try to ssh to the server:&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 user@homebox ~ $ ssh &amp;#039;servername&amp;#039; (or &amp;#039;ipaddress&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
# You should log in to the remote host without being asked for a password.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Step 6. ==&lt;br /&gt;
You can now SSH or SCP to the remote host without having to enter a password at each connection. To make sure your public key stays secure from prying eyes, do the following to change permissions and restrict access on &amp;#039;homebox&amp;#039; and also on &amp;#039;servername&amp;#039; to ~/.ssh:&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 user@homebox ~ $ chmod 600 ~/.ssh/id_dsa ~/.ssh/id_dsa.pub&lt;br /&gt;
&lt;br /&gt;
===Verify the permissions on the files ===&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@homebox ~ $ ls -l ~/.ssh&lt;br /&gt;
-rw-------  1 user user  668 Feb  4 19:26 id_dsa&lt;br /&gt;
-rw-------  1 user user  599 Feb  4 19:26 id_dsa.pub&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. OpenSSH&lt;br /&gt;
&lt;br /&gt;
2. known_hosts&lt;br /&gt;
&lt;br /&gt;
3. fingerprint&lt;br /&gt;
&lt;br /&gt;
------&lt;br /&gt;
&lt;br /&gt;
== Comments ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nice post!&lt;br /&gt;
&lt;br /&gt;
I&amp;#039;ve noticed that I don&amp;#039;t have the command ssh-copy-id on my OS X machine (I didn&amp;#039;t even know one existed!). To achieve the same effect I usually do the following:&lt;br /&gt;
&lt;br /&gt;
 user@homebox ~ $ scp ~/.ssh/id_dsa.pub user@&amp;#039;servername&amp;#039;:.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
This is assuming you&amp;#039;ve already created a .ssh directory on your server &amp;#039;servername&amp;#039; (just ssh in as normal and `mkdir .ssh`). This also assumes that you don&amp;#039;t already have an `authorized_keys` file in the .ssh directory on your server. If you do just copy (scp) the id_dsa.pub file to a temporary file in your server&amp;#039;s home directory and then&lt;br /&gt;
&lt;br /&gt;
 user@homebox ~ $ scp .ssh/id_dsa.pub user@servername:homebox_dsa.pub&lt;br /&gt;
 user@homebox ~ $ ssh user@servername&lt;br /&gt;
 user@servername ~ $ cat homebox_dsa.pub &amp;gt;&amp;gt; .ssh/authorized_keys&lt;br /&gt;
 user@servername ~ $ rm homebox_dsa.pub &lt;br /&gt;
&lt;br /&gt;
If you&amp;#039;ve got it, the ssh-copy-id way is clearly a lot easier!&lt;br /&gt;
&lt;br /&gt;
~ Mark&lt;br /&gt;
&lt;br /&gt;
Hi Mark. Thanks for adding that bit. I don&amp;#039;t have access to a Mac (new one anyway) so that&amp;#039;s very nice to know.&lt;br /&gt;
&lt;br /&gt;
Seth&lt;br /&gt;
&lt;br /&gt;
Seth, I liked this post a lot, but felt the formatting and wording can be improved. I&amp;#039;ve made a few changes to the introduction.&lt;br /&gt;
&lt;br /&gt;
Xin&lt;br /&gt;
(I wish I had used my name for my username now!)&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
I found an elegant way of creating a new, or adding to an existing authorized_keys file with a single command:&lt;br /&gt;
&lt;br /&gt;
 ssh username@somedomain.com -n &amp;quot;echo `cat ~/.ssh/id_dsa.pub` &amp;gt;&amp;gt; ~/.ssh/authorized_keys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
I think it *is* a good practice to use pass phrases when using ssh keys. You can use ssh-agent on Linux and SSH Agent or SSHKeychain on Mac OS X, to avoid you to type your pass phrase everytime you access a remote host. Also, you can forward your keys using &amp;#039;ssh -A&amp;#039; if you need to hop onto some host in the middle.&lt;br /&gt;
&lt;br /&gt;
-- Igor&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
I&amp;#039;m using PUTTY (pageant) on a XP and on Vista.  I use 2048 RSA private key that is password protected.  I typically use PUTTY to connect, fyi: my purpose is really to be able to use git (which uses SSH) without having to log in every time I commit. Assuming you are too and have a key generated already...&lt;br /&gt;
&lt;br /&gt;
load key into PuttyGen (enter password for the key) in the window copy the &amp;quot;public key for pasting into OpenSSH...&amp;quot; append this to the ~/.ssh/authorized_keys.  &lt;br /&gt;
&lt;br /&gt;
One comment: when I used the append from above aka the elegant code, it did not add a \n at the end of the line aka didn&amp;#039;t work. I vi&amp;#039;d the file added a new line.&lt;br /&gt;
&lt;br /&gt;
--Eric&lt;/div&gt;</summary>
		<author><name>193.196.133.6</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Linux_Shell_Skripte_mit_ssh_und_scp_ohne_Passworteingabe&amp;diff=1819</id>
		<title>Linux Shell Skripte mit ssh und scp ohne Passworteingabe</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Linux_Shell_Skripte_mit_ssh_und_scp_ohne_Passworteingabe&amp;diff=1819"/>
		<updated>2010-02-08T08:59:07Z</updated>

		<summary type="html">&lt;p&gt;193.196.133.6: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;http://www.hostingrails.com/HowTo-SSH-SCP-without-a-password (Zugriff am 8.2.)&lt;br /&gt;
&lt;br /&gt;
HowTo SSH/SCP without a password.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a wiki article created by HostingRails users. Please login or signup to make edits.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This small HowTo will explain how to setup key-based authentication for password-less SSH and SCP usage.&lt;br /&gt;
&lt;br /&gt;
This HowTo does assume the reader has some basic knowledge of ssh and a terminal, and is using an operating system that implements SSH. If you&amp;#039;re using a Windows OS and want to use SSH, try PuTTY. For Putty, see key-based auth with Putty.&lt;br /&gt;
&lt;br /&gt;
In the examples that follow please substitute &amp;#039;servername&amp;#039; , &amp;#039;ipaddress&amp;#039; and &amp;#039;username&amp;#039; with the proper information for your setup. I have included a list of weblinks for the words in italic at the end of this document.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Step 1. ==&lt;br /&gt;
Verify that you can connect normally (using a password) to the server you intend to setup keys for:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 user@homebox ~ $ ssh username@&amp;#039;servername&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Or:&lt;br /&gt;
&lt;br /&gt;
 user@homebox ~ $ ssh username@&amp;#039;ipaddress&amp;#039;&lt;br /&gt;
&lt;br /&gt;
If your username is the same on both the client (&amp;#039;homebox&amp;#039;) and the server (&amp;#039;servername&amp;#039;):&lt;br /&gt;
&lt;br /&gt;
 user@homebox ~ $ ssh &amp;#039;servername&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Or:&lt;br /&gt;
&lt;br /&gt;
user@homebox ~ $ ssh &amp;#039;ipaddress&amp;#039;&lt;br /&gt;
&lt;br /&gt;
If this is your first time connecting to &amp;#039;servername&amp;#039; (or &amp;#039;ipaddress&amp;#039;), upon establishing a connection with the server you&amp;#039;ll be asked if you want to add the servers fingerprint to the known_hosts file on your computer.&lt;br /&gt;
&lt;br /&gt;
Press &amp;#039;enter&amp;#039; to add the fingerprint.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Step 2 ==&lt;br /&gt;
Now that you&amp;#039;re connected to the server and verified that you have everything you need for access (hopefully), disconnect by typing &amp;#039;exit&amp;#039; . ==&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
user@servername ~ $ exit&lt;br /&gt;
&lt;br /&gt;
# You should be back at:&lt;br /&gt;
&lt;br /&gt;
user@homebox ~ $&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Step 3. ==&lt;br /&gt;
 &lt;br /&gt;
The next step is to copy a unique key generated on your &amp;#039;homebox&amp;#039; to the server you are connecting too. First, before you generate a new key, check to see if you already have a key:&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@homebox ~ $ ls -l ~/.ssh&lt;br /&gt;
total 20&lt;br /&gt;
-rwx--xr-x 1 user user  601 Feb  2 01:58 authorized_keys&lt;br /&gt;
-rwx--xr-x 1 user user  668 Jan  1 19:26 id_dsa&lt;br /&gt;
-rwx--xr-x 1 user user  599 Jan  1 19:26 id_dsa.pub&lt;br /&gt;
-rwx--xr-x 1 user user 6257 Feb  2 21:04 known_hosts&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The file we need to copy to the server is named id_dsa.pub. As you can see above, the file needed exists. You may or may not have other files in ~/.ssh as I do. If the key doesn&amp;#039;t exist, however, you can make one as follows:&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 user@homebox ~ $ ssh-keygen -t dsa&lt;br /&gt;
&lt;br /&gt;
Generating public/private dsa key pair.&lt;br /&gt;
Enter file in which to save the key (/home/user/.ssh/id_dsa):     # Press &amp;#039;enter&amp;#039; here&lt;br /&gt;
&lt;br /&gt;
 Enter passphrase (empty for no passphrase):     # Press &amp;#039;enter&amp;#039; here&lt;br /&gt;
&lt;br /&gt;
 Enter same passphrase again:     # Press &amp;#039;enter&amp;#039; here&lt;br /&gt;
&lt;br /&gt;
 Your identification has been saved in /home/user/.ssh/id_dsa.&lt;br /&gt;
 Your public key has been saved in /home/user/.ssh/id_dsa.pub.&lt;br /&gt;
 The key fingerprint is:&lt;br /&gt;
 6f:c3:cb:50:e6:e9:90:f0:0f:68:d2:10:56:eb:1d:91 user@host&lt;br /&gt;
&lt;br /&gt;
# Entering a password when asked during the key generation processes when prompted would require you to enter a  password each time you SSH/SCP to the server which defeats the purpose of this document.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Step 4. ==&lt;br /&gt;
Regardless whether you had a key ready to go or if you had to generate a new key, the next step is the same in either case. Now you&amp;#039;re ready to copy the key to the server. Do so like this:&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
 user@homebox ~ $ ssh-copy-id -i ~/.ssh/id_dsa.pub user@&amp;#039;servername&amp;#039; (or &amp;#039;ipaddress&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
# If you are asked weather or not you wish to continue, say yes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Step 5. ==&lt;br /&gt;
Now it&amp;#039;s time to test the setup. To do that, try to ssh to the server:&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
 user@homebox ~ $ ssh &amp;#039;servername&amp;#039; (or &amp;#039;ipaddress&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
# You should log in to the remote host without being asked for a password.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Step 6. ==&lt;br /&gt;
You can now SSH or SCP to the remote host without having to enter a password at each connection. To make sure your public key stays secure from prying eyes, do the following to change permissions and restrict access on &amp;#039;homebox&amp;#039; and also on &amp;#039;servername&amp;#039; to ~/.ssh:&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
 user@homebox ~ $ chmod 600 ~/.ssh/id_dsa ~/.ssh/id_dsa.pub&lt;br /&gt;
&lt;br /&gt;
===Verify the permissions on the files ===&lt;br /&gt;
&lt;br /&gt;
==== Example ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@homebox ~ $ ls -l ~/.ssh&lt;br /&gt;
-rw-------  1 user user  668 Feb  4 19:26 id_dsa&lt;br /&gt;
-rw-------  1 user user  599 Feb  4 19:26 id_dsa.pub&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Links&lt;br /&gt;
&lt;br /&gt;
1. OpenSSH&lt;br /&gt;
&lt;br /&gt;
2. known_hosts&lt;br /&gt;
&lt;br /&gt;
3. fingerprint&lt;br /&gt;
&lt;br /&gt;
------&lt;br /&gt;
Nice post!&lt;br /&gt;
&lt;br /&gt;
I&amp;#039;ve noticed that I don&amp;#039;t have the command ssh-copy-id on my OS X machine (I didn&amp;#039;t even know one existed!). To achieve the same effect I usually do the following:&lt;br /&gt;
&lt;br /&gt;
 user@homebox ~ $ scp ~/.ssh/id_dsa.pub user@&amp;#039;servername&amp;#039;:.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
This is assuming you&amp;#039;ve already created a .ssh directory on your server &amp;#039;servername&amp;#039; (just ssh in as normal and `mkdir .ssh`). This also assumes that you don&amp;#039;t already have an `authorized_keys` file in the .ssh directory on your server. If you do just copy (scp) the id_dsa.pub file to a temporary file in your server&amp;#039;s home directory and then&lt;br /&gt;
&lt;br /&gt;
 user@homebox ~ $ scp .ssh/id_dsa.pub user@servername:homebox_dsa.pub&lt;br /&gt;
 user@homebox ~ $ ssh user@servername&lt;br /&gt;
 user@servername ~ $ cat homebox_dsa.pub &amp;gt;&amp;gt; .ssh/authorized_keys&lt;br /&gt;
 user@servername ~ $ rm homebox_dsa.pub &lt;br /&gt;
&lt;br /&gt;
If you&amp;#039;ve got it, the ssh-copy-id way is clearly a lot easier!&lt;br /&gt;
&lt;br /&gt;
~ Mark&lt;br /&gt;
&lt;br /&gt;
Hi Mark. Thanks for adding that bit. I don&amp;#039;t have access to a Mac (new one anyway) so that&amp;#039;s very nice to know.&lt;br /&gt;
&lt;br /&gt;
Seth&lt;br /&gt;
&lt;br /&gt;
Seth, I liked this post a lot, but felt the formatting and wording can be improved. I&amp;#039;ve made a few changes to the introduction.&lt;br /&gt;
&lt;br /&gt;
Xin&lt;br /&gt;
(I wish I had used my name for my username now!)&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
I found an elegant way of creating a new, or adding to an existing authorized_keys file with a single command:&lt;br /&gt;
&lt;br /&gt;
 ssh username@somedomain.com -n &amp;quot;echo `cat ~/.ssh/id_dsa.pub` &amp;gt;&amp;gt; ~/.ssh/authorized_keys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
I think it *is* a good practice to use pass phrases when using ssh keys. You can use ssh-agent on Linux and SSH Agent or SSHKeychain on Mac OS X, to avoid you to type your pass phrase everytime you access a remote host. Also, you can forward your keys using &amp;#039;ssh -A&amp;#039; if you need to hop onto some host in the middle.&lt;br /&gt;
&lt;br /&gt;
-- Igor&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
I&amp;#039;m using PUTTY (pageant) on a XP and on Vista.  I use 2048 RSA private key that is password protected.  I typically use PUTTY to connect, fyi: my purpose is really to be able to use git (which uses SSH) without having to log in every time I commit. Assuming you are too and have a key generated already...&lt;br /&gt;
&lt;br /&gt;
load key into PuttyGen (enter password for the key) in the window copy the &amp;quot;public key for pasting into OpenSSH...&amp;quot; append this to the ~/.ssh/authorized_keys.  &lt;br /&gt;
&lt;br /&gt;
One comment: when I used the append from above aka the elegant code, it did not add a \n at the end of the line aka didn&amp;#039;t work. I vi&amp;#039;d the file added a new line.&lt;br /&gt;
&lt;br /&gt;
--Eric&lt;/div&gt;</summary>
		<author><name>193.196.133.6</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Linux_Shell_Skripte_mit_ssh_und_scp_ohne_Passworteingabe&amp;diff=1818</id>
		<title>Linux Shell Skripte mit ssh und scp ohne Passworteingabe</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Linux_Shell_Skripte_mit_ssh_und_scp_ohne_Passworteingabe&amp;diff=1818"/>
		<updated>2010-02-08T08:52:02Z</updated>

		<summary type="html">&lt;p&gt;193.196.133.6: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;http://www.hostingrails.com/HowTo-SSH-SCP-without-a-password (Zugriff am 8.2.)&lt;br /&gt;
&lt;br /&gt;
HowTo SSH/SCP without a password.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a wiki article created by HostingRails users. Please login or signup to make edits.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This small HowTo will explain how to setup key-based authentication for password-less SSH and SCP usage.&lt;br /&gt;
&lt;br /&gt;
This HowTo does assume the reader has some basic knowledge of ssh and a terminal, and is using an operating system that implements SSH. If you&amp;#039;re using a Windows OS and want to use SSH, try PuTTY. For Putty, see key-based auth with Putty.&lt;br /&gt;
&lt;br /&gt;
In the examples that follow please substitute &amp;#039;servername&amp;#039; , &amp;#039;ipaddress&amp;#039; and &amp;#039;username&amp;#039; with the proper information for your setup. I have included a list of weblinks for the words in italic at the end of this document.&lt;br /&gt;
&lt;br /&gt;
Step 1. Verify that you can connect normally (using a password) to the server you intend to setup keys for:&lt;br /&gt;
&lt;br /&gt;
#### Examples ####&lt;br /&gt;
&lt;br /&gt;
user@homebox ~ $ ssh username@&amp;#039;servername&amp;#039;&lt;br /&gt;
&lt;br /&gt;
# Or:&lt;br /&gt;
&lt;br /&gt;
user@homebox ~ $ ssh username@&amp;#039;ipaddress&amp;#039;&lt;br /&gt;
&lt;br /&gt;
# If your username is the same on both the client (&amp;#039;homebox&amp;#039;) and the server (&amp;#039;servername&amp;#039;):&lt;br /&gt;
&lt;br /&gt;
user@homebox ~ $ ssh &amp;#039;servername&amp;#039;&lt;br /&gt;
&lt;br /&gt;
# Or:&lt;br /&gt;
&lt;br /&gt;
user@homebox ~ $ ssh &amp;#039;ipaddress&amp;#039;&lt;br /&gt;
&lt;br /&gt;
# If this is your first time connecting to &amp;#039;servername&amp;#039; (or &amp;#039;ipaddress&amp;#039;), upon establishing a connection with the&lt;br /&gt;
# server you&amp;#039;ll be asked if you want to add the servers fingerprint to the known_hosts file on your computer.&lt;br /&gt;
# Press &amp;#039;enter&amp;#039; to add the fingerprint.&lt;br /&gt;
&lt;br /&gt;
Step 2. Now that you&amp;#039;re connected to the server and verified that you have everything you need for access (hopefully), disconnect by typing &amp;#039;exit&amp;#039; .&lt;br /&gt;
&lt;br /&gt;
#### Examples ####&lt;br /&gt;
&lt;br /&gt;
user@servername ~ $ exit&lt;br /&gt;
&lt;br /&gt;
# You should be back at:&lt;br /&gt;
&lt;br /&gt;
user@homebox ~ $&lt;br /&gt;
&lt;br /&gt;
Step 3. The next step is to copy a unique key generated on your &amp;#039;homebox&amp;#039; to the server you are connecting too. First, before you generate a new key, check to see if you already have a key:&lt;br /&gt;
&lt;br /&gt;
#### Example ####&lt;br /&gt;
&lt;br /&gt;
user@homebox ~ $ ls -l ~/.ssh&lt;br /&gt;
total 20&lt;br /&gt;
-rwx--xr-x 1 user user  601 Feb  2 01:58 authorized_keys&lt;br /&gt;
-rwx--xr-x 1 user user  668 Jan  1 19:26 id_dsa&lt;br /&gt;
-rwx--xr-x 1 user user  599 Jan  1 19:26 id_dsa.pub&lt;br /&gt;
-rwx--xr-x 1 user user 6257 Feb  2 21:04 known_hosts&lt;br /&gt;
&lt;br /&gt;
# The file we need to copy to the server is named id_dsa.pub. As you can see above, the file needed exists. You may or may not have other files in ~/.ssh as I do. If the key doesn&amp;#039;t exist, however, you can make one as follows:&lt;br /&gt;
&lt;br /&gt;
#### Example ####&lt;br /&gt;
&lt;br /&gt;
user@homebox ~ $ ssh-keygen -t dsa&lt;br /&gt;
Generating public/private dsa key pair.&lt;br /&gt;
Enter file in which to save the key (/home/user/.ssh/id_dsa):     # Press &amp;#039;enter&amp;#039; here&lt;br /&gt;
Enter passphrase (empty for no passphrase):     # Press &amp;#039;enter&amp;#039; here&lt;br /&gt;
Enter same passphrase again:     # Press &amp;#039;enter&amp;#039; here&lt;br /&gt;
Your identification has been saved in /home/user/.ssh/id_dsa.&lt;br /&gt;
Your public key has been saved in /home/user/.ssh/id_dsa.pub.&lt;br /&gt;
The key fingerprint is:&lt;br /&gt;
6f:c3:cb:50:e6:e9:90:f0:0f:68:d2:10:56:eb:1d:91 user@host&lt;br /&gt;
&lt;br /&gt;
# Entering a password when asked during the key generation processes when prompted would require you to enter a  password each time you SSH/SCP to the server which defeats the purpose of this document.&lt;br /&gt;
&lt;br /&gt;
Step 4. Regardless whether you had a key ready to go or if you had to generate a new key, the next step is the same in either case. Now you&amp;#039;re ready to copy the key to the server. Do so like this:&lt;br /&gt;
&lt;br /&gt;
#### Example ####&lt;br /&gt;
&lt;br /&gt;
user@homebox ~ $ ssh-copy-id -i ~/.ssh/id_dsa.pub user@&amp;#039;servername&amp;#039; (or &amp;#039;ipaddress&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
# If you are asked weather or not you wish to continue, say yes.&lt;br /&gt;
&lt;br /&gt;
Step 5. Now it&amp;#039;s time to test the setup. To do that, try to ssh to the server:&lt;br /&gt;
&lt;br /&gt;
#### Example ####&lt;br /&gt;
&lt;br /&gt;
user@homebox ~ $ ssh &amp;#039;servername&amp;#039; (or &amp;#039;ipaddress&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
# You should log in to the remote host without being asked for a password.&lt;br /&gt;
&lt;br /&gt;
Step 6. You can now SSH or SCP to the remote host without having to enter a password at each connection. To make sure your public key stays secure from prying eyes, do the following to change permissions and restrict access on &amp;#039;homebox&amp;#039; and also on &amp;#039;servername&amp;#039; to ~/.ssh:&lt;br /&gt;
&lt;br /&gt;
#### Example ####&lt;br /&gt;
&lt;br /&gt;
user@homebox ~ $ chmod 600 ~/.ssh/id_dsa ~/.ssh/id_dsa.pub&lt;br /&gt;
&lt;br /&gt;
# Verify the permissions on the files:&lt;br /&gt;
&lt;br /&gt;
#### Example ####&lt;br /&gt;
&lt;br /&gt;
user@homebox ~ $ ls -l ~/.ssh&lt;br /&gt;
-rw-------  1 user user  668 Feb  4 19:26 id_dsa&lt;br /&gt;
-rw-------  1 user user  599 Feb  4 19:26 id_dsa.pub&lt;br /&gt;
&lt;br /&gt;
Links&lt;br /&gt;
&lt;br /&gt;
1. OpenSSH&lt;br /&gt;
&lt;br /&gt;
2. known_hosts&lt;br /&gt;
&lt;br /&gt;
3. fingerprint&lt;br /&gt;
&lt;br /&gt;
------&lt;br /&gt;
Nice post!&lt;br /&gt;
&lt;br /&gt;
I&amp;#039;ve noticed that I don&amp;#039;t have the command ssh-copy-id on my OS X machine (I didn&amp;#039;t even know one existed!). To achieve the same effect I usually do the following:&lt;br /&gt;
&lt;br /&gt;
user@homebox ~ $ scp ~/.ssh/id_dsa.pub user@&amp;#039;servername&amp;#039;:.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
This is assuming you&amp;#039;ve already created a .ssh directory on your server &amp;#039;servername&amp;#039; (just ssh in as normal and `mkdir .ssh`). This also assumes that you don&amp;#039;t already have an `authorized_keys` file in the .ssh directory on your server. If you do just copy (scp) the id_dsa.pub file to a temporary file in your server&amp;#039;s home directory and then&lt;br /&gt;
&lt;br /&gt;
user@homebox ~ $ scp .ssh/id_dsa.pub user@servername:homebox_dsa.pub&lt;br /&gt;
user@homebox ~ $ ssh user@servername&lt;br /&gt;
user@servername ~ $ cat homebox_dsa.pub &amp;gt;&amp;gt; .ssh/authorized_keys&lt;br /&gt;
user@servername ~ $ rm homebox_dsa.pub &lt;br /&gt;
&lt;br /&gt;
If you&amp;#039;ve got it, the ssh-copy-id way is clearly a lot easier!&lt;br /&gt;
&lt;br /&gt;
~ Mark&lt;br /&gt;
&lt;br /&gt;
Hi Mark. Thanks for adding that bit. I don&amp;#039;t have access to a Mac (new one anyway) so that&amp;#039;s very nice to know.&lt;br /&gt;
&lt;br /&gt;
Seth&lt;br /&gt;
&lt;br /&gt;
Seth, I liked this post a lot, but felt the formatting and wording can be improved. I&amp;#039;ve made a few changes to the introduction.&lt;br /&gt;
&lt;br /&gt;
Xin&lt;br /&gt;
(I wish I had used my name for my username now!)&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
I found an elegant way of creating a new, or adding to an existing authorized_keys file with a single command:&lt;br /&gt;
&lt;br /&gt;
ssh username@somedomain.com -n &amp;quot;echo `cat ~/.ssh/id_dsa.pub` &amp;gt;&amp;gt; ~/.ssh/authorized_keys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
I think it *is* a good practice to use pass phrases when using ssh keys. You can use ssh-agent on Linux and SSH Agent or SSHKeychain on Mac OS X, to avoid you to type your pass phrase everytime you access a remote host. Also, you can forward your keys using &amp;#039;ssh -A&amp;#039; if you need to hop onto some host in the middle.&lt;br /&gt;
&lt;br /&gt;
-- Igor&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
I&amp;#039;m using PUTTY (pageant) on a XP and on Vista.  I use 2048 RSA private key that is password protected.  I typically use PUTTY to connect, fyi: my purpose is really to be able to use git (which uses SSH) without having to log in every time I commit. Assuming you are too and have a key generated already...&lt;br /&gt;
&lt;br /&gt;
load key into PuttyGen (enter password for the key) in the window copy the &amp;quot;public key for pasting into OpenSSH...&amp;quot; append this to the ~/.ssh/authorized_keys.  &lt;br /&gt;
&lt;br /&gt;
One comment: when I used the append from above aka the elegant code, it did not add a \n at the end of the line aka didn&amp;#039;t work. I vi&amp;#039;d the file added a new line.&lt;br /&gt;
&lt;br /&gt;
--Eric&lt;/div&gt;</summary>
		<author><name>193.196.133.6</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Linux_Shell_Skripte&amp;diff=18554</id>
		<title>Linux Shell Skripte</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Linux_Shell_Skripte&amp;diff=18554"/>
		<updated>2010-02-08T08:51:39Z</updated>

		<summary type="html">&lt;p&gt;193.196.133.6: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Was ist ein (Shell-) Script? ==&lt;br /&gt;
&lt;br /&gt;
aus: http://www.linux-fuer-alle.de/doc_show.php?docid=150&amp;amp;catid=8 (Datum des Zugriffs 20.11.2007)&lt;br /&gt;
 Zielgruppe: Einsteiger &lt;br /&gt;
&lt;br /&gt;
Also hier soll es darum gehen, was ein (Shell-) Script ist. Wir bieten ja einige kleine Scripte auf unserer Website an. Dieses Dokument ist für all diejenigen, die mit einem Script erstmal nicht viel anfangen können und nicht verstehen, was da passiert und wie man damit umgeht. Wir wollen hier allgemein von einem Script sprechen, weil es sich um einen sehr universellen Mechanismus handelt, um den es hier geht.&lt;br /&gt;
&lt;br /&gt;
Mal angenommen, man tippt in seinen Compi ein paar Kommandos in ein xterm ein (Ja, es gibt immer noch Rechner bei denen man auch mit der Tastatur etwas anfangen kann.), um eine bestimmte Aufgabe zu erledigen. Dann stellt man eventuell nach einer Weile fest, dass man diese Aufgabe nicht nur einmal, sondern öfter, vielleicht sogar reglmäßig lösen muss. Ein Beispiel dafür wäre das erstellen einer Sicherheitskopie seiner Daten mit dem Packen eines TAR-Archives, Verschlüsseln und dem Brennen einer CD-Rom. Um sich nun die Tipparbeit zu sparen, schreibt man die Kommandos in eine Textdatei. Sie ist das Script, welches man dann ausführen möchte. Da es verschiedene Programme unter Linux gibt, die Benutzereingaben entgegen nehmen und verarbeiten, muss man am Anfang seines Scriptes festlegen, welches dieser Programme, also welche Shell, verwendet werden soll. Typische Vertreter sind:&lt;br /&gt;
&lt;br /&gt;
 /bin/ash&lt;br /&gt;
 /bin/bash&lt;br /&gt;
 /bin/csh&lt;br /&gt;
 /bin/sh&lt;br /&gt;
&lt;br /&gt;
Wenn man nur einfache Programme starten will, ist es erstmal weitgehend egal, welche dieser Shells man verwendet. Bei manchen Distributionen sind einige dieser Shells ein Link auf eine andere Shell, weil man nicht alle Shells beifügen wollte, da sie sich teilweise kaum unterscheiden. Angenommen wir wollen die bash verwenden, um das Programm &amp;quot;df&amp;quot; mit einem Parameter zu starten. Dann schreiben wir folgendes Script:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 df -h&lt;br /&gt;
&lt;br /&gt;
Der obige Text wird einfach mit einem Editor in eine Textdatei geschrieben, die wir &amp;quot;FreierPlatz.sh&amp;quot; nennen wollen. Die Dateiendung macht leicht erkennbar, dass es sich in diesem Fall um ein Shell-Script handelt. Damit wir es wie ein Programm starten können, müssen wir es als ausführbar markieren:&lt;br /&gt;
&lt;br /&gt;
 chmod 755 FreierPlatz.sh&lt;br /&gt;
&lt;br /&gt;
Dabei wird davon ausgegangen, dass wir uns in dem Verzeichnis befinden, in dem das Script liegt. Dann können wir es einfach mit&lt;br /&gt;
&lt;br /&gt;
 ./FreierPlatz.sh&lt;br /&gt;
&lt;br /&gt;
starten. Man sieht die Ausgabe des Programmes, welches in dem Script gestartet wurde. Nun haben wir in der ersten Zeile des Scriptes das Programm festgelegt, welches diese Datei verarbeiten soll. Dieses Programm interpretiert den Inhalt der Datei und führt entsprechende Aktionen aus. So kann man nicht nur Programme starten, sondern auch richtige Schleifen und Verzweigungen programmieren. Das hängt aber von dem verwendeten Programm ab, was die Befehle ja verstehen muss. Man nennt dieses Programm einen Interpreter (weil er ja die Datei interpretiert). Im obigen Fall haben wir ein Programm verwendet, welches man eben auch zur direkten Eingabe der Befehle als Shell verwendet.&lt;br /&gt;
&lt;br /&gt;
Jetzt ist es auch kein weiter Weg mehr zu komplizierteren Programmiersprachen bzw. Scriptsprachen wie Perl, PHP, Ruby usw... Denn man muss ja nur in der ersten Zeile den gewünschten Interpreter angeben, der die Datei verarbeiten soll. Und davon gibt es einige. Wenn man jetzt auch noch die Dateiendung weglässt, dann kann der Anwender im ersten Moment nicht erkennen, ob es sich um ein Programm handelt, welches mit einem Übersetzer in die Maschinensprache übersetzt wurde, oder um ein Script. Unter Linux gibt es viele solcher Scripte, die die unterschiedlichsten Aufgaben übernehmen. Der grösste Vorteil von ihnen ist, dass Scripte leicht von einem Rechner zu einem anderen transportiert werden können und teilweise auch unter verschiedenen Betriebssystemen laufen.&lt;br /&gt;
&lt;br /&gt;
Ein (Shell-) Script ist also nichts anderes als eine Textdatei, in der Anweisungen für ein Programm, den Interpreter (bzw. die Shell) stehen. &lt;br /&gt;
&lt;br /&gt;
Shell Skripte können wie kleine Programme ausgeführt werden. Sie enthalten eine Reihe von Kommandos die auch mit Schleifen oder Bedingungen angesteuert werden können.&lt;br /&gt;
Wenn der aktuelle Pfad nicht in der PATH Variablen enthalten ist muß man den Pfad mit angeben. Für das Verzeichnis in dem man sich befindet wäre das z.B.&lt;br /&gt;
 ./meinSkript.sh&lt;br /&gt;
&lt;br /&gt;
== Mehr zu Skripten... ==&lt;br /&gt;
Dazu ein kleiner Post aus dem Google Groups Linux Forum:&lt;br /&gt;
&lt;br /&gt;
Ich würde Dir empfehlen, Shellskripte im Allgemeinen lieber nicht mit dem&lt;br /&gt;
».«-Kommando zu starten, sondern sie &amp;#039;&amp;#039;&amp;#039;wie eigenständige Programme&amp;#039;&amp;#039;&amp;#039; zu&lt;br /&gt;
verwenden.  Am besten ist es, wenn Du solche Shell-Skripte in ein&lt;br /&gt;
spezielles Verzeichnis unterhalb des HOME-Verzeichnisses stellst.  Das&lt;br /&gt;
Verzeichnis kannst Du dann in der Umgebungsvariablen »PATH« aufführen.&lt;br /&gt;
Auf diese Weise werden sie dann, wenn es ans Starten geht, bequem&lt;br /&gt;
gefunden.&lt;br /&gt;
&lt;br /&gt;
Erzeuge Dir also ein &amp;#039;&amp;#039;&amp;#039;Verzeichnis&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
 mkdir -p -- ~/myscripts&lt;br /&gt;
&lt;br /&gt;
Sieh nach, ob Du eine Datei mit Namen »&amp;#039;&amp;#039;~/.bash_profile&amp;#039;&amp;#039;« hast, wenn nicht,&lt;br /&gt;
sieh nach, ob Du eine Datei mit Namen »&amp;#039;&amp;#039;~/.profile&amp;#039;&amp;#039;« hast.  Hast Du keine&lt;br /&gt;
von beiden, erzeuge eine Datei mit Namen »&amp;#039;&amp;#039;~/.profile&amp;#039;&amp;#039;«.&lt;br /&gt;
&lt;br /&gt;
Setze in die Datei eine Zeile mit dem Inhalt&lt;br /&gt;
&lt;br /&gt;
 PATH=&amp;quot;${PATH:+&amp;quot;$PATH&amp;quot;:}&amp;quot;&amp;quot;$HOME&amp;quot;/myscripts &amp;amp;&amp;amp; export PATH&lt;br /&gt;
&lt;br /&gt;
Ab dem nächsten Neu-Einloggen werden Shell-Skripte dadurch auch im&lt;br /&gt;
Verzeichnis »~/myscripts« gesucht wie andere Programme auch.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Jetzt zum Shellscript:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Falls Du nicht weißt, wo im Dateisystem das »bash« zu finden ist, sieh&lt;br /&gt;
nach mit dem&lt;br /&gt;
Kommando:&lt;br /&gt;
&lt;br /&gt;
 $ command -v bash&lt;br /&gt;
&lt;br /&gt;
(Bei mir kommt da als Ergebnis »/bin/bash« heraus.)&lt;br /&gt;
&lt;br /&gt;
Schreibe das als erste Zeile in das Shell-Skript »&amp;#039;&amp;#039;.myscript.sh&amp;#039;&amp;#039;«.  Setze&lt;br /&gt;
an den Anfang dieser Zeile die zwei Zeichen&lt;br /&gt;
»#!«.  Bei mir sieht das dann so aus:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
&lt;br /&gt;
Versieh das Shell-Skript mit &amp;#039;&amp;#039;&amp;#039;Ausführungsrechten:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 $ chmod +x .myscript.sh&lt;br /&gt;
&lt;br /&gt;
Stecke das &amp;#039;&amp;#039;&amp;#039;Shell-Skript in das Verzeichnis&amp;#039;&amp;#039;&amp;#039; »~/myscripts«:&lt;br /&gt;
&lt;br /&gt;
 mv -- .myscript.sh ~/myscripts/.&lt;br /&gt;
&lt;br /&gt;
Jetzt kannst Du es mittels&lt;br /&gt;
&lt;br /&gt;
 .my_script.sh&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;aufrufen&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Wenn Du es so machst, dann tut auch das »exit«-Kommando im Shell-Skript&lt;br /&gt;
das, was Du wünschst:  Das Shell-Skript kommt zu Ende und das Shell, das&lt;br /&gt;
Deine Kommandos, die Du eintippst, entgegennimmt, ist bereit für neue&lt;br /&gt;
Kommandos, wie gewünscht:&lt;br /&gt;
&lt;br /&gt;
&amp;gt;Wenn ich ein Shellskript vorzeitig abbrechen möchte, sollte dieses dann&lt;br /&gt;
&amp;gt;auch an der Abbruchstelle beendet werden, ohne die übrigen Code-Zeilen&lt;br /&gt;
&amp;gt;auszuführen. Anschließend sollte der Fokus wieder auf der Konsole sein, von&lt;br /&gt;
&amp;gt;wo das Shellskript gestartet worden war.&lt;br /&gt;
&lt;br /&gt;
Eine Datei mittels des ».«-Kommandos zu starten, ist -- von speziellen&lt;br /&gt;
Ausnahmen (siehe Jörg Weilbiers Beitrag) abgesehen -- meist keine gute&lt;br /&gt;
Idee, und zwar aus folgenden Gründen:&lt;br /&gt;
&lt;br /&gt;
Shell-Variablen oder -Funktionen, die man im Shell-Skript anlegt, löscht&lt;br /&gt;
oder ändert, bleiben entsprechend angelegt, gelöscht bzw. geändert, wenn&lt;br /&gt;
das mittels ».« abgearbeitete Shell-Skript zu Ende kommt.  Traps und&lt;br /&gt;
andere Einstellungen am Shell, die im Shell-Skript eingestellt werden,&lt;br /&gt;
bleiben so erhalten, wenn es zu Ende kommt.&lt;br /&gt;
&lt;br /&gt;
Die Folge ist, dass die Umgebung des interaktiven Shells »verschmutzt«&lt;br /&gt;
wird.  Dadurch können überraschende Effekte, mit denen man nicht rechnet,&lt;br /&gt;
auftreten.&lt;br /&gt;
&lt;br /&gt;
Umgekehrt beeinflussen Einstellungen des interaktiven Shells ebenso das&lt;br /&gt;
Shell-Skript, mit den entsprechenden Folgen für das Shell-Skript.&lt;br /&gt;
&lt;br /&gt;
-- &lt;br /&gt;
Wer mir E-Mail schreiben will, stelle   | When writing me e-mail, please&lt;br /&gt;
bitte vor meine E-Mail-Adresse meinen   | precede my e-mail address with&lt;br /&gt;
Vor- und Nachnamen, etwa so:            | my full name, like&lt;br /&gt;
Helmut Waitzmann &amp;lt;x...@example.net&amp;gt;, (Helmut Waitzmann) x...@example.net&lt;br /&gt;
&lt;br /&gt;
== Linux Batch Skripte - Beispiele ==&lt;br /&gt;
=== Skript Dateien in einem Verzeichnis löschen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
####################################################################################&lt;br /&gt;
# Script loescht alle Dateien in einem Verzeichnis (VERZ) und sämtliche Unter-&lt;br /&gt;
# verzeichnisse&lt;br /&gt;
# Autor: Uwe Orlemann&lt;br /&gt;
# Datum: 2007-10-24&lt;br /&gt;
####################################################################################&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
VERZ=&amp;quot;/srv/www/vhosts/audiotec-fischer.de/httpdocs/typo3temp/pics&amp;quot; # Pfad zum Verz. darunter wird ggf. gelöscht&lt;br /&gt;
ADMINMAIL=&amp;quot;server@webserver-administrator.de&amp;quot;	# Mails für den Admin&lt;br /&gt;
BETREFF=&amp;quot;U7-AF-TMP-Pics-loeschen&amp;quot; # Betreff für die Mail&lt;br /&gt;
&lt;br /&gt;
DATS=`find $VERZ -type f | wc -l`&lt;br /&gt;
&lt;br /&gt;
cd $VERZ; &lt;br /&gt;
#pwd&lt;br /&gt;
if [ -d != $VERZ ] ; then		#existiert das Verz.?&lt;br /&gt;
	#Prüfen ob Dateien vorhanden&lt;br /&gt;
	if [ $DATS &amp;gt; 0 ] ; then	# sind Dateien vorhanden?&lt;br /&gt;
		#Dateien loeschen&lt;br /&gt;
		find $VERZ/ -type f | xargs -i rm -f {}&lt;br /&gt;
		STATUS=&amp;quot;Dateien wurden geloescht!&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		STATUS=&amp;quot;Keine Dateien vorhanden!&amp;quot;&lt;br /&gt;
	fi&lt;br /&gt;
else&lt;br /&gt;
	#echo &amp;quot;Loesch-Verzeichnis nicht vorhanden!&amp;quot;&lt;br /&gt;
	STATUS=&amp;quot;Loesch-Verzeichnis nicht vorhanden!&amp;quot;&lt;br /&gt;
	#exit&lt;br /&gt;
fi &lt;br /&gt;
&lt;br /&gt;
# Mail an Admin!!!&lt;br /&gt;
printf &amp;quot;$STATUS &amp;quot; | mail &amp;quot;$ADMINMAIL&amp;quot; -s $BETREFF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Praktische Linux Schnipsel - Sniplets ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Dateien in Unterordneren von latin auf utf-8 umkodieren&amp;#039;&amp;#039;&amp;#039; (recode muß installiert sein)&lt;br /&gt;
 for i in $(find -type f -name &amp;#039;*.php&amp;#039;); do recode l1..u8 $i; done&lt;br /&gt;
&lt;br /&gt;
== Shell Skripte und ssh (scp) ohne Passworteingabe ==&lt;br /&gt;
[[Linux Shell Skripte mit ssh und scp ohne Passworteingabe]]&lt;/div&gt;</summary>
		<author><name>193.196.133.6</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Linux_-_Verzeichnisbaum&amp;diff=18669</id>
		<title>Linux - Verzeichnisbaum</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Linux_-_Verzeichnisbaum&amp;diff=18669"/>
		<updated>2010-02-01T17:23:55Z</updated>

		<summary type="html">&lt;p&gt;193.196.133.6: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Linux - Verzeichnisbaum ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/ 	Root (Wurzel).&lt;br /&gt;
/bin 	Systemprogramme.&lt;br /&gt;
/boot 	Programme für den Systemstart, z.B. &amp;#039;lilo&amp;#039;-Dateien.&lt;br /&gt;
/dev 	Gerätetreiber.&lt;br /&gt;
/etc 	Konfigurationsdateien, z.B. &amp;#039;rc.config&amp;#039; bzw. unter &amp;#039;/etc/sysconfig&amp;#039;, sowie Boot-Skripte unter &amp;#039;/etc/init.d&amp;#039;.&lt;br /&gt;
/home 	Heimatverzeichnisse der Benutzer.&lt;br /&gt;
/lib 	Shared System-Libraries.&lt;br /&gt;
/mnt 	Mount-Verzeichnis.&lt;br /&gt;
/proc 	Dateien des virtuellen Prozess-Dateisystems für Hardware-Informationen.&lt;br /&gt;
/opt 	Optionale Erweiterungspakete (jeweils in Unterverzeichnissen), z.B. KDE, Netscape oder Tomcat.&lt;br /&gt;
/root 	Home-Verzeichnis des Super-Users &amp;#039;root&amp;#039;.&lt;br /&gt;
/sbin 	Ausführbare Dateien für den Super-User &amp;#039;root&amp;#039;, wie z.B. &amp;#039;fdisk&amp;#039; oder &amp;#039;fsck&amp;#039;.&lt;br /&gt;
/tmp 	Temporäre Dateien.&lt;br /&gt;
/usr 	Unix System Ressources (hat nichts mit &amp;#039;User&amp;#039; zu tun).&lt;br /&gt;
Anwendungen und Dateien, die nicht für Systemverwaltung benötigt werden, z.B. Manuals, HowTo-Beschreibungen, X Window, Midnight Commander und Java J2SE.&lt;br /&gt;
/var 	Variable Daten. Z.B. Log-Dateien unter &amp;#039;/var/log&amp;#039;.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>193.196.133.6</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Linux_-_Umgebungsvariable&amp;diff=18668</id>
		<title>Linux - Umgebungsvariable</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Linux_-_Umgebungsvariable&amp;diff=18668"/>
		<updated>2010-02-01T17:22:33Z</updated>

		<summary type="html">&lt;p&gt;193.196.133.6: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Umgebungsvariablen, PATH, profile.local ==&lt;br /&gt;
&lt;br /&gt;
 set | less&lt;br /&gt;
 set | grep -i java 	&lt;br /&gt;
&lt;br /&gt;
&amp;#039;set | less&amp;#039; zeigt alle Umgebungsvariablen (Environment) an (mit Leertaste weiter, mit &amp;#039;q&amp;#039; beenden).&lt;br /&gt;
&lt;br /&gt;
&amp;#039;set | grep -i java&amp;#039; zeigt alle Einträge an, in denen &amp;#039;java&amp;#039; vorkommt.&lt;br /&gt;
&lt;br /&gt;
 echo $PATH 	&lt;br /&gt;
&lt;br /&gt;
So werden einzelne Einträge (hier die &amp;#039;PATH&amp;#039;-Variable) angezeigt (oder stehen in Skripten zur Verfügung).&lt;br /&gt;
&lt;br /&gt;
 PATH=MeinZusatzPfad:$PATH&lt;br /&gt;
 export PATH&lt;br /&gt;
&lt;br /&gt;
Ein temporäres Umstellen der Umgebungsvariablen nur für das aktuelle Kommandozeilenfenster und dessen Tochterprozesse ist recht einfach.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PATH=`echo $PATH|sed&lt;br /&gt;
  &amp;#039;s|:/usr/lib/java/bin&lt;br /&gt;
    |:/usr/java/j2sdk/bin|&amp;#039;` 	&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Soll in der &amp;#039;PATH&amp;#039;-Variable nicht nur etwas vorangestellt oder angehängt werden, sondern ein Pfadbestandteil ausgetauscht werden, bietet sich das &amp;#039;sed&amp;#039;-Kommando an. Hier wird &amp;#039;:/usr/lib/java/bin&amp;#039; durch &amp;#039;:/usr/java/j2sdk/bin&amp;#039; ersetzt. Bitte beachten: Anders als hier dargestellt, muss alles in einer Zeile stehen und darf nur nach &amp;#039;echo&amp;#039; und nach &amp;#039;sed&amp;#039; ein Leerzeichen enthalten sein. Beachten Sie bitte auch die unterschiedlichen Hochkommas &amp;#039; und `.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
JAVA_HOME=/usr/java/j2sdk&lt;br /&gt;
export JAVA_HOME&lt;br /&gt;
PATH=`echo $PATH|sed&lt;br /&gt;
  &amp;#039;s|:/usr/lib/java/bin&lt;br /&gt;
    |:/usr/java/j2sdk/bin|&amp;#039;`&lt;br /&gt;
export PATH 	&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine dauerhafte Umstellung der Umgebungsvariablen ist etwas komplizierter und muss je nach Linux-Distribution unterschiedlich erfolgen. Unter SuSE Linux 7.x/8.x wird im Verzeichnis &amp;#039;/etc&amp;#039; eine neue Datei mit dem Namen &amp;#039;profile.local&amp;#039; und zum Beispiel mit nebenstehendem Inhalt erzeugt.&lt;br /&gt;
Genaueres finden Sie zum Beispiel unter:&lt;br /&gt;
http://www.linux-user.de/ausgabe/2001/02/088-bash/bash-conf.html.&lt;br /&gt;
&lt;br /&gt;
 /etc/rc.config&lt;br /&gt;
 /etc/sysconfig 	&lt;br /&gt;
&lt;br /&gt;
Viele grundsätzliche Konfigurationen werden für SuSE 7.x in der Datei &amp;#039;/etc/rc.config&amp;#039; und für SuSE 8.x in den Dateien unter &amp;#039;/etc/sysconfig&amp;#039; eingestellt. Zum Beispiel kann in der Datei &amp;#039;keyboard&amp;#039; der Numlock aktiviert werden (KBD_NUMLOCK=&amp;quot;yes&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
kcontrol&lt;br /&gt;
&lt;br /&gt;
Weitere grundsätzliche Konfigurationen können im &amp;#039;KDE-Kontrollzentrum&amp;#039; eingestellt werden. Zum Beispiel kann unter &amp;#039;Index&amp;#039; | &amp;#039;Angeschlossene Geräte&amp;#039; | &amp;#039;Tastatur&amp;#039; | &amp;#039;Erweitert&amp;#039; | &amp;#039;Zahlenblocksperre&amp;#039; | &amp;#039;Einschalten&amp;#039; der Numlock für KDE aktiviert werden.&lt;/div&gt;</summary>
		<author><name>193.196.133.6</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Linux&amp;diff=1832</id>
		<title>Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Linux&amp;diff=1832"/>
		<updated>2010-02-01T17:19:24Z</updated>

		<summary type="html">&lt;p&gt;193.196.133.6: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Linux Administration]]&lt;br /&gt;
&lt;br /&gt;
[[Die wichtigsten Linux Befehle]]&lt;br /&gt;
&lt;br /&gt;
[[Linux Shell Skripte]]&lt;br /&gt;
&lt;br /&gt;
[[Linux - Umgebungsvariable]]&lt;br /&gt;
&lt;br /&gt;
[[Linux - Verzeichnisbaum]]&lt;br /&gt;
&lt;br /&gt;
[[Linux - FAQ]]&lt;br /&gt;
&lt;br /&gt;
[[Linux - Logical Volume Manager (LVM)]]&lt;br /&gt;
&lt;br /&gt;
[[Linux - Debian Server inklusive VServer aufsetzen (Beispiel)]]&lt;br /&gt;
&lt;br /&gt;
[[Linux - vServer (virtueller Server)]]&lt;/div&gt;</summary>
		<author><name>193.196.133.6</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Tipafriend_-_Seite_an_einen_Freund_versenden&amp;diff=18667</id>
		<title>Tipafriend - Seite an einen Freund versenden</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Tipafriend_-_Seite_an_einen_Freund_versenden&amp;diff=18667"/>
		<updated>2010-01-29T18:13:00Z</updated>

		<summary type="html">&lt;p&gt;193.196.133.6: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Tip a Friend mit RealURL ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In der Standardkonfiguration werden bei RealURL die Links falsch gebaut. Mit einer kleinen Änderung funktioniert es:&lt;br /&gt;
&lt;br /&gt;
plugin.tipafriend.typolink{&lt;br /&gt;
   # so klappts auch mit realURL wichtig ist das rawUrlEncode&lt;br /&gt;
   ATagBeforeWrap = 1&lt;br /&gt;
   additionalParams.data = getIndpEnv: TYPO3_REQUEST_URL&lt;br /&gt;
   additionalParams.wrap = &amp;amp;tipUrl=|&lt;br /&gt;
   additionalParams.rawUrlEncode = 1&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>193.196.133.6</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Typo3_-_Extensions&amp;diff=2048</id>
		<title>Typo3 - Extensions</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Typo3_-_Extensions&amp;diff=2048"/>
		<updated>2010-01-29T18:10:30Z</updated>

		<summary type="html">&lt;p&gt;193.196.133.6: /* weitere nützliche Extensions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ideen für neue Extensions und Erweiterungen bestehender Extensions ==&lt;br /&gt;
Extension zur automatischen Erzeugung zweispaltiger Inhalte mit Line Count (auch Umbrüche), Hurenkinder und Schusterjungen regelung etc.&lt;br /&gt;
&lt;br /&gt;
Erweiterung der rg_googlemaps mit Listenansicht nach PLZ&lt;br /&gt;
Händlersuche mit Umkreissuche oder Auflistung nach PLZ bereichen (Erweiterung bestehender)&lt;br /&gt;
&lt;br /&gt;
== Extensions programmieren ==&lt;br /&gt;
Infos hierzu gibt es im Abschnitt Extension Kickstarter und unter&lt;br /&gt;
&lt;br /&gt;
[[Typo3 - Extensions programmieren]]&lt;br /&gt;
&lt;br /&gt;
[[TypoScript Einstellungen in Extensions auslagern]]&lt;br /&gt;
&lt;br /&gt;
== Extensions ==&lt;br /&gt;
&lt;br /&gt;
=== die wichtigsten Extensions ===&lt;br /&gt;
[[Real URL (realurl)]]&lt;br /&gt;
&lt;br /&gt;
automakeTemplates&lt;br /&gt;
&lt;br /&gt;
[[Metatags extended (metatags)]]&lt;br /&gt;
&lt;br /&gt;
[[News (tt_news)]]&lt;br /&gt;
&lt;br /&gt;
CleanDB  nf_cleandb&lt;br /&gt;
&lt;br /&gt;
[[Database Integration (wfqbe)]]&lt;br /&gt;
Schweizer Taschenmesser zur Integration von Daten (Bugs beachten)&lt;br /&gt;
&lt;br /&gt;
[[Newsletter mit Direct Mail]]&lt;br /&gt;
====SEO-Extensions====&lt;br /&gt;
&lt;br /&gt;
[[Google Analytics (m1_google_analytics)]]&lt;br /&gt;
&lt;br /&gt;
=== weitere nützliche Extensions ===&lt;br /&gt;
&lt;br /&gt;
[[t3blog - Blog Extension]]&lt;br /&gt;
&lt;br /&gt;
[[pbsurvey - Umfrage]]&lt;br /&gt;
&lt;br /&gt;
[[tipafriend - Seite weiterempfehlen]]&lt;br /&gt;
&lt;br /&gt;
[[error_404_handling - Seite nicht gefunden]]&lt;br /&gt;
&lt;br /&gt;
[[irfaq - Modern FAQ]]&lt;br /&gt;
&lt;br /&gt;
[[seminars - Kursverwaltung]]&lt;br /&gt;
&lt;br /&gt;
[[tipafriend - Seite an einen Freund versenden]]&lt;br /&gt;
&lt;br /&gt;
mk_wastebasket - Datensätze entgültig löschen&lt;br /&gt;
&lt;br /&gt;
Foreign access for MM Tables  	mmforeign  0.2.0   Experimental&lt;br /&gt;
&lt;br /&gt;
Page Template Selector 	rlmp_tmplselector 	1.2.2 		&lt;br /&gt;
&lt;br /&gt;
TER Update Check 	ter_update_check&lt;br /&gt;
&lt;br /&gt;
Exo Feeds  	exofeeds  	0.0.2	Alpha&lt;br /&gt;
&lt;br /&gt;
freeCap CAPTCHA 	sr_freecap 	&lt;br /&gt;
&lt;br /&gt;
Front End User Registration 	sr_feuser_register 	Stable&lt;br /&gt;
&lt;br /&gt;
Indexed Search Engine 	indexed_search 	2.9.2 	System 	Stable&lt;br /&gt;
&lt;br /&gt;
Language Selection 	sr_language_menu 	&lt;br /&gt;
&lt;br /&gt;
Photo Book 	goof_fotoboek 	1.7.11 	Stable&lt;br /&gt;
&lt;br /&gt;
Local 	Stable&lt;br /&gt;
&lt;br /&gt;
TIMTAB Tag-Cloud 	timtab_tagcloud 1.2.1 			&lt;br /&gt;
&lt;br /&gt;
Make Print Link 	make_printlink 	1.5.2 	Stable&lt;br /&gt;
&lt;br /&gt;
Static Info Tables 	static_info_tables&lt;br /&gt;
&lt;br /&gt;
sb_accessiblecontent&lt;br /&gt;
&lt;br /&gt;
Content/DAM reference usage  	dam_ttcontent (Experimental)&lt;br /&gt;
&lt;br /&gt;
phpmyadmin&lt;br /&gt;
&lt;br /&gt;
DAM inkl Erweiterungen&lt;br /&gt;
&lt;br /&gt;
Media (DAM)  	dam 	Local  	Stable&lt;br /&gt;
&lt;br /&gt;
Media&amp;gt;Categories dam_catedit 	1.0.3 	Local 	Alpha&lt;br /&gt;
&lt;br /&gt;
Media&amp;gt;Indexing 	dam_index 	1.0.3 	Local 	Stable&lt;br /&gt;
&lt;br /&gt;
Media&amp;gt;Info 	dam_info&lt;br /&gt;
&lt;br /&gt;
[[PDF Generator 2 (pdf_generator2)]]&lt;br /&gt;
&lt;br /&gt;
[[Typo3 - Bildergallerie]] (lz_gallery)&lt;br /&gt;
&lt;br /&gt;
[[Modern Guestbook (ve_guestbook)]]&lt;br /&gt;
&lt;br /&gt;
[[Mailformplus (tx_mailformplus)]]&lt;br /&gt;
&lt;br /&gt;
[[Send-a-Card (sr_sendcard)]]&lt;br /&gt;
&lt;br /&gt;
[[Front End User Registration (fe_users)]]&lt;br /&gt;
&lt;br /&gt;
[[FreeCap (sr_freecap)]]&lt;br /&gt;
&lt;br /&gt;
[[Date2Calendar (date2cal)]] JavaScript Datumsauswahl für Datumsfelder&lt;br /&gt;
&lt;br /&gt;
[[Dynamic Flexforms (dynaflex)]] Flexforms während der Laufzeit verändern&lt;br /&gt;
&lt;br /&gt;
[[Google Earth links (itxg_gelinks)]] Allows to create and view Google Earth .kml files. The building of a link is being done with GPS coordinates in D-M-S notation.&lt;br /&gt;
&lt;br /&gt;
[[Google Sitemap for Pages and Contents (mc_googlesitemap)]] All options available&lt;br /&gt;
&lt;br /&gt;
== Der Typo3 Extension Kickstarter ==&lt;br /&gt;
(Deutsch: Erweiterungs Manager)&lt;br /&gt;
Der Erweiterungsmanager ist selbst eine Erweiterung die zuerst installiert werden muß.&lt;br /&gt;
&lt;br /&gt;
Fehler in Extension Kickstarter&lt;br /&gt;
&lt;br /&gt;
Wenn der Kickstarter local installiert ist, dann kann meine eine bereits erstelle Extension nicht im Kickstarter überarbeiten. (Bis Version ?)&lt;br /&gt;
&lt;br /&gt;
Der Kickstarter muß global installiert sein, damit man bereits erstellte Extension mit dem Kickstarter überarbeiten kann.&lt;br /&gt;
&lt;br /&gt;
=== Kurzanleitung ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Wo?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Backend-Modul Ext Manager; hier im Dropdown Menü &amp;quot;Make new Extension&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;General Info&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Allgemeine Infos zum PlugIn (hat nichts mit der Funktion zu tun)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Extension Key&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
- Typo3 entfernt Unterstriche (meine_extension wird zu meineextension)&lt;br /&gt;
&lt;br /&gt;
- tx_ wird automatisch vorangestellt&lt;br /&gt;
&lt;br /&gt;
- ein vorangestelltes user_ bedeutet dass es sich um eine eigene Entwicklung handelt, die nicht in das Repository gestellt werden kann.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;New Database Tables&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Hier kann man automatisch die benötigten Tabellen und deren Felder erzeugen.&lt;br /&gt;
Üblich ist ein Tabellenname mit dem Suffix _main z.B. user_meineErweiterung_main.&lt;br /&gt;
Hier werden auch einige von Typo unterstützte Funktionen die im Backend als Felder sichtbar sind vorbereitet (z.B. Start, Stop, Hide...). Sinnvoll in diesem Zusammenhang:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Delete*&amp;#039;&amp;#039; - damit die Tabelle ein Delete Flag bekommt&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Hide*&amp;#039;&amp;#039; - damit Datensätze versteckt werden können &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Allowed on Pages&amp;#039;&amp;#039; - Damit Frontend Plugins auch als Inhaltselement im Backend ausgewählt werden können.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Save and new&amp;#039;&amp;#039; - damit können später schnell mehrere Datensätze angelegt werden.&lt;br /&gt;
&lt;br /&gt;
*Damit das bei der Anzeige Funktioniert muß die Funktionalität in der Datenbankabfrage mit eingebaut werden (d.h. das Flag muß abgefragt werden).&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Datenfelder der Tabelle&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Hier werden die Spalten der Tabelle angelegt. &lt;br /&gt;
&lt;br /&gt;
Field name - Der Name der Spalte in der DB (in Kleinbuchstaben, z.B. vorname)&lt;br /&gt;
&lt;br /&gt;
Field title - wird im Backend beim Eingabefeld angezeigt (z.B. Vorname)&lt;br /&gt;
&lt;br /&gt;
Field type - welche Art von Eingabefeld&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Frontend Plugins&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Integration ins Frontend&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Enter a title for the plugin&amp;#039;&amp;#039; - taucht in der Auswahlliste für die Plugins aus (Backend)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;USER cObjects are cached&amp;#039;&amp;#039; - Auswählen ob gecached wird (für Entwicklung bietet sich das deaktivieren des Caches an.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;...Typo Script Code...&amp;#039;&amp;#039; - den Beispielcode braucht man i.d.R. nicht, ein einfacher Code wird denoch generiert.&lt;br /&gt;
&lt;br /&gt;
weiter unten kann noch angegeben werden wo das Plugin zugänglich ist.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;View Result&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Hier kann man sehen was erzeugt wird...&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Write&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
... und hier wird es tatsächlich erzeugt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bilder in eigener Extension rendern ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel benutzte Variablen:&lt;br /&gt;
 $BildAdresse&lt;br /&gt;
 $ParameterFuerImgTag&lt;br /&gt;
 $Alttext&lt;br /&gt;
&lt;br /&gt;
In PHP-Datei der Extension:&lt;br /&gt;
&lt;br /&gt;
 $this-&amp;gt;conf[&amp;quot;imageBeispiel.&amp;quot;][&amp;quot;file&amp;quot;]=&amp;quot;uploads/pics/&amp;quot;.$BildAdresse;&lt;br /&gt;
 $this-&amp;gt;conf[&amp;quot;imageBeispiel.&amp;quot;][&amp;quot;params&amp;quot;]=$ParameterFuerImgTag;&lt;br /&gt;
 $this-&amp;gt;conf[&amp;quot;imageBeispiel.&amp;quot;][&amp;quot;altText&amp;quot;]=$Alttext;&lt;br /&gt;
 $Bild=$this-&amp;gt;cObj-&amp;gt;IMAGE($this-&amp;gt;conf[&amp;quot;imageBeispiel.&amp;quot;]);&lt;br /&gt;
 $Content.=$Bild;&lt;br /&gt;
&lt;br /&gt;
In Typoscript Setup&lt;br /&gt;
&lt;br /&gt;
 plugin.tx_hoTest_pi1 {     //hier Plugin-Name&lt;br /&gt;
 imageArtikel{&lt;br /&gt;
     file.maxW = {$ho_Test.BildWidthNews}  &lt;br /&gt;
     imageLinkWrap = 1&lt;br /&gt;
     imageLinkWrap {&lt;br /&gt;
       enable = 1&lt;br /&gt;
       bodyTag = &amp;lt;BODY bgColor=white&amp;gt;&lt;br /&gt;
       wrap = |&lt;br /&gt;
       width = 400m&lt;br /&gt;
       height = 400&lt;br /&gt;
       JSwindow = 1&lt;br /&gt;
       JSwindow.newWindow = 1&lt;br /&gt;
       JSwindow.expand = 17,20&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Der Wert {$ho_Test.BildWidthNews} kann aus Constants übernommen werden.&lt;br /&gt;
&lt;br /&gt;
Siehe dazu auch&lt;br /&gt;
Konstanten von Constants im Setup verwenden&lt;br /&gt;
und&lt;br /&gt;
Konstanten für Constant-Editor bereitstellen&lt;br /&gt;
&lt;br /&gt;
(aus www.easy-office4you.de/ 10.1.2006)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Spalten der Seiten umbenennen ==&lt;br /&gt;
&lt;br /&gt;
Um die Spalten der Seite im Backend beliebig umzubenennen und/oder zusätzliche eigene Spalten zu verwenden, muß die Extension zed_more_columns installiert werden und dann in der Datei ext_tables.php die Spalten-Namen eingeben werden.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
 $TCA[&amp;quot;tt_content&amp;quot;][&amp;quot;columns&amp;quot;][&amp;quot;colPos&amp;quot;][&amp;quot;config&amp;quot;][&amp;quot;items&amp;quot;] = array (&lt;br /&gt;
 &amp;quot;0&amp;quot; =&amp;gt; array (&amp;quot;Mitte||Mitte||||||||&amp;quot;,&amp;quot;0&amp;quot;),&lt;br /&gt;
 &amp;quot;1&amp;quot; =&amp;gt; array (&amp;quot;Links||Links||||||||&amp;quot;,&amp;quot;1&amp;quot;),&lt;br /&gt;
 &amp;quot;2&amp;quot; =&amp;gt; array (&amp;quot;Rechts||Rechts||||||||&amp;quot;,&amp;quot;2&amp;quot;),&lt;br /&gt;
 &amp;quot;3&amp;quot; =&amp;gt; array (&amp;quot;Teaser||Teaser||||||||&amp;quot;,&amp;quot;3&amp;quot;),&lt;br /&gt;
 &amp;quot;4&amp;quot; =&amp;gt; array (&amp;quot;Fusszeile||Fusszeile||||||||&amp;quot;,&amp;quot;4&amp;quot;)&lt;br /&gt;
 );&lt;br /&gt;
&lt;br /&gt;
== Bei Extension dafür sorgen, daß im Backend kein Sortierungs-Button entsteht ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In der Datei ext_tables.php der Extension folgende Zeile ändern&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;sortby&amp;quot; =&amp;gt; &amp;quot;name&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
ändern in&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;default_sortby&amp;quot; =&amp;gt; &amp;quot;ORDER BY name&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
Anstatt &amp;quot;name&amp;quot; kann natürlich auch ein anderes Suchkriterium verwendet werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Eigene Extensions ==&lt;br /&gt;
[[Typo3 Extension: pupmanager]]&lt;br /&gt;
&lt;br /&gt;
Webbretter&lt;br /&gt;
&lt;br /&gt;
Personalabfrage&lt;br /&gt;
&lt;br /&gt;
More Pics In A Row&lt;br /&gt;
&lt;br /&gt;
HfWU Studium&lt;br /&gt;
&lt;br /&gt;
gbjobmanager&lt;br /&gt;
&lt;br /&gt;
[[gbt3settings]]&lt;br /&gt;
&lt;br /&gt;
In Planung:&lt;br /&gt;
&lt;br /&gt;
Real Last Change&lt;br /&gt;
&lt;br /&gt;
Easy Rootline&lt;/div&gt;</summary>
		<author><name>193.196.133.6</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Typo3_-_Backend_Felder_vorbelegen&amp;diff=18652</id>
		<title>Typo3 - Backend Felder vorbelegen</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Typo3_-_Backend_Felder_vorbelegen&amp;diff=18652"/>
		<updated>2009-10-18T16:35:03Z</updated>

		<summary type="html">&lt;p&gt;193.196.133.6: /* TCAdefaults über das Backend Benutzer TSconfig - Die Standardlösung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Felder vorbelegen&lt;br /&gt;
&lt;br /&gt;
Von Armin Bartsch aus: http://typo3.intervation.de/snippets/backend/felder-vorbelegen.html Datum des Zugriffs: 26.6.2009&lt;br /&gt;
&lt;br /&gt;
Felder in Pages, tt_content, tt_news usw. zentral vorbelegen&lt;br /&gt;
&lt;br /&gt;
Das Vorbelegen von Feldern soll zum einen dem Redakteuer das Erstellen von Seiten vereinfachen, zum anderen Fehleingaben reduzieren und sogar ganz vermeiden.&lt;br /&gt;
&lt;br /&gt;
Author gehört zu den Feldern die man meistens vorbelegen möchte, am besten mit dem Namen des Redaktuers. Es ist aber ohne Probleme möglich, alle Felder vorzubelegen. Bei meinem Beispiel begrenze ich mich auf das Feld Author in Pages und tt_news.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== TCAdefaults über das Backend Benutzer TSconfig - Die Standardlösung ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Anpassung erfolgt in der Regel über das TSConfig des Backend Benutzers&lt;br /&gt;
&lt;br /&gt;
 TCAdefaults.pages.author= Armin Bartsch&lt;br /&gt;
&lt;br /&gt;
Leider hat diese Lösung den Nachteil, dass bei jedem Backend Benutzer das TSconfig angepasst werden muss, da die stdWrap bei TCAdefaults nicht greift und flexible Inhalte nicht eingefügt werden können. Aus diesem Grund ist es leider auch nicht möglich, TCAdefaults in dem TSconfig der Gruppe zu erstellen.&lt;br /&gt;
&lt;br /&gt;
Gerade wenn man viele Backend Benutzer verwaltet, bedeutet dies ein erheblicher Arbeitsaufwand, da bei jedem Benutzer das TSconfig angepasst werden muss.&lt;br /&gt;
TCAdefaults über die Backend Benutzergruppe - Methoden anwenden&lt;br /&gt;
&lt;br /&gt;
Ab TYPO3 Version 4 ist es möglich, mit Hilfe des Operators := eine Methode aufzurufen. Der Methoden-Aufruf kann auch im TSconfig erfolgen, flexible Lösungen sind nun auch im TSconfig möglich.&lt;br /&gt;
&lt;br /&gt;
Ich stelle den Methoden-Aufruf am Beispiel &amp;quot;Vorbelegung des Feldes Author in Pages und tt_news&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Über TCA Konfiguration===&lt;br /&gt;
&lt;br /&gt;
Durch eine einfache TCA Konfiguration können jedoch neue News standartmässig immer gleich eingeblendet werden:&lt;br /&gt;
&lt;br /&gt;
Der Datei extTables.php im Verzeichnis typo3conf (ausgehend vom typo3 Installationsverzeichnis) folgende CodeZeile unten hinzufügen:&lt;br /&gt;
&lt;br /&gt;
 $TCA[&amp;#039;tt_news&amp;#039;][&amp;#039;columns&amp;#039;][&amp;#039;hidden&amp;#039;][&amp;#039;config&amp;#039;][&amp;#039;default&amp;#039;] = &amp;#039;0&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
Auf dem selben weg können übrigens auch beliebige tt_news Felder vorbelegt werden. Z.B.&lt;br /&gt;
&lt;br /&gt;
 $TCA[&amp;#039;tt_news&amp;#039;][&amp;#039;columns&amp;#039;][&amp;#039;author&amp;#039;][&amp;#039;config&amp;#039;][&amp;#039;default&amp;#039;] = &amp;#039;Lina Ourima&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
Wenn die Datei extTables.php noch nicht exisitier können Sie diese einfach anlegen. Sie wird in der localconf.php im selben Verzeichnis, also typo3conf, eingebunden:&lt;br /&gt;
&lt;br /&gt;
 $typo_db_extTableDef_script = &amp;#039;extTables.php&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
== Neue Function - Methode ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TYPO3 bietet schon einige Methoden an: prependString, appendString, removeString, replaceString, addToList und removeFromList.&lt;br /&gt;
&lt;br /&gt;
Um eine weitere Methode zur Verfügung zu stellen, wird eine neue Klasse mit weiteren Funktionen benötigt.&lt;br /&gt;
.&lt;br /&gt;
      &amp;lt;?php&lt;br /&gt;
      class tx_methoden_parserFuncs {&lt;br /&gt;
        /**&lt;br /&gt;
         * The main method of the PlugIn&lt;br /&gt;
         *&lt;br /&gt;
         * @param string  $content: The PlugIn content&lt;br /&gt;
         * @param array    $conf: The PlugIn configuration&lt;br /&gt;
         * @return  The content that is displayed on the website (Header)&lt;br /&gt;
         */&lt;br /&gt;
        function user1($params=array(),$ref=&amp;#039;&amp;#039;) {&lt;br /&gt;
          global $BE_USER;&lt;br /&gt;
          return $BE_USER-&amp;gt;user[$params[&amp;#039;functionArgument&amp;#039;]];&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Speicherort der Datei ist typo3conf/class.methoden_parserFuncs.php.&lt;br /&gt;
Neue Methode registrieren&lt;br /&gt;
&lt;br /&gt;
Damit die neue Methode auch aufgerufen werden kann, muss TYPO3 diese bekannt gegeben werden. Dazu ist folgender Code in die localconf.php oder in eine ext_localconf.php einzutragen.&lt;br /&gt;
&lt;br /&gt;
      $TYPO3_CONF_VARS[&amp;#039;SC_OPTIONS&amp;#039;][&amp;#039;t3lib/class.t3lib_tsparser.php&amp;#039;][&amp;#039;preParseFunc&amp;#039;][&amp;#039;author_return&amp;#039;] = &amp;#039;typo3conf/class.methoden_parserFuncs.php:&amp;amp;tx_methoden_parserFuncs-&amp;gt;user1&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Methoden Aufruf - TSconfig in der Backend Benutzergruppe ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In einer Backend Benutzergruppe, die jedem Benutzer zugeordnet wird, wird im TSconfig der Author-Name vorblegt. Dabei soll als Author-Name der Reale Name erscheinen.&lt;br /&gt;
 TCAdefaults.pages.author :=author_return(realName)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Schlussbemerkung ==&lt;br /&gt;
&lt;br /&gt;
Es ist schnell zu erkennen, welche Möglichkeiten Methoden bieten. Es können leicht und schnell zusätzliche Methoden erstellt und individuelle Lösungen erarbeitet werden. Methoden können im TSconfig und im setup /constants zum Einsatz kommen.&lt;br /&gt;
&lt;br /&gt;
Es bietet sich an, Methoden zentralisiert zu verwalten um den Überblick der erstellten Methoden zu erhalten.&lt;/div&gt;</summary>
		<author><name>193.196.133.6</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Linux_-_Cronjobs&amp;diff=1922</id>
		<title>Linux - Cronjobs</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Linux_-_Cronjobs&amp;diff=1922"/>
		<updated>2009-10-01T07:57:29Z</updated>

		<summary type="html">&lt;p&gt;193.196.133.6: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Cronjobs / Crontab ==&lt;br /&gt;
&lt;br /&gt;
Cronjobs sind Aufgaben, die regelmäßig zu einer bestimmten Zeit ausgeführt werden.&lt;br /&gt;
Das können z.B. Serverstatistiken sein, die man jede Nacht generieren möchte.&lt;br /&gt;
&lt;br /&gt;
Anzeigen kann man die Liste der Cronjobs mit dem Befehl:&lt;br /&gt;
&lt;br /&gt;
 crontab -l&lt;br /&gt;
&lt;br /&gt;
Editieren kann man die Liste mit:&lt;br /&gt;
&lt;br /&gt;
 crontab -e&lt;br /&gt;
&lt;br /&gt;
Nun wird die Liste der Cronjobs mit dem Standardeditor (in der Regel vim) geöffnet.&lt;br /&gt;
&lt;br /&gt;
Hier stehen nun Zeilen dirn, die in etwa, wie die folgende aussehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0 */6 * * * /usr/local/confixx/runwebalizer.sh 2&amp;gt;/dev/null &amp;gt;/dev/null&lt;br /&gt;
0 20 * * * /srv/scripts/backup.sh 2&amp;gt;&amp;amp;1 | /usr/global/bin/cmail -s &amp;quot;Mail-Subject&amp;quot; mail@admin.de&lt;br /&gt;
1 3 * * * /srv/scripts/backup.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die ersten 5 Stellen sind Zahlen, die durch Leerzeichen, oder Tabs getrennt werden dürfen.&lt;br /&gt;
Dabei stehen die Zahlen der Reihenfolge nach für:&lt;br /&gt;
&lt;br /&gt;
Die Minute zu der das Script ausgeführt werden soll (0-59),&lt;br /&gt;
&lt;br /&gt;
Die Stunde (0-23),&lt;br /&gt;
&lt;br /&gt;
Den Tag (1-31),&lt;br /&gt;
&lt;br /&gt;
Den Monat (1-12),&lt;br /&gt;
&lt;br /&gt;
Den Wochentag (0-6 wobei 0=Sonntag).&lt;br /&gt;
&lt;br /&gt;
Ein * steht jeweils für &amp;#039;jeden&amp;#039;.&lt;br /&gt;
 1 3 * * * &lt;br /&gt;
&lt;br /&gt;
würde also bedeuten: Jeden Tag um 3.01 Uhr&lt;br /&gt;
 */6 &lt;br /&gt;
&lt;br /&gt;
bedeutet: &amp;quot;Wenn die Zahl durch 6 teilbar ist&amp;quot;, also alle 6 Stunden/Minute, ...&lt;br /&gt;
 0 */6 * * * &lt;br /&gt;
&lt;br /&gt;
würde bedeuten jede 6 Stunden und 0 Minuten, also jeden Tag um 0.00, um 6.00, um 12.00 und um 18.00.&lt;br /&gt;
&lt;br /&gt;
Man kann mehrere Zahlen auch durch Komata trennen:&lt;br /&gt;
 7 1,2,5 * * * würde jeden Tag um 1:07, um 2:07 und um 5:07 ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Auch - (bis) ist Möglich&lt;br /&gt;
 0 0 * * 1-5 würde jeden Wochentag um 0.00 ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Nach dieser Zeitangabe folgt das Komando, dass zu den zuvor festgelegten Zeiten ausgeführt werden soll.&lt;br /&gt;
z.B.: Das Script /srv/scripts/backup.sh aufrufen, welches z.B. wichtige Dateien sichert. &lt;br /&gt;
&lt;br /&gt;
Quelle: http://www.orgapage.net/pages/server/linux/cronjobs.php (1.10.2009)&lt;/div&gt;</summary>
		<author><name>193.196.133.6</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Linux_-_Cronjobs&amp;diff=1743</id>
		<title>Linux - Cronjobs</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Linux_-_Cronjobs&amp;diff=1743"/>
		<updated>2009-10-01T07:54:59Z</updated>

		<summary type="html">&lt;p&gt;193.196.133.6: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Cronjobs&lt;br /&gt;
&lt;br /&gt;
Cronjobs sind Aufgaben, die regelmäßig zu einer bestimmten Zeit ausgeführt werden.&lt;br /&gt;
Das können z.B. Serverstatistiken sein, die man jede Nacht generieren möchte.&lt;br /&gt;
&lt;br /&gt;
Anzeigen kann man die Liste der Cronjobs mit dem Befehl:&lt;br /&gt;
crontab -l&lt;br /&gt;
&lt;br /&gt;
Editieren kann man die Liste mit:&lt;br /&gt;
crontab -e&lt;br /&gt;
&lt;br /&gt;
Nun wird die Liste der Cronjobs mit dem Standardeditor (in der Regel vim) geöffnet.&lt;br /&gt;
&lt;br /&gt;
Hier stehen nun Zeilen dirn, die in etwa, wie die folgende aussehen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0 */6 * * * /usr/local/confixx/runwebalizer.sh 2&amp;gt;/dev/null &amp;gt;/dev/null&lt;br /&gt;
0 20 * * * /srv/scripts/backup.sh 2&amp;gt;&amp;amp;1 | /usr/global/bin/cmail -s &amp;quot;Mail-Subject&amp;quot; mail@admin.de&lt;br /&gt;
1 3 * * * /srv/scripts/backup.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die ersten 5 Stellen sind Zahlen, die durch Leerzeichen, oder Tabs getrennt werden dürfen.&lt;br /&gt;
Dabei stehen die Zahlen der Reihenfolge nach für:&lt;br /&gt;
Die Minute zu der das Script ausgeführt werden soll (0-59),&lt;br /&gt;
Die Stunde (0-23),&lt;br /&gt;
Den Tag (1-31),&lt;br /&gt;
Den Monat (1-12),&lt;br /&gt;
Den Wochentag (0-6 wobei 0=Sonntag).&lt;br /&gt;
&lt;br /&gt;
Ein * steht jeweils für &amp;#039;jeden&amp;#039;.&lt;br /&gt;
1 3 * * * würde also bedeuten: Jeden Tag um 3.01 Uhr&lt;br /&gt;
&lt;br /&gt;
*/6 bedeutet: &amp;quot;Wenn die Zahl durch 6 teilbar ist&amp;quot;, also alle 6 Stunden/Minute, ...&lt;br /&gt;
0 */6 * * * würde bedeuten jede 6 Stunden und 0 Minuten, also jeden Tag um 0.00, um 6.00, um 12.00 und um 18.00.&lt;br /&gt;
&lt;br /&gt;
Man kann mehrere Zahlen auch durch Komata trennen:&lt;br /&gt;
 7 1,2,5 * * * würde jeden Tag um 1:07, um 2:07 und um 5:07 ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Auch - (bis) ist Möglich&lt;br /&gt;
 0 0 * * 1-5 würde jeden Wochentag um 0.00 ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Nach dieser Zeitangabe folgt das Komando, dass zu den zuvor festgelegten Zeiten ausgeführt werden soll.&lt;br /&gt;
z.B.: Das Script /srv/scripts/backup.sh aufrufen, welches z.B. wichtige Dateien sichert. &lt;br /&gt;
&lt;br /&gt;
Quelle: http://www.orgapage.net/pages/server/linux/cronjobs.php (1.10.2009)&lt;/div&gt;</summary>
		<author><name>193.196.133.6</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Typo3_Extensions_programmieren_-_RTE&amp;diff=1709</id>
		<title>Typo3 Extensions programmieren - RTE</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Typo3_Extensions_programmieren_-_RTE&amp;diff=1709"/>
		<updated>2009-01-30T05:43:45Z</updated>

		<summary type="html">&lt;p&gt;193.196.133.6: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mit dem Extension Kickstarter läßt sich in Backendformularen leicht der Rich Text Editor für die Texteingabe integrieren. Manche Formatierungen müssen aber vor der Ausgabe im Frontend gerendert werden. Sonst steht im Frontend statt eines a Tags beispielsweise der Typo3 eigene Tag &amp;lt;link&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Möglichkeit 3 - Render funktion nutzen ==&lt;br /&gt;
Rendern von TYPO3-Links in eigener Extension (RTE: &amp;lt;link&amp;gt;)&lt;br /&gt;
URL dieses Beitrags: http://blog.stefan-macke.com/2007/08/01/rendern-von-typo3-links-in-eigener-extension-rte/&lt;br /&gt;
1. August 2007&lt;br /&gt;
Datum des Zugriffs 25.1.2009&lt;br /&gt;
&lt;br /&gt;
Bei der Ausgabe von Links, die im TYPO3-Backend mit dem RTE eigegeben wurden, werden die dort erzeugten &amp;lt;a&amp;gt;-Tags umgewandelt in das TYPO3-interne Format &amp;lt;link&amp;gt; und in der Datenbank gespeichert. Die Ausgabe im Frontend führt dann zu Fehlern, da die &amp;lt;link&amp;gt;-Tags nicht interpretiert werden können.&lt;br /&gt;
&lt;br /&gt;
Um die Tags vor der Ausgabe in korrekte Links umzuwandeln, habe ich folgende Lösung gefunden: Die Methode TS_links_rte der Klasse t3lib_parsehtml_proc übernimmt genau dieses Rendern von Links. Sie kann wie folgt in die eigene Extension eingebunden werden:&lt;br /&gt;
&lt;br /&gt;
 require_once(PATH_t3lib.&amp;#039;class.t3lib_parsehtml_proc.php&amp;#039;);&lt;br /&gt;
 $parseObj = t3lib_div::makeInstance(&amp;#039;t3lib_parsehtml_proc&amp;#039;);&lt;br /&gt;
 $content = $parseObj-&amp;gt;TS_links_rte($content);&lt;br /&gt;
&lt;br /&gt;
== Möglichkeit 2 - über TypoScript ==&lt;br /&gt;
- nicht getestet -&lt;br /&gt;
&lt;br /&gt;
Konfiguration Des RTE kopieren und innerhalb der eigenen Extension nutzen.&lt;br /&gt;
&lt;br /&gt;
Das sähe grob gesehen folgendermaßen aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
plugin.deine_extension {&lt;br /&gt;
  general_stdWrap.parseFunc &amp;lt; tt_content.text.20.parseFunc&lt;br /&gt;
  general_stdWrap.parseFunc {&lt;br /&gt;
   #  WEITERE EINSTELLUNGEN&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Möglichkeit 3 - über die Konfiguration der Extension ==&lt;br /&gt;
- nicht getestet -&lt;br /&gt;
&lt;br /&gt;
beim Standard RTE hilft&amp;#039;s den Eintrag in der &amp;#039;&amp;#039;&amp;#039;ext_tables.php&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
PHP-Code:&lt;br /&gt;
 $TCA[&amp;#039;tt_content&amp;#039;][&amp;#039;types&amp;#039;][$_EXTKEY.&amp;#039;_pi1&amp;#039;][&amp;#039;showitem&amp;#039;]= ... &lt;br /&gt;
von PHP-Code:&lt;br /&gt;
 rte_transform[mode=ts] &lt;br /&gt;
nach PHP-Code:&lt;br /&gt;
 rte_transform[mode=ts_css]  &lt;br /&gt;
 # oder &lt;br /&gt;
 # rte_transform[mode=css]&lt;br /&gt;
&lt;br /&gt;
Dann muß es noch in der Extension mit&lt;br /&gt;
 $this-&amp;gt;pi_RTEcssText($text)  &lt;br /&gt;
ausgegeben werden&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== weitere Infos ==&lt;br /&gt;
aus dem Forum zum Thema Typolinks im RTE...&lt;br /&gt;
&lt;br /&gt;
Im Prinzip ist es ganz einfach:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
temp.whatever = TEXT&lt;br /&gt;
temp.whatever {&lt;br /&gt;
    field = mytextfield&lt;br /&gt;
    parseFunc {&lt;br /&gt;
      tags {&lt;br /&gt;
        link = TEXT&lt;br /&gt;
        link {&lt;br /&gt;
          current = 1&lt;br /&gt;
          typolink.parameter.data = parameters : allParams&lt;br /&gt;
        }&lt;br /&gt;
     }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit werden schon mal alle &amp;lt;link&amp;gt; Tags im Feld mytextfield mit typolink&lt;br /&gt;
gerendert.&lt;br /&gt;
Mit Hilfe weiterer typolink Parameter und/oder stdWrap Funktionen kannst Du&lt;br /&gt;
noch einen Haufen von Modifikationen vornehmen, die den Link selbst, den&lt;br /&gt;
Text oder den Wrap beeinflussen.&lt;/div&gt;</summary>
		<author><name>193.196.133.6</name></author>
	</entry>
</feed>