Buch „Apache für Dummies“ __________________________________________________________________________________________ Apache für Dummies. S.56 Ins Internet mit mehreren Rechnern Der Einwahlrechner vom seinem Internet-Provider nur eine IP-Adresse bekommt. Zwei Lösungen: Ein Proxy (auf dem Einwahlrechner wird eine zusätzliche Software installiert: die Proxy-Software – empfehlenswert für Windows ist der Java-Server; auf dem zweiten Rechner trägtm man nun in Browser den Einwahlrechner als Proxy ein) Das so genannte Masquerading (aber der Einwahlrechner muss ein Linux-Rechner sein) Der Aufbau eines lokalen Netzwerks (mit zwei Rechnern) Hardware: Für jeden Rechner eine Ethernet-Netzwerkkarte (beide Karten identische Übertragungs-Geschwindigkeit haben) Ein so genanntes Kategorie-5-Gross-Over-Twisted-Pair-Kabel mit RJ45-Steckern Nach den Aufbau starten Sie die Rechner und konfigurieren Sie die Netzwerkkarten – Aus allen möglichen IP-Adressen wurden drei Bereiche ausgewählt, die nicht im Internet benutzt werden und nur für lokale Netzwerke bestimmt sind: Alle IP-Adresse, die mit 10 beginnen (am bequemsten) Alle IP-Adresse, die mit 172.16.0, 172.16.2 bis 172.16.1.31 beginnen Alle IP-Adresse, die mit 192.168 beginnen Neben den IP-Adressen müssen Sie aber auch die Netzwerk-Maske bestimmen, an denen erkennen die Rechner, ob Sie nur lokal auf einen Rechner in Ihrem Netzwerk zugreifen wollen oder ob Sie Ihren Rechner im Internet meinen. Die drei typischen Netzwerk-Masken sind: 255.0.0.0 255.255.0.0 255.255.255.0 Stellen wir uns vor, dass Rechner A hat die IP-Adresse 10.20.0.1 und B – 10.20.0.2, als Netzwerk-Maske – 255.255.0.0. A will Daten an B schicken und muss sich entscheiden, ob er B im lokalen Netz oder im Internet findet. Dazu merkt er von seiner IP-Adresse nur die Stellen, wo in der NetzwerkMaske die 255 steht. Heraus kommt: 10.20. In Fälle von B käme dabei 10.20 heraus. Nun vergleicht er die beiden gemerkten Werte: Sind sie gleich, dann ist der Rechner im lokalen Netz, sind sie nicht gleich, dann ist der Rechner im Internet. S.63. Für den reinen Schleifenbetrieb über einen Loopback-Adresse braucht Ihr Rechner keine Netzwerkkarte. Die Loopback-Adresse ist ein Schleifenbetrieb unter der Nummer 127.0.0.1.In jedem Fall brauchen Sie aber TCP/IP, für die Überprüfung dieses Protokolls benutzen Sie unter der DOS-Konsole den Ping-Befehl:. ping 127.0.0.1 ping localhost __________________________________________________________________________________________ Datei: D:\579891904.doc. Seite 1 von 25. Buch „Apache für Dummies“ __________________________________________________________________________________________ Der Apache läuft auch auf einem Einzelplatzrechner mit TCP/IP und Loopback ohne Probleme. Im Netz gibt es einen Server und einen oder mehrere Clients. Die Nummer der IP des Servers muss immer manuel festgelegt weden. Dagegen können die Clients vom Server navh Anmeldung an der Domain über DCHP (Dynamic Host Configuration Protocol) dynamisch eine Adressierung erhalten. Systemszeuerung->Netzwerkverbindungen->LAN ...->(rechte MAUSTASTE) -> Eigenschaften -> markieren TCP/IP und Eigenschaften. Datei: C:\WINDOWS\system32\drivers\etc\hosts Kommentare werden mit dem Symbol der Raute (#) gekennzeichnet. Ihre Adressen der hosts für einen Server und zwei Clients könnte so ausssehen: 127.0.0.1 10.20.30.1 10.20.30.2 10.20.30.3 localhost apache client01 client02 In der hosts als Leerzeichen zwischen der IP-Adresse und dem Namen immer die Taste Tab verwenden! Die hosts Ihere Clients werden ebenfalls nach diesen Schema aktualisiert. S.144 CGI via Dateiendung: AddHandler cgi-script .cgi <Location /> Options ExecCGI </Location> CGI-Verzeichnisse (die CGI-Programme müssen gar nicht mehr auf .cgi enden): <Location /meinecgis> Options ExecCGI SetHandler cgi-script </Location> Freitag, 17. Februar 2006 S. 146: http://localhost/cgi-bin/hallowelt.bat : @echo off echo Content-Type: text/html echo. __________________________________________________________________________________________ Datei: D:\579891904.doc. Seite 2 von 25. Buch „Apache für Dummies“ __________________________________________________________________________________________ echo Hallo Welt als Batch-Datei -----Ein kostenloser Free Borland C++ Builder Compiler für Windows: http://www.borland.com/bcppbuilder/freecompiler/ Habe von Buch-CD (H:\WEB\Apache_fuer_Dummies\tools\BorlandC++5.5) installiert in D:\C. http://localhost/cgi-bin/hallowelt.exe : #include <stdio.h> int main() { printf("Content-type: text/html\n\n"); printf("<html><body>"); printf("<h1> Hallo Welt in C!</h1>"); printf("</html></body>"); return 0; } S.150: http://localhost/cgi-bin/beispiel1.shtml - geht nicht! Hier nur die Scripte sollen stehen. Fehler: \ statt / in Tag! [Sat Feb 18 18:51:57 2006] [error] [client 127.0.0.1] D:/Programme/Apache/Apache2/cgibin/beispiel1.shtml is not executable; ensure interpreted scripts have "#!" first line httpd.conf: <Directory "D:/Programme/Apache/Apache2/htdocs"> # # The Options directive is both complicated and important. Please see # http://httpd.apache.org/docs-2.0/mod/core.html#options # for more information. # #§§§§ 2006/02/18 Options Indexes FollowSymLinks Options Indexes FollowSymLinks Includes #§§§§ 2006/02/18 Options Indexes FollowSymLinks AddType text/html .shtml AddOutputFilter INCLUDES .shtml C:\apache\conf: <Directory "/Apache/htdocs"> #2006/02/21 Options Indexes FollowSymLinks MultiViews Options Indexes FollowSymLinks MultiViews Includes __________________________________________________________________________________________ Datei: D:\579891904.doc. Seite 3 von 25. Buch „Apache für Dummies“ __________________________________________________________________________________________ # #2006/02/21 AddType text/html .shtml AddHandler server-parsed .shtml http://localhost/beispiel1.shtml - in Verzeicnis htdocs! <html><head><title> Server Side Includes Testing</title></head> <body> <h1>Server Side Includes</h1> Datum/Uhrzeit auf dem server-Rechner: <!--#echo var="DATE_LOCAL"--><br> Name dieser HTML-Datei: <!--#echo var="DOCUMENT_NAME"--><br> Installierte Server-Software: <!--#echo var="SERVER_SOFTWARE"--><br> Ihr WWW-Browser: <!--#echo var="HTTP_USER_AGENT"--><br> </body></html> http://localhost/beispiel2.shtml : (Ok bei C:\ Apache 1.3.20) <html><head><title> Server Side Includes Testing</title></head> <body> <h1>Server Side Includes 2</h1> Der Inhalt des aktuellen Verzeichnisses: <pre> <!--#exec cmd="DIR"--> </pre> </body></html> Aber es geht nicht!: [Sat Feb 18 18:59:13 2006] [error] [client 127.0.0.1] (OS 2)Das System kann die angegebene Datei nicht finden. : Failed to read cgi file DIR for testing [Sat Feb 18 18:59:13 2006] [error] [client 127.0.0.1] (OS 2)Das System kann die angegebene Datei nicht finden. : don't know how to spawn cmd child process: D:/Programme/Apache/Apache2/htdocs/beispiel2.shtml http://localhost/beispiel2_help.shtml http://localhost/beispiel2bat.shtml http://localhost/beispiel2z.shtml http://localhost/beispiel3.shtml (funktioniert!): <html><head><title> Server Side Includes Testing</title></head> __________________________________________________________________________________________ Datei: D:\579891904.doc. Seite 4 von 25. Buch „Apache für Dummies“ __________________________________________________________________________________________ <body><h1>Server Side Includes 3</h1> <!--#if expr="$HTTP_USER_AGENT = /MSIE/" --> <h1>Holla! Internet Explorer!</h1> <!--#else --> <h1>Holla! Kein Internet Explorer!</h1> <!--#endif --> </body></html http://localhost/beispiel4a.shtml (funktioniert!): <html><head><title> Server Side Includes Testing</title></head> <body> <h1>Server Side Includes 4</h1> <h2><!--#include virtual = "beispiel4b.txt" --></h2> <br>------------<br> include virtual = "beispiel2.shtml" - wird interpretiert! <h3><!--#include virtual = "beispiel2.shtml" --></h3> <br>------------<br> include virtual = "beispiel1.shtml" - wird interpretiert und bearbeitet! <h3><!--#include virtual = "beispiel1.shtml" --></h3> </body></html> Eine komplette Übersicht über alle SSI-Anweisungen: http://httpd.apache.org/docs/mod/mod_include.html Einige Seite wurden kopiert in H:/WEB/Apache_fuer_Dummies S.161 Perl: H:\WEB\Apache_fuer_Dummies\perl\win\mod_perl1.26\mod_perl.so kopieren in D:\Programme\Apache\Apache2\modules Path - H:\Perl\bin Datei htppd.conf: #§§§§ 2006/02/20 <Directory "D:/Programme/Apache/Apache2/htdocs/mod-perl"> SetHandler perl-script PerlHandler Apache::Registry Options ExecCGI PerlSendHeader On Allow from all </Directory> #§§§§ 2006/02/20 #§§§§ 2006/02/20 LoadModule perl_module modules/mod_perl.so #§§§§ 2006/02/20 __________________________________________________________________________________________ Datei: D:\579891904.doc. Seite 5 von 25. Buch „Apache für Dummies“ __________________________________________________________________________________________ S.162 Mit der Anweisung SetHandler perl-script aktivieren Sie den Perl-Handler für dieses Verzeichnis. Über Apache::Registry wird die Ausführung über den Webserver vermittelt. S.166 Mit der Anweisung PerlSetVar legen Sie das Verzeichnis für die globalen Variablen bzw. die so genannten Include-Dateien fest. D:\Programme\Apache\Apache2\htdocs\mod-perl\hello-modperl.pl: print "Content-type: text/html\n\n"; #### print "Content-Type: text/html\n\"; -Error in Header print "<HTML>"; print "<BODY><center><b>Hello MOD - Perl</b>"; print "</BODY ></HTML>"; Dieses sehr einfache Skript veranschaulicht gut den programmiertechnischen Unterschied zu Perl über CGI. Es fehlt der Pfad zum Interpreter. Das nimmt Ihnen das Apache-Perl_Modul ab. Das Modul selbst erkennt wiederum das Skript anhand der Endung, in diesem Fall also „.pl“. Dennoch ein Fehler wir gemeldet: „das Modul mod_perl.so wurde nicht gefunden worden“; vielleicht, weil neue Apache-Version installiert wurde. http://localhost/mod-perl/hello-modperl.pl : Geht nicht auch in C:\ Apache 1.3.20, Error: Bareword found where operator expected at /apache/htdocs/mod-perl/hello-modperl.pl line 4, near "/b>"; print "</BODY" (Might be a runaway multi-line // string starting on line 3) (Missing operator before BODY?) String found where operator expected at /apache/htdocs/mod-perl/hello-modperl.pl line 4, at end of line (Missing operator before ?) [Tue Feb 21 10:52:36 2006] [error] Can't find string terminator '"' anywhere before EOF at /apache/htdocs/mod-perl/hello-modperl.pl line 4. http://localhost/mod-perl/drivers.pl : (Ok C:\ Apache 1.3.20) #!C:\perl\bin\perl -w #available Drivers use DBI; print "Content-type: text/html\n\n"; @drivers = DBI->available_drivers; print " <center><b>available Drivers are:</b><p>"; foreach (@drivers) {print " $_<br>"; } <stdin> http://localhost/mod-perl/mysqlconnect.pl : __________________________________________________________________________________________ Datei: D:\579891904.doc. Seite 6 von 25. Buch „Apache für Dummies“ __________________________________________________________________________________________ Installation MySQL zuerst ist erforderlich! S.240 Von H:\WEB\Apache_fuer_Dummies\mysql\win\mysql3.23.49\mysql-3.23.49-win.zip\setup in C:\mysql (wenn in anderes Verzeichnis, da entsteht Datei my.ini). C:\mysql\bin\winmysqladmin.exe : Username: vater Password: vater http://localhost/mod-perl/mysqlconnect.pl : Useless use of string in void context at /apache/htdocs/mod-perl/mysqlconnect.pl line 13. DBI->connect(mysql) failed: Access denied for user: 'vater@localhost' (Using password: YES) at /apache/htdocs/mod-perl/mysqlconnect.pl line 13 [Tue Feb 21 12:15:57 2006] [error] Can't call method "prepare" on an undefined value at /apache/htdocs/mod-perl/mysqlconnect.pl line 15. S.263, MySql-Monitor starten ohne Passwort: C:\mysql\bin\mysql –h localhost –u root http://localhost/mod-perl/mysqlconnect.pl : (Ok) !C:\perl\bin\perl.exe -w #Connecting MySQL use DBI; print "Content-type: text/html\n\n"; my $db = "mysql"; # Name Database my $SQL_Driver = "mysql"; # Name Driver ##my $SQL_User = "vater"; my $SQL_User = "root"; # Name User ##my $SQL_Passw = "vater"; my $SQL_Passw = ""; # Name Password if required my $dbconn = DBI->connect("DBI:$SQL_Driver:$db", $SQL_User, $SQL_Passw) or "Connection failed: $DBI::errstr\n"; my $table = $dbconn->prepare("SELECT * FROM host"); #here we take the table host $table->execute(); print "<B>And the Result is:</B>:<p>"; my $rows = DBI::dump_results($table); #Giving out all insert data <stdin> __________________________________________________________________________________________ Datei: D:\579891904.doc. Seite 7 von 25. Buch „Apache für Dummies“ __________________________________________________________________________________________ S.166 ASP – Active Server Pages, für Microsofr und Visual Basic Script. Mod-perl hat nichts mit ASP zu tun, dafür kann zwar die übliche Endung “.asp.” benutzt werden. C:\Apache\conf\httpd.conf: #§§§§ 2006/02/21 (oder durch <Directory..> oder mit der Anweisung PerlSetVar) <Files ~ (\.asp)> SetHandler perl-script PerlHandler Apache::ASP </Files> S.166: Ein kleines ASP-Skript ist hinterlegt unter: http://www.apache-asp.org Auffällig ist die konsequente Nutzung der ASP-Tags <% für Anfang und %> für das Ende eines Scripts. Ansonsten schreibt man Perl in test.asp. http://localhost/asp/test.asp : (aber dennoch Datei kann nicht geöffnet werden!) http://localhost/test.asp (C:\Apache\htdocs\test-asp - Datei wurde geöffnet, aber nicht gearbeitet) <html> <body> For loop incrementing font size: <p> <% for (1..5) { %> <!-- iterared html text --> <font size="<%=$_%>" > Size = <%=$_%> </font> <br> <% } %> </body> </html> C:\Apache\asp\env.html (oder http://localhost/env.html ): <!--#include file=header.inc--> <H3>Environment variables</H3> <UL> <% foreach my $key (sort (keys(%ENV))) { %> <LI><b> <%=$key%></b>: <%=$Request->ServerVariables($key)%> </LI> <% } %> </UL> <!--#include file=footer.inc--> C:\Apache\asp\Header.inc : <HTML> __________________________________________________________________________________________ Datei: D:\579891904.doc. Seite 8 von 25. Buch „Apache für Dummies“ __________________________________________________________________________________________ <HEAD><TITLE><Using Apache::ASP</TITLE> </HEAD><BODY> C:\Apache\asp\Footer.inc : </BODY> </HTML> Aber: [Wed Feb 22 09:49:54 /apache/htdocs/env.html 2006] [error] [client 127.0.0.1] File does not exist: S.168 – Visual Basic Asp Für Visual Basic ASP: Die Einrichtung des IIS (Internet Information Server) auf einen Alternativport Die Einrichtung des Apache für das Redirection von ASP-Dateien Verwaltung-> Internet-Informationsdienste (IIS V 5.1) -> ... Standartwebseite ->(rechte Maustaste)-> Eigenschaften -> kann unter TCP Anschluss die Portnummer auf Port 85 geändert werden. Beachen Sie bitte das Rechesystem des IIS. Unter Verzeichnisssicherheit muss eine Anonyme Anmeldung für das Hauptverzeichnis möglich sein, sollten Sie auch von außerhalb zugreifen wollen. Nun können Sie den IIS starten. Verwaltung->Dienste->WEB-Publishing Der IIS läuft jetzt auf Port 85. httpd.conf: #§§§§ 2006/02/27 (für VB durch IIS) RedirectPermanent "/asp-bin" http://localhost:85 #§§§§ 2006/02/27. Diese Anweisung bedeutet, dass permanent alle Anfragen von Dateien für das (fiktive) Apache-Unterverzeicnis asp-bin in die URL http://localhost:85 weitergeleitet werden. Alle ASP-Dateien liegen hierfür im Hauptdokumentenverzeichnis des IIS, per Default also unter C:\Inetpub\wwwroot\. (Oder: RedirectPermanent "/asp-bin" http://localhost:85/asp.bin Zuvor müssen Sie allerdings das Verzeichnis asp-bin im Verzeichnissystem des IIS integrieren.) Danach wird die Anfrage auf die Datei daytime.asp über http://localhost/asp-bin/daytime.asp an http://localhost:85/daytime.asp weitergeleitet. __________________________________________________________________________________________ Datei: D:\579891904.doc. Seite 9 von 25. Buch „Apache für Dummies“ __________________________________________________________________________________________ aber geht nicht! – “Connection "conn" cannot connect” (Nach dem Start des Tomcat geuh auch nicht) – „Die angeforderten Daten können nicht gedownloadet werden“ C:\Inetpub\wwwroot\daytime.asp: <%@ Language="VBScript" %> <!---daytime.asp---> <head> <title> daytime.asp - durch IIS!</title> </head> <html> <body bgcolor="orange"> <b>VB shows the Daytime: <% Response.Write time%> </b><br> <b>VB shows the Date: <%=date %> </b> </body> </html> In IIS habe IP-Adresse gesetzt (stand vorher keine!) Neustart des Rechners: Starten ISS Starten Apache Wieder nichts! In IIS habe IP-Adresse 127.0.0.1 gesetzt. S.170 http://localhost/mod-perl/einmaleins.pl nicht!): (ok; aber nur beim einigen kleinen Fehler geht print "Content-type: text/html\n\n"; print "<html>"; print "<head>"; print "<TITLE>ein mal eins </TITLE>"; print "</head>"; print "<body bgcolor = #ffffff>"; print "<h1> ein mal eins </h1>"; print "<table border =1>"; print "<tr>"; print "<td></td>"; for ($i=1;$i<=10;$i++) { print "<td><b>$i</b></td>"; } print "</tr>"; for ($j=1;$j<=10;$j++) __________________________________________________________________________________________ Datei: D:\579891904.doc. Seite 10 von 25. Buch „Apache für Dummies“ __________________________________________________________________________________________ { print "<tr>"; print "<td><b>$j</b></td>"; for ($i=1;$i<=10;$i++) { print "<td>",($i*$j),"</td>"; } print "</tr>"; } print "</table>"; print "</body>"; print "</html>"; http://localhost/mod-perl/zahlenraten.pl (mit dem Surfer interagieren): use CGI; $form=new CGI; $geraten=$form->param("geraten"); $zufall=$form->param("zufall"); $zaehler=$form->param("zaehler"); print "Content-type: text/html\n\n"; print "<html>"; print "<head>"; print "<TITLE>Zahlenraten </TITLE>"; print "</head>"; print "<body>"; print "<h1> Zahlenraten mit Perl! </h1>"; if ($geraten!="") { print "<h1>"; print &richtig($geraten); print "</h1>"; print "($zaehler Versuch)<p>"; } else { print "<h1> Rate meine Zahl!</h1>"; &neustart(); } print "<form method=post>"; print "<input type=text name=geraten>"; print "<input type=submit value=Submit>"; print "<input type=hidden name=zaehler"; print " value=\"".$zaehler."\">"; #print "<input type=hidden name=zufall"; print "<input type=text name=zufall"; __________________________________________________________________________________________ Datei: D:\579891904.doc. Seite 11 von 25. Buch „Apache für Dummies“ __________________________________________________________________________________________ print " value=\"".$zufall."\">"; print "</form>"; print "</body>"; print "</html>"; sub richtig { $zaehler++; # if(@_[0]==$zufall) - statt & besser die $ benutzen) if($_[0]==$zufall) { $x=$zaehler; &neustart(); return "Richtig! Nur $x Versuche! Noch mal??"; } # elsif(@_[0]>$zufall) elsif($_[0]>$zufall) { return "Zu gross!!"; } else { return "Zu klein!!"; } } sub neustart { $zufall=int(rand(99)+1); $zaehler=0; } S.175 PHP und JSP (Java Server Pages) sind mit HTML-Seite geschrieben und dann vom Vebserver zur Ausführung gebracht. PHP - Programm bei jedem Aufruf der Website neu gestartet wird und wenn die Webseite übertragen wurde, ist auch das PHP – Programm abgelaufen und wird beendet. Bei JSP hingegen wird das Programm beim Starten des Webservers mit gestartet und läuft dann permanent (egal ob die JSP - Webseite gerade aufgerufen wird oder nicht). Jeder Aufruf einer JSP – Webseite wird dann von diesem einen – immer laufenden – JSP – Programm erledigt. PHP unter MS Windows. A. Als CGI integrieren (das ist empfohlene Alternative zu de Ausführung über das PHP4-Modul). Schritt 1: PHP entpacken H:\WEB\Apache_fuer_Dummies\php\win\php4.1.1\php4.1.1.zip\php.exe __________________________________________________________________________________________ Datei: D:\579891904.doc. Seite 12 von 25. Buch „Apache für Dummies“ __________________________________________________________________________________________ extrahieren (in C:\PHP) Schritt 2: PHP über die php.ini konfigurieren php.ini-dist in php.ini benennen und anpassen. Schritt 3: Den Apache über die httpd.conf anpassen In Section 2 „Main“: #§§§§ 2006/02/23 ScriptAlias /php4 "C:/php" Action application/x-httpd-php .php /php4/php.exe #§§§§ Der Pfad zu der ausführenden php.exe setzen. AddType application/x-httpd-php .php .php3 .php4 .phtml #§§§§ Dem Apache die Dateiendungen und Pfad bekannt machen, #§§§§ die über die php.exe ausgeführt werden sollen. #§§§§ 2006/02/23 und auch Options ExecCGI nicht vergessen. Z.B.: <Directory "/Apache/htdocs"> Options Indexes FollowSymLinks MultiViews Includes ExecCGI AllowOverride None Order allow,deny Allow from all </Directory> Schritt 4: PHP testen http://localhost/phpinfo.php4 <html> <head> <title> Status PHP 4</title> </head> -(ohne <body> !) <? phpinfo(); ?> </body> </html> Werden viele Informationen ausgegeben. B. Windows erhält ein Modul. Schritt 1: PHP4ts.dll in das System32 – Verzeichnis kopieren (nach der Anpassung php.ini, in einigen Fällen ist es notwendig diese Datei auch in Windows-Verzeichnis zu transferieren) Schritt 2: Wenn Ihr PHP - Verzeichnis nicht C:\php heißt, Systemvariable PATH anpassen (z.B. PATH=C:apache\php4\dlls= __________________________________________________________________________________________ Datei: D:\579891904.doc. Seite 13 von 25. Buch „Apache für Dummies“ __________________________________________________________________________________________ Schritt 3: php4apache.dll als SO – Modul einsetzen H:\WEB\Apache_fuer_Dummies\modules\mod_php\win\ php4apache.so in C:\Apache\modules Schritt 4: Den Apache über die httpd.conf anpassen LoadModule php4_module modules/php4apache.so AddType application/x-httpd-php .php .php3 .php4 .phtml Schritt 5: Neustart des Apache http://localhost/hallowelt.php : <html> <head> <title> Hallo Welt mit PHP</title> </head> <body> <? for ($i=0;$i<10;$i++) { echo "Hallo Welt!<br>"; } ?> </body> </html> http://localhost/einmaleins.php : <html> <head> <TITLE>ein mal eins PHP</TITLE> </head> <body bgcolor = #ffffff> <h1> ein mal eins PHP</h1> <table border =1> <? echo "<tr>"; echo "<td></td>"; for ($i=1;$i<=10;$i++) { echo "<td><b>$i</b></td>"; } __________________________________________________________________________________________ Datei: D:\579891904.doc. Seite 14 von 25. Buch „Apache für Dummies“ __________________________________________________________________________________________ echo "</tr>"; for ($j=1;$j<=10;$j++) { echo "<tr>"; echo "<td><b>$j</b></td>"; for ($i=1;$i<=10;$i++) { echo "<td>",($i*$j),"</td>"; } echo "</tr>"; } ?> </table> </body> </html> S.195. So genannte PHP Session Management – hier kann man im PHP-Programm definieren, welche Variablen man bis zum nächsten Aufrufen des PHP-Programms behalten möchte, z.B. über Cookies. Beispiel: Zahlenraten. http://localhost/zahlenraten.php : <html> <head> <TITLE>Zahlenraten mit PHP</TITLE> </head> <body> <h1> Zahlenraten mit PHP! </h1> <? if ($geraten!="") { echo "<h1>"; echo richtig($geraten); echo "</h1>"; echo "($zaehler Versuch)<p>"; } else { echo "<h1> Rate meine Zahl!</h1>"; neustart(); } ?> <form method=post> <input type=text name=geraten> <input type=submit value=Submit> <input type=text name=zaehler value="<? echo $zaehler; ?>"> __________________________________________________________________________________________ Datei: D:\579891904.doc. Seite 15 von 25. Buch „Apache für Dummies“ __________________________________________________________________________________________ <input type=text name=zufall value="<? echo $zufall; ?>"> </form> </body> </html> <? function richtig($v) { global $zaehler, $zufall; $zaehler++; if($v==$zufall) { $x=$zaehler; neustart(); return "Richtig! Nur $x Versuche! Noch mal??"; } else if($v>$zufall) { return "Zu gross!"; } else { return "Zu klein!"; } } function neustart() { global $zaehler, $zufall; srand((double)microtime()*1000000); $zufall=rand(1,100); $zaehler=0; } ?> Java OOP – ein Programm wird nicht nach Funktionen in Unterprogramme unterteilt, sondern nach „Objekten“ unterteilt, die im Programm – Szenario vorkommen. Ein Objekt ist das tatsächliche im Speicher des Rechners liegende und laufende Programm. Damit das Objekt aber in den Speicher gelangen kann, muss es programmiert werden. Das, was man programmiert, ist die Klasse. Sehr, sehr vereinfacht dargestellt!. http://www.eclipse.org Programmieren. - eine Java-Entwicklungsumgebung für ernsthaftes Java- Es gibt zwei Möglichkeiten, Java in einem Webserver einzusetzen: Java Server Pages (ähnlich wie PHP eingesetzt, aber startet nur einmal beim Starten des JSP-Servers – JSP Engine oder JSP Container) Servlets (kann man mit CGI vergleichen – das Java-Servlet-Programm erzeugt bei jedem Aufruf eine komplette Webseite, die dann zum Browser des Surfers geschickt __________________________________________________________________________________________ Datei: D:\579891904.doc. Seite 16 von 25. Buch „Apache für Dummies“ __________________________________________________________________________________________ wird, startet auch nur einmal beim Starten des Servlet-Servers – ServletEngine oder Servlet Container) Die bekannteste Software, die diese Engines ermöglicht, ist Tomcat. Tomcat löst das ApacheModul mod_jserv als Servlet Engine ab. S.216 - Installation unter Windows. Java Development Kit: H:\WEB\Apache_fuer_Dummies\java\win\jsdk2\j2sdk-1_3_1-win.exe - in H:\Java wurde installiert. Tomcat (aktuelle Version: http://jakarta.apache.org/tomcat/ ): 1. Den Tomcat installieren H:\WEB\Apache_fuer_Dummies\java\win\tomcat\tomcat4.0.1\jakarta-tomcat-4.0.1.exe in H:\Tomcat4\Apache Tomcat4.0 2. Neue Variable zu vermitteln: CATALINA_BASE=H:\Tomcat4\Apache Tomcat 4.0 CATALINA_HOME= H:\Tomcat4\Apache Tomcat 4.0 CLASSPATH= H:\ H:\Tomcat4\Apache Tomcat 4.0\bin\bootstrap.jar;H:\Java\lib\tools.jar JAVA_HOME= H:\Java 3. Der erste Start H:\Tomcat4\Apache Tomcat 4.0\bin\startup.bat 4. Der erste Tomcat auf Ihren Browser http://localhost:8080 - Ok! 5. Den Tomcat nachträglich konfigurieren (falls notwendig) server.xml in dem conf-Verzeichnis. Mod_webapp im Apache einbinden: H:\WEB\Apache_fuer_Dummies\modules\mod_webapp\win\mod_webapp.so und libapr.dll in C:\Apache\modules kopieren. In httpd.conf: LoadModule webapp_module modules/mod_webapp.so #um die weiterletung zum Tomcat zu realisieren (nur innerhalb eines VirtualHost#Containers): WebAppConnection conn warp localhost:8008 WebAppDeploy examples conn /examples VirtualHost-Container: #§§§§ 2006/02/23 (für Tomcat): <VirtualHost 127.0.0.1> __________________________________________________________________________________________ Datei: D:\579891904.doc. Seite 17 von 25. Buch „Apache für Dummies“ __________________________________________________________________________________________ ServerAdmin rootr@apache DocumentRoot "C:/apache/htdocs/manual" ServerName 127.0.0.1 WebAppConnection conn warp localhost:8008 WebAppDeploy examples conn /examples/ <Directory "C:/apache/htdocs/manual"> Options Indexes Includes FollowSymLinks MultiViews Order allow, deny Allow from all </Directory> </VirtualHost> Tomcat-Verzeichnis mit dem Namen webapps ist wie htdocs im Apache. Dort werden auch alle Java Servlets und Java Server Pages (wie PHP mit einer verbindlichen Endung namens .jsp) ausgeführt. Testen: http://localhost/examples/ (entspricht dem direkten Zugang zum Tomcat unter http://localhost:8080/examples/ ) - Ok. Damit ist die „Connection“zwischen dem Apache „vorne“ und dem Tomcat „hinten“ über mod_webapp hergestellt. (Tomcat muss zuerst gestartet werden!) Es wird das Inhalt des Verzeichnisses H:\Tomcat4\Apache Tomcat 4.0\webapps\examples ausgegeben. Beispiel - H:\Tomcat4\Apache Tomcat 4.0\webapps\examples\HelloWorld.jsp und Ausruf über http://localhost/examples/HelloWorld.jsp : <html> <head> <title>HelloWorld.jsp</title> </head> <%@ page session="false"%> <body bgcolor="#FFFFFF"> <% out.print("<center><h2>Hello World</h2></center>"); %> </body> </html> Wenn diese Date geändert wird; verändern auch automatisch die Dateien HelloWorld$jsp.java und HelloWorld$jsp.class in H:\Tomcat4\Apache Tomcat 4.0\work\localhost\examples (oder H:\Tomcat4\Apache Tomcat 4.0\work\127.0.0.1\examples). Aver wann und warum genau? Habe HW.jsp eingegeben. http://localhost/examples/HW.jsp - ok. Erstellung eines Programms in der Datei: H:\Tomcat4\Apache Tomcat 4.0\webapps\ROOT\WEB-INF\classes\helloworld.java: import java.io.*; import javax.servlet.*; import javax.servlet.http.*; __________________________________________________________________________________________ Datei: D:\579891904.doc. Seite 18 von 25. Buch „Apache für Dummies“ __________________________________________________________________________________________ public class helloworld extends HttpServlet { int b=0; public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<body>"); out.println("<head>"); out.println("<title>Hello, world!</title>"); out.println("</head>"); out.println("</body>"); out.println("<h1>Hello, world mit Java-Programm!</h1>"); for(int i=1;i<10;i++) { out.println(i); } out.println("<p>"); out.println("<b="+b+")"); b++; out.println("</body>"); Der Tomcat ist nicht in der Lage, dieses Java-Programm von sich aus zu übersetzen, das kann er nur bei JSP-Programmen automatisch. Sie müssen also selbst das Java-Programm übersetzen. „öffnen mit“: H:\Java\bin\javac helloworld.java JavaTrans.bat: H:\Java\bin\javac helloworld.java <stdin> Aber DOS-Fenster ist schnell vorbei. Braucht man JavaBuilder! Von SIEMENS-CD habe installiert und deinstalliert. Wieder: F:\install_windows.exe – full in H:\JBuilder6 Auch Dreamweaver scheint innerhalb sein! Aber fordert Key! Näher: F:\Windows\register_jb.html Von F:\Jdk1.4\j2-sdk-1_4_0-win.exe und j2-sdk-1_4_0-doc.zip in H:\J2SDK_4 S.223 - Sie müssen dem Java-Compiler mittteilen, wo er Informationen über Servlrts findet; __________________________________________________________________________________________ Datei: D:\579891904.doc. Seite 19 von 25. Buch „Apache für Dummies“ __________________________________________________________________________________________ export CLASSPATH= H:\Tomcat4\Apache Tomcat 4.0\common\lib\servlet.jar Habe gegeben CLASSPATH= H:\Tomcat4\Apache Tomcat 4.0\bin\bootstrap.jar; H:\Tomcat4\Apache Tomcat 4.0\common\lib\servlet.jar H:\J2SDK_4\lib\tools.jar; Danach Ok! Erscheint die Datei Helloworld.class neben der Java-Datei- In dieser Datei befindet sich das übersetzte, lauffähige Java-Programm. Statten Sine nun Ihren Tomcat und rufen Sie folgende URL in Ihrem Browser auf: http://localhost:8080/servlet/helloworld : aber geht nicht. Ein Versuch: nicht. http://localhost:8080/webapps/ROOT/WEB-INF/classes/helloworld - geht S.228 Der große Nachteil von Java-Servlets - nach jedem Ändern des Java-Programms müssen Sie es umständlich neu übersetzen und auch noch den Tomcat neu starten. Mit JSP ist es viel einfacher: Der Tomcat kann automatisch die Java-Programme übersetzen und auch das Neustart entfällt bei einfachen JSP-Programmen. In der Realität werden Programme aber viel zu groß; als dass mann sie komplett in JSP implementieren würde. Aus diesem Grund wird man bei größeren Projekten aus der JSP-Seite auf andere Java-Klassen zugreifen und nur die Programmteile, die die Ein- und Ausgabe steuern, und vielleicht noch die Programmsteuerung selbst in JSP implementieren. In diesem Beispiel wollen wir das Zahlentaten in JSP implementieren. Ein Teil wird als ganz einfache Java-Bean implementiert. Den Rest implementieren wir dann als JSP-Seite. 1.Ein Java-Programm in H:\Tomcat4\Apache INF\classes\zr\zahlenraten.java erstellen: Tomcat 4.0\webapps\ROOT\WEB- package zr; import java.util.Random; public class zahlenraten { int zufall; int zaehler; public zahlenraten() { reset(); } public String richtig(int v) { zaehler++; if(v==zufall) { int x=zaehler; __________________________________________________________________________________________ Datei: D:\579891904.doc. Seite 20 von 25. Buch „Apache für Dummies“ __________________________________________________________________________________________ reset(); return "Richtig! Nur "+x+" Versuche! Noch einmal??"; } else if(v>zufall) { return "Zu gross!"; } else { return "Zu klein!"; } } public int wieoft() { return zaehler; } public void reset() { zufall=Math.abs(new Random().nextInt()%100+1); zaehler=0; } } 2. Übersetzen, z.B. durch H:\Tomcat4\Apache INF\classes\zr\JavaTr_zahlenraten.bat : Tomcat 4.0\webapps\ROOT\WEB- H:\J2SDK_4\bin\javac zahlenraten.java More Neue Datei zahlenraten.class entstand. 3. Erstellen die Datei H:\Tomcat4\Apache Tomcat 4.0\webapps\ROOT\ zahlenraten.jsp : <html> <head><TITLE>Zahlenraten mit JSP ind Java-Bean</TITLE></head> <body> <h1> Zahlenraten mit JSP und Java! </h1> <jsp:useBean id="zahl" class="zr.zahlenraten" scope="session"/> <% int i; if (request.getParameter("geraten")!=null) { out.println("<h1>"); i=Integer.parseInt (request.getParameter("geraten")); out.println(zahl.richtig(i)); out.println("</h1>"); out.println ("("+zahl.wieoft()+" Versuch)<p>"); __________________________________________________________________________________________ Datei: D:\579891904.doc. Seite 21 von 25. Buch „Apache für Dummies“ __________________________________________________________________________________________ } else { out.println ("<h1> Rate meine Zahl!</h1>"); } %> <form method=get> <input type=text name=geraten> <input type=submit value=Submit> </form> </body> </html> http://localhost:8080/zahlenraten.jsp - ok!: S.249 – FTP Nier geht es um die Konfiguration eines FTP-Servers im Zusammenspiel mit dem Apache. Erlauben Sie Ihren Benutzern, Ihren eigenen Webserver zu betreiben und auch Inhalte zu verändern. H:\WEB\Apache_fuer_Dummies\ftp\win\niteserver\niteserver.zip Ist gratis unter http://home.knuut.fe/Turtie erhältlich. In H:\Web – dummes Programm H:\WEB\Apache_fuer_Dummies\ftp\win\bulletproff_trial\gftpserv.zip Software-> Windows-Komponenten hihzufügen/Enfernen -> Internet-Informations Dienste (IIS) (FTP in Details kreuzen) – aber nur zum Teil installiert werden (WWW.Dienst ist grau) Verwaltung-> Internet-Informationsdienste (IIS V 5.1). 1. Die Einrichtung eines neuen Benutzers (Habe erstellt Verzeichnis H:\Web\Oscar\htdocs für Benutzer Oscar) Systemsteuerung->Benutzerkonten Oscar sollte unbedingt die Mitgliedschaft in der Gruppe Gäste erhalten. (Eingeschränktes Konto, kennwortgeschützt) Kennwort: oscar Und unter Profil muss der lokale Pfad gleich dem FTP-Pfad sein, für Oscar also H:\Web\Oscar\htdocs. Wie das kann schaffen?? Die notwendige Einstellung von Kenn- und Passwort gilt auch für das zukünftige FTPVerzeichnis und sollte dem neuen FTP-User unbedingt mitgeteilt werden. 2. Der virtuelle Host für den Apache __________________________________________________________________________________________ Datei: D:\579891904.doc. Seite 22 von 25. Buch „Apache für Dummies“ __________________________________________________________________________________________ #§§§§ 2006/02/26 (für FTP): <VirtualHost 127.0.0.2> - ?? ServerAdmin root@youserver ServerName Oscar.yourserver DocumentRoot "H:/Web/Oscar/htdocs" ErrorLog "H:/Web/Oscar/logs/error.log" CustomLog "H:/Web/Oscar/access.log" common <Directory "H:/apache/htdocs/cgi-bin"> Order Allow,Deny Allow from all Options +ExecCGI </Directory> </VirtualHost> #§§§§ 2006/02/26. 3. Die Konfiguration des virtuellen FTP-Verzeichnisses Verwaltung-> Internet-Informationsdienste (IIS V 5.1)-Y FTP-Sites->Standart-FTP-Site>(rechte Maustaste) Neu->Virtuelles Verzeichnis: Alias: oscar Pfad: H:\Web\Oscar\htdocs Zulassen: lesen, schreiben 4. Endlich ein Test... H:\WEB\Apache_fuer_Dummies\ftp\win\WS_FTP-Client\wsftppro_german.exe – installiert in H:\Web, aber sollte ihn zuerst kaufen! Wieder deinstaliert. Mit einem FTP-Client Ihrer Wahl soll nun Oscar seinen FTP-Account erreichen können. Anonyme FTP-Verzeichnisse Verwaltung-> Internet-Informationsdienste (IIS V 5.1) -> FTP-Sites->Standart-FTP-Site>(rechte Maustaste) Eigenschaften ->Sicherheitskonten: S.316 Eine Firewall schützt. Eine Firewall ist ein Programm, das den Rechner von unbemerkten und unbefugten Zugriffen von außerhalb schützen soll. http://www.tinysoftware.com Bei der Installation konfiguriert sich die Tiny Personal Firewall automatisch als Dienst. S.323 Die besten Apache-Ressourcen http://httpd.apache.org xml.apache.org perl.apache.org __________________________________________________________________________________________ Datei: D:\579891904.doc. Seite 23 von 25. Buch „Apache für Dummies“ __________________________________________________________________________________________ www.php.net php.apache.org dev.apache.org modules.apache.org jakarta.apache.org apr.apache.org tcl.apache.org http://selfhtml.teamone.de S.341 Die Größten Apache - Webserver: www.apple.com www.ibm.com www.amazon.com www.bbc.co.uk www.ard.de www.spiegel.de www.zeit.de www.gmx.de S.119 Virtuelle Hosts einrichten, zwei Methoden: VirtualHost – Container (IP-basierte: jeder HOST hat eigene IP-Adresse) NameVirtualHost – Container (nur erst ab HTTP 1.1 unterstützt) ###Section 3: Virtual Hosts NameVirtualHost 10.20.30.1 <VirtualHOST 10.20.30.1> ServerName www.piggi.net .... </Virtual Host> <VirtualHOST 10.20.30.1> ServerName www.gonzo.com .... </Virtual Host> Beim Windows-Rechner “client02” sollte die hosts folgende Zeilen aufweisen: 127.0.0.1 localhost 10.20.30.2 client02 10.20.30.3 client03 10.20.30.1 server 10.20.30.1 www.piggi.net 10.20.30.1 www.gonzo.com Dienstag, 28. Februar 2006 S.115 MultiViews – jeder Dateiname wird um ein Länderkürzel erweitert und je nachdem, welche Sprache ein Benutzer in seinem Browser eingestellt hat, bekommt er eine entsprechende Datei vom Apache angezeigt – etwa index.html.de, index.html.ru etc. __________________________________________________________________________________________ Datei: D:\579891904.doc. Seite 24 von 25. Buch „Apache für Dummies“ __________________________________________________________________________________________ Ein Prozess ist einfach ein laufendes Programm auf dem Rechner und ein Thread ist quasi ein laufendes Prozess innerhalb eines Prozess. S.120. Namenbasierte virtuelle Hosts – nur ab HTTP 1.1 – der Browser möchte die URL www.piggy.net auf unseren Apache anfragen. Um nun zu wissen, welche IP-Nummer www.piggy.net nun wirklich hat, nutzt der Client entweder einen DNS-Dienst oder ganz einfach die Hosttabellen auf dem lokalen Rechner. Ab http 1.1 wird zusätzlich zu der IPNummer (aus Hosttabelle) der angefragte Domain-Name mit geschickt. Daran erkenn der Apache, das es sich um eine Anfrage für den virtuellen Host www.piggy.net handelt. S.263 E-Mail SMTP ist das Protokoll, über das sich alle Mail-Server im Internet miteinander verständigen. SMTP wieder wirklich nur zum Verschicken der Mails verwendet. Für den Empfang von EMail – also z.B. vom Mail-Server Ihres Providers zu Ihrem Windows- oder Linux-Rechner – gibt es zwei eigene Protokolle: das Post Office Protocol (POP) ind das Internet Message Access Protocol (IMAP). Sendmail-Server für Windows: http://www.indigostar.com Es gibt einmonatige Trialversion (auch auf Buch-CD). Das Programm IndigiMail hat eine sendmail.exe, die E-Mails über ein Webmailer verschicken kann. Es ist aber kein SMTPServer, sondern benötigt selbst einen externen Postausgangsserver, der E-Mails weiterleitet. Ungefähr so: Über ein Skript innerhalb des Windows-Apache wird eine E-Mail an die sendmail.exe gereicht, die Mail schließlich an den Mail-Server Ihrer offiziellen E-MailAdresse weiterleitet. __________________________________________________________________________________________ Datei: D:\579891904.doc. Seite 25 von 25.