<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet href="/blog/templates/default/atom.css" type="text/css" ?>

<feed 
   xmlns="http://www.w3.org/2005/Atom"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/">
    <link href="http://www.webentwickler.org/blog/feeds/atom.xml" rel="self" title="Blogg'nWickler" type="application/atom+xml" />
    <link href="http://www.webentwickler.org/blog/"                        rel="alternate"    title="Blogg'nWickler" type="text/html" />
    <link href="http://www.webentwickler.org/blog/rss.php?version=2.0"     rel="alternate"    title="Blogg'nWickler" type="application/rss+xml" />
    <title type="html">Blogg'nWickler</title>
    <subtitle type="html">Der Weblog für Webentwickler</subtitle>
    <icon>http://www.webentwickler.org/blog/templates/default/img/s9y_banner_small.png</icon>
    <id>http://www.webentwickler.org/blog/</id>
    <updated>2009-09-09T07:23:58Z</updated>
    <generator uri="http://www.s9y.org/" version="1.4.1">Serendipity 1.4.1 - http://www.s9y.org/</generator>
    <dc:language>de</dc:language>

    <entry>
        <link href="http://www.webentwickler.org/blog/archives/17-Wieviele-Programmiersprachen-gibt-es-eigentlich.html" rel="alternate" title="Wieviele Programmiersprachen gibt es eigentlich?" />
        <author>
            <name>Stephan Beeker</name>
                    </author>
    
        <published>2009-09-09T07:23:58Z</published>
        <updated>2009-09-09T07:23:58Z</updated>
        <wfw:comment>http://www.webentwickler.org/blog/wfwcomment.php?cid=17</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.webentwickler.org/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=17</wfw:commentRss>
    
    
        <id>http://www.webentwickler.org/blog/archives/17-guid.html</id>
        <title type="html">Wieviele Programmiersprachen gibt es eigentlich?</title>
        <content type="xhtml" xml:base="http://www.webentwickler.org/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                So genau kann man das wohl nicht beantworten. Zählt man alle Dialekte dazu, kommt sicherlich einiges zusammen. Auf der Seite <a href="http://hopl.murdoch.edu.au/" title="http://hopl.murdoch.edu.au/" target="_blank">http://hopl.murdoch.edu.au/</a> findet man eine Datenbank mit über 8000 eingetragenen Programmiersprachen. Fast 1300 Programmiersprachen sind auf der Seite <a href="http://99-bottles-of-beer.net/" title="http://99-bottles-of-beer.net/" target="_blank">99 Bottles of Bear</a> gelistet. Hier jeweils mit Beispielcode, der das bekannte Lied mit den 99 Flaschen implementiert. Dabei findet man so esoterische Sprachen wie <a href="http://www.treskal.com/kalle/spl/" title="Shakespeare Programming Language" target="_blank">Shakespeare</a>, eine Sprache, wo der Quelltext aussieht wie ein Shakespeare-Drama. Und natürlich darf auch das gute alte C64 Basic nicht fehlen. <br />
<br />
10 PRINT "Hallo"<br />
20 GOTO 10<br />
<br />
Hallo<br />
Hallo<br />
Hallo<br />
Hallo<br />
Hallo<br />
 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.webentwickler.org/blog/archives/16-Wake-on-LAN-ueber-PHP.html" rel="alternate" title="Wake on LAN über PHP" />
        <author>
            <name>Stephan Beeker</name>
                    </author>
    
        <published>2009-07-06T13:03:29Z</published>
        <updated>2009-08-24T18:35:30Z</updated>
        <wfw:comment>http://www.webentwickler.org/blog/wfwcomment.php?cid=16</wfw:comment>
    
        <slash:comments>1</slash:comments>
        <wfw:commentRss>http://www.webentwickler.org/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=16</wfw:commentRss>
    
            <category scheme="http://www.webentwickler.org/blog/categories/3-Servercoding" label="Servercoding" term="Servercoding" />
    
        <id>http://www.webentwickler.org/blog/archives/16-guid.html</id>
        <title type="html">Wake on LAN über PHP</title>
        <content type="xhtml" xml:base="http://www.webentwickler.org/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Wake on LAN benötigt eine Netzwerkkarte, sowie eine Hauptplatine, die WOL unterstützen. Die Netzwerkkarte muss über Standby mit Strom versorg sein. Ist dies der Fall, kann man der Netzwerkkarte ein sog. Magic Paket senden, was dann zum starten des Rechners führt.<br />
<br />
Dieses Magic Paket enthält sechs mal hintereinander den Wert FF, danach folgt 16 mal die MAC-Adresse der Netzwerkkarte. Für den Versand von so einem Datenpaket gibt es jede Menge Windows-Tools. <br />
<br />
Manchmal möchte man aber das WOL automatisieren, z. B. für das regelmässige sichern von Desktop-Rechnern. An dieser Stelle bräuchte man dann ein Script, das man zeitgesteuert ausführen lassen kann. Genau so ein Problem hatte ich kürzlich zu lösen. Meist bietet sich hier eine Scriptsprache wie Perl oder Windows Power Shell an. Da ich aber am liebsten in PHP programmiere, hab ich das WOL-Script eben mit PHP geschrieben.<br />
<br />
<br />
Hier mal meine Lösung:<br />
<br />
<pre style="font-family: courier; font-size: 8px;">//#!/usr/bin/php -q<br />
#!C:\Program Files\php\php.exe -q<br />
<br />
// -------------------------------------------------------------------------------------------------------------------------<br />
// Main Script<br />
// -------------------------------------------------------------------------------------------------------------------------<br />
// Hosts mit IP und Mac<br />
$hosts = array(<br />
                array('mac' => '00-11-22-FF-EE-AA', 'host' => '192.168.0.55', 'port' => '7')<br />
              );<br />
//<br />
// WOL ausführen<br />
//<br />
try<br />
{<br />
    foreach($hosts as $host)<br />
    {<br />
        pingPC($host);<br />
        if ( $return == 0 )<br />
        {<br />
            echo "Rechner laeuft";<br />
        }<br />
        else<br />
        {<br />
            echo "Rechner aus";<br />
        }<br />
        wakeOnLAN($host['mac'], $host['host'], $host['port']);<br />
    }<br />
}<br />
catch(Exception $e)<br />
{<br />
    echo $e->getMessage();<br />
    exit();<br />
}<br />
// -------------------------------------------------------------------------------------------------------------------------<br />
// WOL Funktion<br />
// -------------------------------------------------------------------------------------------------------------------------<br />
function wakeOnLAN( $macAdress, $host, $port )<br />
{<br />
    $magicPacket = '';              // Magisches Packet für WOL (entsprechend AMD Spec)<br />
    $ff = chr(0xFF);                // notwendiger Hexwert<br />
    $host = 'udp://' . $host;<br />
    //<br />
    // Verbindung aufbauen<br />
    //<br />
    if( !$fp = fsockopen($host, $port, $errno, $errstr, 2) )<br />
    {<br />
        fclose($fp);<br />
        throw new Exception("NetworkException: Es konnte keine Verbindung mit $host [$macAdress] hergestellt werden. Error Message: " . $errstr );<br />
    }<br />
    //<br />
    // Überflüssige Zeichen aus der Mac-Adresse filtern und in Binär-Zeichenkette konvertieren<br />
    //<br />
    $macAdress = preg_replace('/[^a-f0-9]/i', '', $macAdress);<br />
    $macAdressBin = pack('H12', $macAdress);<br />
    //<br />
    // Magic Packet aufbauen<br />
    //<br />
    $magicPacket  = str_repeat($ff, 6);                     // 6 x FF<br />
    $magicPacket .= str_repeat($macAdressBin, 16);          // 16 x Mac-Adresse der Netzwerkkarte<br />
    //<br />
    // Magic Packet senden<br />
    //<br />
    fwrite($fp, $magicPacket);<br />
    fclose($fp);<br />
    return true;<br />
}<br />
function pingPC( $host )<br />
{<br />
    exec("ping $host -n 1", $array, $returnCode);<br />
    return $returnCode;<br />
}</pre><br />
<br />
<br />
 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.webentwickler.org/blog/archives/15-Pong-Movie.html" rel="alternate" title="Pong Movie" />
        <author>
            <name>Stephan Beeker</name>
                    </author>
    
        <published>2009-07-06T12:34:09Z</published>
        <updated>2009-08-24T18:35:46Z</updated>
        <wfw:comment>http://www.webentwickler.org/blog/wfwcomment.php?cid=15</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.webentwickler.org/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=15</wfw:commentRss>
    
            <category scheme="http://www.webentwickler.org/blog/categories/1-Misc" label="Misc" term="Misc" />
    
        <id>http://www.webentwickler.org/blog/archives/15-guid.html</id>
        <title type="html">Pong Movie</title>
        <content type="xhtml" xml:base="http://www.webentwickler.org/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Wer erinnert sich nicht noch an den Videospiel-Klassiker Pong. Das beschauliche Spiel mit den zwei Stäbchen, die sich gegenseitig die rechteckigen Bälle entgegenhauen. Hier lernt man wirklich was "Einfallswinkel = Ausfallswinkel" bedeutet.<br />
<br />
Das aber hinter diesem simplen Spielprinzip doch mehr steckt, zeigt dieses Video:<br />
<br />
<a href="http://staffweb.cms.gre.ac.uk/~cs39/playpong.html" title="Pong Movie">Pong Movie</a><br />
<br />
 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.webentwickler.org/blog/archives/14-PHP-Entwicklung-mit-Netbeans.html" rel="alternate" title="PHP Entwicklung mit Netbeans" />
        <author>
            <name>Stephan Beeker</name>
                    </author>
    
        <published>2009-04-28T12:40:32Z</published>
        <updated>2009-08-24T18:35:57Z</updated>
        <wfw:comment>http://www.webentwickler.org/blog/wfwcomment.php?cid=14</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.webentwickler.org/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=14</wfw:commentRss>
    
            <category scheme="http://www.webentwickler.org/blog/categories/3-Servercoding" label="Servercoding" term="Servercoding" />
    
        <id>http://www.webentwickler.org/blog/archives/14-guid.html</id>
        <title type="html">PHP Entwicklung mit Netbeans</title>
        <content type="xhtml" xml:base="http://www.webentwickler.org/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Netbeans 6.5 (mit PHP Plugin) ist IMHO die derzeit beste Entwicklungsumgebung für PHP. In einem <a href="http://it-republik.de/php/artikel/NetBeans-6.5-for-PHP-vs.-Eclipse-PDT-fuer-Einsteiger-2217.html" title="PHP Magazin" target="_blank">Vergleich zwischen Netbeans 6.5 und Eclipse PDT</a> auf Webseite des PHP Magazins geht Netbeans als Sieger hervor.<br />
<br />
Dass PHP nicht nur irgendsoein Plugin für Netbeans ist, sondern ernsthaft als Entwicklungs-Sprache angesehen wird, merkt man nicht zuletzt daran, dass Netbeans PHP einen eigenen <a href="http://www.netbeans.org/kb/trails/php.html" title="PHP Programme mit Netbeans entwicklen" target="_blank">PHP Learning Trail</a> widmet.<br />
<br />
Und weil Netbeans sehr innovativ ist und viele Informationen auch über Screencasts zur Verfügungstellt, gibt es auch zur PHP Entwicklung auf Netbeans Einführungs-Videos:<br />
<br />
<a href="http://www.netbeans.org/kb/docs/php/project-config-screencast.html" title="PHP und Netbeans I" target="_blank">Demo of PHP support in NetBeans 6.5</a><br />
<br />
<a href="http://www.netbeans.org/kb/docs/php/editor-screencast.html" title="PHP und Netbeans II" target="_blank"><br />
Demo of PHP support in NetBeans 6.5 - Part II: Editor Features</a><br />
<a href="http://www.netbeans.org/kb/docs/php/class-property-variables-screencast.html" title="Class Property Variables" target="_blank"><br />
Class Property Variables in NetBeans IDE 6.5 for PHP</a><br />
<br />
<br />
Zudem gibt es einen eigenen <a href="http://blogs.sun.com/netbeansphp/" title="PHP Netbeans Weblog" target="_blank">Weblog zu PHP mit Netbeans<br />
</a><br />
 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.webentwickler.org/blog/archives/12-Video-Vortrag-ueber-hacken-und-absichern-von-Java-Websites.html" rel="alternate" title="Video Vortrag über hacken und absichern von Java Websites" />
        <author>
            <name>Stephan Beeker</name>
                    </author>
    
        <published>2009-04-14T12:09:16Z</published>
        <updated>2009-08-24T18:36:13Z</updated>
        <wfw:comment>http://www.webentwickler.org/blog/wfwcomment.php?cid=12</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.webentwickler.org/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=12</wfw:commentRss>
    
            <category scheme="http://www.webentwickler.org/blog/categories/5-Security" label="Security" term="Security" />
    
        <id>http://www.webentwickler.org/blog/archives/12-guid.html</id>
        <title type="html">Video Vortrag über hacken und absichern von Java Websites</title>
        <content type="xhtml" xml:base="http://www.webentwickler.org/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                In seinem Vortrag <a href="http://www.parleys.com/display/PARLEYS/Home#talk=26673178;title=How%20to%20hack%20and%20secure%20your%20Java%20web%20application;slide=1" title="How to hack and secure your Java web application - Video 50 min." target="_blank">"How to hack and secure your Java web application"</a> stellt Sebastien Deleersnyder Angriffsszenarien auf Webseiten vor. Sebastien Deleersnyder ist Mitglied der belgischen OWASP Gruppe. OWASP steht für <a href="http://www.owasp.org/index.php/Main_Page" title="OWASP Webseite" target="_blank">Open Web Application Security Project</a>, dabei handelt es sich um eine unabhängige Organisation, die mit der Veröffentlichung von freien Artikeln und Tools zur Sicherheit von Webanwendungen beitragen möchte. Das Video hat eine Länge von ca. 50 Minuten. 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.webentwickler.org/blog/archives/11-Conficker-entfernen.html" rel="alternate" title="Conficker entfernen" />
        <author>
            <name>Stephan Beeker</name>
                    </author>
    
        <published>2009-03-31T08:57:45Z</published>
        <updated>2009-08-24T18:36:22Z</updated>
        <wfw:comment>http://www.webentwickler.org/blog/wfwcomment.php?cid=11</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.webentwickler.org/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=11</wfw:commentRss>
    
            <category scheme="http://www.webentwickler.org/blog/categories/5-Security" label="Security" term="Security" />
    
        <id>http://www.webentwickler.org/blog/archives/11-guid.html</id>
        <title type="html">Conficker entfernen</title>
        <content type="xhtml" xml:base="http://www.webentwickler.org/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Zwei Forscher der Uni Bonn haben einen Netzwerk-Scanner entickelt, über den man nach dem Conficker Wurm suchen kann. Dabei ruft der Scanner die Windows-Funktion NetpwPathCanonicalize() auf, die von Conficker manipuliert wird. Dazu muss allerdings der Port 445 geöffnet sein.<br />
<br />
Ab dem 1. April lädt Conficker Updates aus dem Internet nach, die zu nicht vorhersehbaren Verhalten von Computersystemen führen können.<br />
<br />
Wer sein Netzwerk auf infizierte Systeme scannen möchte, kann <a href="http://honeynet.org/node/388" title="Conficker Scanner Tool" target="_blank">hier</a> den Scanner runterladen. Bei dem Tool handelt es sich um ein Python-Programm. Es gibt aber auch eine compilierte Windows-Exe.<br />
<br />
Nach dem Entpacken kann man in der Dos-Console den Scanner mit <br />
<br />
scs &lt;Start-IP-Adresse&gt; &lt;End-IP-Adresse&gt; <br />
<br />
aufrufen, um ein komplettes Netzwerk zu scannen. Möchte man nur einen einzelnen Rechner scannen, kann<br />
man den Befehl <br />
<br />
scanner &lt;host&gt;<br />
<br />
ausführen. 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.webentwickler.org/blog/archives/10-Fehler-in-Suns-JAR-Entpacker.html" rel="alternate" title="Fehler in Sun's JAR Entpacker" />
        <author>
            <name>Stephan Beeker</name>
                    </author>
    
        <published>2009-03-31T08:18:51Z</published>
        <updated>2009-08-24T18:36:30Z</updated>
        <wfw:comment>http://www.webentwickler.org/blog/wfwcomment.php?cid=10</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.webentwickler.org/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=10</wfw:commentRss>
    
            <category scheme="http://www.webentwickler.org/blog/categories/5-Security" label="Security" term="Security" />
    
        <id>http://www.webentwickler.org/blog/archives/10-guid.html</id>
        <title type="html">Fehler in Sun's JAR Entpacker</title>
        <content type="xhtml" xml:base="http://www.webentwickler.org/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                In dem JAR-Entpacker unpack200 wurde eine <a href="http://sunsolve.sun.com/search/document.do?assetkey=1-66-254570-1" title="Buffer Overflow unpack200 - Hinweiseite von Sun" target="_blank">Buffer-Overflow Lücke</a> entdeckt, die es erlaubt beliebigen Code im Kontext des Benutzers auszuführen zu lassen. Dazu reicht schon der Aufruf einer entsprechend manipulierten Webseite aus. <br />
<br />
Das unpack200 Tool ist ab JDK-Version 1.5 verfügbar und ermöglicht das entpacken von Java Archiven. Die älteren Versionen 1.4.2 und 1.3.1 von JDK/JRE sind laut Sun nicht betroffen.  <br />
<br />
Wer testen möchte, ob seine Java-Installation betroffen ist, kann folgenden Link anklicken und ggf. auf die passende, gefixte Version updaten.<br />
<br />
<a href="http://java.com/en/download/installed.jsp?detect=jre&try=1" title="Verifying Java Version" target="_blank">Verifying Java Version</a><br />
 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.webentwickler.org/blog/archives/9-Neues-von-MySQL.html" rel="alternate" title="Neues von MySQL" />
        <author>
            <name>Stephan Beeker</name>
                    </author>
    
        <published>2009-03-31T06:48:24Z</published>
        <updated>2009-08-24T18:36:39Z</updated>
        <wfw:comment>http://www.webentwickler.org/blog/wfwcomment.php?cid=9</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.webentwickler.org/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=9</wfw:commentRss>
    
            <category scheme="http://www.webentwickler.org/blog/categories/3-Servercoding" label="Servercoding" term="Servercoding" />
    
        <id>http://www.webentwickler.org/blog/archives/9-guid.html</id>
        <title type="html">Neues von MySQL</title>
        <content type="xhtml" xml:base="http://www.webentwickler.org/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Auf der Webseite von MySQL findet man eine neue <a href="http://dev.mysql.com/downloads/mysql/6.0.html" title="Download MySQL 6.0.9 Alpha" target="_blank">Alpha-Verson 6.0.9 von MySQL 6.0</a>. Sie enthält die zwei neue Storage-Enginges - die transaktionale Falcon Engine und die ausfallsichere Maria-Engine. <a href="http://dev.mysql.com/doc/refman/6.0/en/news-6-0-10.html" title="Änderungen in MySQL" target="_blank">Hier</a> findet man einige Informationen zu den Änderungen in MySQL.<br />
<br />
Für den produktiven Einsatz wurde der <a href="http://dev.mysql.com/downloads/mysql/5.1.html" title="Download MySQL Community Server" target="_blank">MySQL Community Server 5.1.32</a> veröffentlicht. <a href="http://dev.mysql.com/doc/refman/5.1/en/mysql-nutshell.html" title="Neuerungen MySQL 5.1" target="_blank">Beschreibung der Neuerungen im Handbuch</a>.<br />
<br />
MySQL hat auf ihrer Website einen <a href="http://www.mysql.de/why-mysql/case-studies/de/mysql_cs_uni_anwenderbericht.php.de" title="hochverfügbare eLearning Lösung" target="_blank">Anwenderbericht</a> der Uni Duisburg-Essen veröffentlicht. Darin geht es um eine hochverfügbare eLearning Lösung auf Basis von MySQL.<br />
<br />
Für .Net Entwickler gibt es ein neues Release des <a href="http://dev.mysql.com/downloads/connector/net/6.0.html" title=".Net Connector Alpha" target="_blank">.Net Connectors in der Version 6.0 Alpha</a>. 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.webentwickler.org/blog/archives/8-Globales-Cyberhirn.html" rel="alternate" title="Globales Cyberhirn" />
        <author>
            <name>Stephan Beeker</name>
                    </author>
    
        <published>2009-03-10T10:57:01Z</published>
        <updated>2009-08-24T18:36:49Z</updated>
        <wfw:comment>http://www.webentwickler.org/blog/wfwcomment.php?cid=8</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.webentwickler.org/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=8</wfw:commentRss>
    
            <category scheme="http://www.webentwickler.org/blog/categories/1-Misc" label="Misc" term="Misc" />
    
        <id>http://www.webentwickler.org/blog/archives/8-guid.html</id>
        <title type="html">Globales Cyberhirn</title>
        <content type="xhtml" xml:base="http://www.webentwickler.org/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Internet = Google, Google = Internet. Diese Gleichung gilt schon seit Jahren. Das Internet als universaler Wissenspeicher wird fast immer über die Suchmaschine mit den bunten Buchstaben angezapft. Einfach Stichwort eingeben und meist hat man dann auch relevante Treffer. Ich persönlich gehe sogar oft so vor, dass meine Anfragen als Satz ausformuliere, in der Hoffnung, dass genügend relevante Suchbegriffe enthalten sind, die zu den gewünschten Ergebnissen führen. <br />
<br />
Google enttäuscht die Hoffnung zumeist nicht und gibt einem die Illusion, ein intelligenter, dienstbarer Geist hätte die Suchanfrage bedient. Natürlich stecken jede menge intelligente Suchalgorithmen hinter der Technik, die von cleveren Programmierern und Mathematikern bei Google entwickelt wurden...dabei handelt es sich nicht um ein KI-System im Sinne einer schwachen oder gar starken KI. Zumindest noch nicht. In einem <a href="http://www.heise.de/newsticker/Kuenstliche-Intelligenz-fuer-Suche-gesucht--/meldung/85530" title="Artikel in Heise" target="blank">Vortrag von 2007</a> bekräftigte Larry Page das Bestreben von Google, eine Suchmaschine mit Künstlicher Intelligenz zu bauen. Jetzt könnte der Suchmaschinengigant auf diesem Gebiet allerdings ernsthafte Konkurrenz bekommen.<br />
<br />
Der britische Wissenschaftler Stephen Wolfram (Erfinder von Mathematica) plant eine neue Super-Suchmaschine namens <a href="http://www.wolframalpha.com/" title="Wolfram Alpha" target="blank">Wolfram Alpha</a> (eine eher nüchterne 50er-Jahre-style Namensgebung im vergleich zu Google &amp; Co.), die im Mai 2009 online gehen soll. Diese Suchmaschine bezeichnet Wolfram selbst als computational Knowledge Engine. Eine Maschine, die alle Fragen beantworten kann, die man ihr stellt und zwar in natürlicher Sprache. Ich vermute mal, mit natürlicher Sprache meinen die Entwickler erstmal Englisch, aber was ist mit Bayerisch <img src="http://www.webentwickler.org/blog/templates/default/img/emoticons/wink.png" alt=";-)" style="display: inline; vertical-align: bottom;" class="emoticon" /><br />
<br />
Die Antworten werden berechnet. Dabei wird die natürliche Sprache in Rechenaufgaben übersetzt, die anhand von Algorithmen und einer riesigen Datenbasis die Ergebnisse liefert. Bei den Daten selbst handelt es sich um sog. kurartierte Daten, die von den Mitarbeitern Wolframs <br />
ausgewählt wurden. <br />
<br />
Solche Ansätze mit manuell gefilterten Daten gab es früher schon bei den Webkatalogen wie Yahoo oder Web.de. Jedoch fehlte es hier zum einen an den ausgefeilten Suchmechanismen und zum anderen an genügend Daten. Schließlich muss für jedes Faktum von einem Menschen (quasi eine natürliche Intelligenz) die Bewertung vorgenommen werden, was aufwändig und kostenintensiv ist. Die Frage ist, wie Wolfram dieses Problem lösen will. Angeblich arbeitet ein Team von ca. 100 Mitarbeitern an diesem Projekt. Aber selbst 1.000 oder 10.000 Mitarbeiter dürften nicht reichen, um den Anspruch zu erfüllen, alle Fakten der Welt zusammenzutragen und zentral zu speichern.<br />
<br />
Vielleicht kommt hier Nova Spivack ins Spiel. Er ist Unternehmer und Spezialist für das semantische Web. Sein Lösungsansatz basiert auf dem social Web. Spivack dürfte als bisher einer der Wenigen Wolfram Alpha testen und schreibt darüber auch in seinem <a href="http://www.twine.com/item/122mz8lz9-4c/wolfram-alpha-is-coming-and-it-could-be-as-important-as-google" title="Blog Spivack" target="blank">Blog</a>. Ein "wikipedisiertes" Wolfram Alpha, bei dem die Inhalte von unzähligen User eingepflegt werden, könnte die Lösung sein um einen riesigen Wissenspeicher intelligent zu verstöpseln.<br />
<br />
Wie schreibt Spivack in seinem Blog: "Wolfram Alpha is like plugging into a vast electronic brain". Klingt fast nach <a href="http://en.wikipedia.org/wiki/Cyberdyne_Systems" title="Skynet von Cyberdyne Systems" target="blank">Skynet von Cyberdyne Systems</a>. Die Frage ist nur, welche Antwort gibt die neue Super-Suchmaschine auf die Frage nach dem Sinn des Lebens und des Universums? <a href="http://de.wikipedia.org/wiki/42_(Antwort)" title="Die Antwort ist 42!" target="blank">Vermutlich 42</a> <img src="http://www.webentwickler.org/blog/templates/default/img/emoticons/wink.png" alt=";-)" style="display: inline; vertical-align: bottom;" class="emoticon" /><br />
<br />
<br />
<strong>Weitere Links:</strong><br />
<a href="http://blog.wolfram.com/2009/03/05/wolframalpha-is-coming/" title="Blog Stephan Wolfram" target="blank">Blog von Stephen Wolfram</a><br />
<br />
<a href="http://www.spiegel.de/netzwelt/tech/0,1518,612268,00.html" title="Spiegel Online" target="blank">Software-Genie verspricht den Google-Killer (Spiegel Online)</a><br />
<br />
<a href="http://de.wikipedia.org/wiki/K%C3%BCnstliche_Intelligenz" title="Künstliche Intelligenz" target="blank">Wikipedia Artikel zu KI</a><br />
 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.webentwickler.org/blog/archives/7-Mit-PHP-auf-SAP-zugreifen-first-Strike-part-two.html" rel="alternate" title="Mit PHP auf SAP zugreifen - first Strike (part two)" />
        <author>
            <name>Stephan Beeker</name>
                    </author>
    
        <published>2009-02-20T21:45:07Z</published>
        <updated>2009-08-24T18:37:01Z</updated>
        <wfw:comment>http://www.webentwickler.org/blog/wfwcomment.php?cid=7</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.webentwickler.org/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=7</wfw:commentRss>
    
            <category scheme="http://www.webentwickler.org/blog/categories/3-Servercoding" label="Servercoding" term="Servercoding" />
    
        <id>http://www.webentwickler.org/blog/archives/7-guid.html</id>
        <title type="html">Mit PHP auf SAP zugreifen - first Strike (part two)</title>
        <content type="xhtml" xml:base="http://www.webentwickler.org/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                In diesem Artikel möchte ich euch zeigen, wie man gezielt eine RFC-Funktion bzw. genauer gesagt ein BAPI über PHP aufruft und das Ergebnis verarbeitet. <br />
<br />
In meinem <a href="http://www.webentwickler.org/blog/archives/4-Mit-PHP-auf-SAP-zugreifen-first-Strike-part-one.html" title="Mit PHP auf SAP zugreifen - first Strike (part one)">letzten Artikel</a> bin ich bereits darauf eingegangen, wie man grundsätzlich ein PHP-Script mit einem SAP-Server verbinden kann. Dabei habe ich als SAP-Server das Test-System von SAP verwendet. Wobei ich mit dem Begriff Test-System vorsichtig sein muss, weil damit in einer typischen SAP Drei-System-Landschaft meist auch das Qualitätssicherungs-System gemeint ist. Also ihr braucht dagegen so eine kostenlose 90-Tage Ausprobier-Version, entweder Mini-SAP oder Mini-WAS, die ihr z. B. im SAP Developer Network downloaden könnt. <br />
<br />
Wenn man ein Datenbank-Anwendung kennenlernen will, benötigt man Testdaten. Was die Nordwind-Datenbank bei MS Access ist, ist die Flugdatenbank bei SAP Mini-WAS. Unter <a href="http://www.hs-augsburg.de/~paparaci/ABAP/SWE3_20081020_2.pdf" title="Struktur der SAP Flugdatenbank">diesem Link</a> findet man übrigens eine Übersicht über die Tabellen der Flugdatenbank. <br />
<br />
Als Ziel setzen wir uns, die Kundendaten aus Tabelle <strong>SCUSTOM</strong> auszulesen. Dabei können wir mit PHP natürlich nicht direkt auf die Datenbanktabelle zugreifen. Stattdessen benötigen wir einen ABAP-Funktionsbaustein, den wir über RFC aufrufen und der uns die Ergebnisse zurück liefern soll. So einen FuBa könnten wir natürlich selber in ABAP programmieren. Das Problem ist, eigene Programme liegen im sog. Z-Namensraum und weichen vom SAP-Standard ab. Besser ist es, wenn man Standard-Funktionen von SAP aufrufen kann. Außerdem, warum das Rad neu erfinden? Wir haben Glück. Für die Ausgabe einer Kundenliste existiert die BAPI-Funktion <strong>BAPI_FLCUST_GETLIST</strong>.<br />
<br />
BAPI steht für Business Application Programming Interfaces. BAPIs gehören zum SAP Business Frameworks und stellen eine Kommunikations-Schnittstelle nach außen dar. Während klassische Funktionsbausteine explizit als Remote-Baustein deklariert werden müssen, damit sie von extern aufgerufen werden können, sind BAPIs automatisch Remote-fähig.<br />
<br />
Nun zu unserem Script. Damit wir auf den SAP-Server zugreifen können, brauchen wir wieder die Verbindungs- und Logindaten. Für eine leichtere Wiederverwendung habe ich diese Daten in ein externes Script conf/sap_connection.conf.php ausgelagert:<br />
<pre style="font-size: 12px"><br />
<?php<br />
//<br />
// Verbindungsdaten zum SAP-Server<br />
//<br />
$sapServer = array();<br />
// NSP<br />
$sapServer["NSP"] = array(  'USER'      => 'bcuser',            // SAP User<br />
                            'PASSWD'    => 'minisap',           // SAP User Passwort<br />
                            'NSP'       => 'NSP',               // SAP SID<br />
                            'ASHOST'    => '127.0.0.1',         // SAP Application Server<br />
                            'SYSNR'     => '00',                // System Nummer<br />
                            'CLIENT'    => '000'                // Mandant<br />
);<br />
?><br />
</pre><br />
<br />
Im Haupt-Script wird diese Datei mit <br />
<pre style="font-size: 12px"><br />
include("conf/sap_connection.conf.php");<br />
</pre><br />
eingebunden.<br />
<br />
Danach führen wir einige Vorbelegungen durch:<br />
<pre style="font-size: 12px"><br />
define("RFC_FUNCTION_NAME", "BAPI_FLCUST_GETLIST");<br />
$rfcReturnTable = "CUSTOMER_LIST";<br />
$rfcCon = null;<br />
$rfcResult = array();<br />
</pre><br />
<br />
Zunächst mal geben wir die gewünschte BAPI-Funktion BAPI_FLCUST_GETLIST an. Diese BAPI gibt ihr Ergebnis u.a. in die Tabelle CUSTOMER_LIST zurück. Danach verbinden wir uns mit dem SAP-Server.<br />
<pre style="font-size: 12px"><br />
$rfcCon = saprfc_open($sapServer["NSP"]);       // Verbindungsdaten als Array<br />
if( !$rfcCon )      // Verbindung fehlgeschlagen<br />
{<br />
    die( "RFC Verbindung fehlgeschlagen: " . saprfc_error() );<br />
}<br />
</pre><br />
<br />
Die Variable $rfcCon erhält das Connection-Handle und muss in den folgenden Funktionen mit angegeben werden. Als nächstes registrieren wir die RFC-Funktion (also unser BAPI), die Rückgabe-Tabelle und den Import-Parameter. Wobei der Import-Parameter als Übergabe-Parameter an die RFC-Funktion zu verstehen ist. <br />
<pre style="font-size: 12px"><br />
$rfcFunction = saprfc_function_discover( $rfcCon, RFC_FUNCTION_NAME );<br />
if( !$rfcFunction )<br />
{<br />
    die( "RFC Funktion konnte nicht ermittelt werden" );<br />
}<br />
@saprfc_table_init( $rfcCon, $rfcReturnTable );<br />
saprfc_import( $rfcFunction, "MAX_ROWS", 20 );<br />
</pre><br />
<br />
Es gibt zwei Möglichkeiten, die Signatur einer RFC-Funktion festzulegen. Entweder man definiert die Signatur einer RFC-Funktion direkt über saprfc_function_define() oder man ermittelt die Signatur über saprfc_function_discover() automatisch. Die erste Variante ist aufwändiger dafür schneller, die zweite Variante bequemer, dafür aber etwas weniger performant. Wie man sieht, mag ichs bequem <img src="http://www.webentwickler.org/blog/templates/default/img/emoticons/wink.png" alt=";-)" style="display: inline; vertical-align: bottom;" class="emoticon" /><br />
<br />
Ist alles korrekt festgelegt, können wir den RFC-Aufruf ausführen:<br />
<pre style="font-size: 12px"><br />
$rfcStatus = saprfc_call_and_receive( $rfcFunction );<br />
if( $rfcStatus != SAPRC_OK )<br />
{<br />
    if( $rfcStatus == SAP_EXCEPTION )<br />
    {<br />
        die( "RFC Exception: " . saprfc_exception( $rfcFunction ) );<br />
    }<br />
    else<br />
    {<br />
        die( "Fehler RFC-Aufruf: " . saprfc_error( $rfcFunction ) );<br />
    }<br />
}<br />
</pre><br />
<br />
Hat alles geklappt, können wir die Ergebnismenge zeilenweise auslesen. Dazu ermitteln wir mit saprfc_table_rows() die Anzahl der Reihen in der Ergebnistabelle und verarbeiten dann die Tabelle über eine for-Schleife. Die einzelnen Zeilen lesen wir mit saprfc_table_read() aus und speichern diese in einem Array. <br />
<pre style="font-size: 12px"><br />
$rows = saprfc_table_rows($rfcFunction, $rfcReturnTable);<br />
for( $i = 1; $i <= $rows; $i++ )<br />
{<br />
    $rfcResult[$i] = saprfc_table_read( $rfcFunction, $rfcReturnTable, $i );<br />
}<br />
</pre><br />
<br />
Ab jetzt können wir die Daten mit PHP so verarbeiten wie gewünscht. Z. B. könnten wir die Daten in einer Tabelle ausgeben:<br />
<pre style="font-size: 12px"><br />
&lt;table border="0" cellpadding="3" cellspacing="0"&gt;<br />
&lt;tr&gt;<br />
    &lt;th&gt;Kunden-ID&lt;/th&gt;<br />
    &lt;th&gt;Kunden-Name&lt;/th&gt;<br />
    &lt;th&gt;Stra&szlig;e&lt;/th&gt;<br />
    &lt;th&gt;PLZ&lt;/th&gt;<br />
    &lt;th&gt;Ort&lt;/th&gt;<br />
    &lt;th&gt;Telefon&lt;/th&gt;<br />
    &lt;th&gt;eMail&lt;/th&gt;<br />
&lt;/tr&gt;<br />
&lt;?php<br />
foreach( $rfcResult as $record )<br />
{<br />
    echo "&lt;tr&gt;";<br />
    echo "&lt;td&gt;" . $record["CUSTOMERID"] . "&lt;/td&gt;";<br />
    echo "&lt;td&gt;" . $record["CUSTNAME"] . "&lt;/td&gt;";<br />
    echo "&lt;td&gt;" . $record["STREET"] . "&lt;/td&gt;";<br />
    echo "&lt;td&gt;" . $record["POSTCODE"] . "&lt;/td&gt;";<br />
    echo "&lt;td&gt;" . $record["CITY"] . "&lt;/td&gt;";<br />
    echo "&lt;td&gt;" . $record["PHONE"] . "&lt;/td&gt;";<br />
    echo "&lt;td&gt;" . $record["EMAIL"] . "&lt;/td&gt;";<br />
    echo "&lt;/tr&gt;";<br />
}<br />
?&gt;<br />
&lt;/table&gt;<br />
</pre><br />
<br />
Das Ergebnis sollte dann im Browser in etwa so aussehen (Ok, ich hab hier etwas das SAP-GUI nachgebaut <img src="http://www.webentwickler.org/blog/templates/default/img/emoticons/wink.png" alt=";-)" style="display: inline; vertical-align: bottom;" class="emoticon" /> ):<br />
<br />
<img src="http://www.webentwickler.org/blog/uploads/servercode/ausgabe_rfc_call.png" alt="" /><br />
<br />
<br />
In der <a href="http://www.webentwickler.org/blog/archives/7-Mit-PHP-auf-SAP-zugreifen-first-Strike-part-two.html" title="Kompletter Code in der Erweiterten Ansicht">Erweiterten Ansicht</a> dieses Artikels ist der komplette Code nochmal dargestellt.<br />
<br />
<br />
<strong><u>Links:</u></strong><br />
<br />
<a href="http://help.sap.com/saphelp_46c/helpdata/de/61/f3f0371bc15d73e10000009b38f8cf/frameset.htm" title="Allgemeine Einführung in die BAPIs - SAP Help Portal" target="_blank">Allgemeine Einführung in die BAPIs (CA-BFA)</a><br />
<a href="http://www.sapbapi.com/bapi-list/" title="BAPI Liste" target="_blank"><br />
BAPI List</a><br />
<br />
<a href="http://www.bsi.de/gshb/deutsch/m/m05126.htm" title="Absicherung der SAP RFC-Schnittstelle" target="_blank">Absicherung der SAP RFC-Schnittstelle (BSI)</a><br />
<br />
<br />
<br />
<br />
 <br /><a href="http://www.webentwickler.org/blog/archives/7-Mit-PHP-auf-SAP-zugreifen-first-Strike-part-two.html#extended">"Mit PHP auf SAP zugreifen - first Strike (part two)" vollständig lesen</a>
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.webentwickler.org/blog/archives/6-PHP-und-Java.html" rel="alternate" title="PHP und Java" />
        <author>
            <name>Stephan Beeker</name>
                    </author>
    
        <published>2009-02-20T11:36:26Z</published>
        <updated>2009-08-24T18:37:12Z</updated>
        <wfw:comment>http://www.webentwickler.org/blog/wfwcomment.php?cid=6</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.webentwickler.org/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=6</wfw:commentRss>
    
    
        <id>http://www.webentwickler.org/blog/archives/6-guid.html</id>
        <title type="html">PHP und Java</title>
        <content type="xhtml" xml:base="http://www.webentwickler.org/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Ich habe noch einen weiteren guten Artikel gefunden, der die unterschiedlichen Möglichkeiten beleuchtet, wie man PHP und Java miteinander verheiratet. <br />
<br />
<a href="http://entwickler.de/zonen/portale/psecom,id,101,online,1317,p,0.html" title="Integration von PHP mit der Java Enterprise Edition" target="_blank">Integration von PHP mit der Java Enterprise Edition</a>, ein Artikel von Markus Eisele auf entwickler.de vom Oktober 2007.<br />
<br />
 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.webentwickler.org/blog/archives/5-Ranking-zur-Popularitaet-der-Programmiersprachen.html" rel="alternate" title="Ranking zur Popularität der Programmiersprachen" />
        <author>
            <name>Stephan Beeker</name>
                    </author>
    
        <published>2009-02-15T13:54:19Z</published>
        <updated>2009-08-24T18:37:25Z</updated>
        <wfw:comment>http://www.webentwickler.org/blog/wfwcomment.php?cid=5</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.webentwickler.org/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=5</wfw:commentRss>
    
            <category scheme="http://www.webentwickler.org/blog/categories/1-Misc" label="Misc" term="Misc" />
    
        <id>http://www.webentwickler.org/blog/archives/5-guid.html</id>
        <title type="html">Ranking zur Popularität der Programmiersprachen</title>
        <content type="xhtml" xml:base="http://www.webentwickler.org/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Der <a href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html" title="TIOBE Programming Community Index" target="_blank">TIOBE Programming Community Index</a> ermittelt die populärsten Programmiersprachen anhand der Anzahl der Programmierer, Kurse oder Anbieter von Lösungen. Zusätzlich werden zur Berechnung der Popularität die Suchtreffer (Suchstring: "<Programmiersprache> programming") der Suchmaschinen Google, MSN, Yahoo! und Youtube herangezogen.<br />
<br />
Nach dem TIOBE Index vom Februar 2009 rangiert Java mit 19,4% an erster Stelle, gefolgt von C (15,8%) und C++ (9,6%). Das '"Stockerl" knapp verpasst haben Visual Basic mit 8,8% auf Platz 4 und PHP mit 8,7% auf Platz 5. Der TIOBE Index gibt auch die Differenz zum Vorjahreszeitraum an. So lässt sich eine Entwicklung über die letzten 12 Monate ablesen. Demnach haben sich die C-basierten Compiler-Sprachen wie C#, C++ oder Java verbessert oder sind etwa gleich geblieben. <br />
<br />
Ich habe hier noch einen Ausdruck vom Stand September vor mir liegen, also ein knappes halbes Jahr alt. Interessant ist hier die Entwicklung von C#. Microsofts .Net Kernsprache hat sich von Platz 8 auf Platz 6 vorgeschoben. Auch bemerkenswert, Logo landet auf Platz 15 und zeigt einen starken Trend nach oben?!? Wer bitteschön programmiert denn in Logo? <br />
<br />
Ebenfalls interessant ist die Entwicklung von ABAP. Vor Jahresfrist noch auf Platz 29, im September 2008 auf Platz 24 und im Februar 2009 schon auf Platz 17. Hat SAP nicht vor kurzem einen Einstellungsstop verhängt? Und überhaupt, propagiert SAP nicht ihren neuen SOA-Ansatz über Java. Anscheinend suchen immer noch viele Berater- und Anwender-Firmen R/3 Experten für den klassischen ABAP-Stack. <br />
<br />
Der Markt für ERP-Experten ist aber wohl so leer wie die Atacama-Wüste trocken. Daher findet man an jeder (Web)-Ecke Jobangebote für SAPler oder solche, die es noch werden wollen. Dieses erhöhte Hintergrundrauschen im Web wirkt sich natürlich auch auf so einen Index wie TIOBE aus.<br />
<br />
Zu PHP muss man sagen, dass sie sich als reine Webprogrammiersprache wacker auf Platz 5 hält. Schließlich bieten die anderen Programmiersprachen drumherum ein breiteres Einsatzspektrum. Daher vermute ich, dass allein bezogen auf den Bereich webbasierte Softwareentwicklung PHP die Nase vorn hätte. Aber hierzu ist mir leider noch keine stichhaltige Statistik untergekommen.<br />
<br />
 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.webentwickler.org/blog/archives/4-Mit-PHP-auf-SAP-zugreifen-first-Strike-part-one.html" rel="alternate" title="Mit PHP auf SAP zugreifen - first Strike (part one)" />
        <author>
            <name>Stephan Beeker</name>
                    </author>
    
        <published>2009-02-14T21:38:35Z</published>
        <updated>2009-08-24T18:37:37Z</updated>
        <wfw:comment>http://www.webentwickler.org/blog/wfwcomment.php?cid=4</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.webentwickler.org/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=4</wfw:commentRss>
    
            <category scheme="http://www.webentwickler.org/blog/categories/3-Servercoding" label="Servercoding" term="Servercoding" />
    
        <id>http://www.webentwickler.org/blog/archives/4-guid.html</id>
        <title type="html">Mit PHP auf SAP zugreifen - first Strike (part one)</title>
        <content type="xhtml" xml:base="http://www.webentwickler.org/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Mit PHP auf SAP zugreifen? Viele werden sich vielleicht fragen, wat?!? Warum dass denn? Schließlich hat SAP doch seine eigene Programmiersprache - nämlich ABAP. Der Allgemeine Berichts-Anwendungs-Prozessor, äh sorry, natürlich heißt's ja seit langem schon Advanced Business Application Programming. SAP ändert ja gerne mal die Namen ihrer Produkte. <br />
<br />
Das derzeit wichtigste Produkt, der Netweaver, bietet eine enge Integration von Java über den hauseigenen J2EE-Server und dem Java Connector JCO. Außerdem existieren in SAP seit jeher Schnittstellen nach außen - klassische wie die RFCs oder moderne über HTTP/Webservices - SOA lässt grüßen. Ahh jetzt! Der Zugriff von PHP auf SAP läuft also über SOAP oder so ähnlich. Falsch gedacht! Obwohl dies natürlich auch ginge. Die Unterstützung von SOAP ist in PHP5 sehr ausgereift.<br />
<br />
Nein. Der Zugriff erfolgt über die RFC-Schnittstelle. Möglich wird das durch die <a href="http://saprfc.sourceforge.net" title="SAPRFC Extension">SAPRFC Extension</a>, die 2001 von Eduard Koucky entwickelt wurde. Diese Extension wird allerdings seit 2005 nicht mehr weiterentwickelt. Es gibt aber mit <a href="http://www.piersharding.com/download/php/sapnwrfc/" title="SAPNWRFC von Piers Harding">SAPNWRFC</a>, eine interessante Neuentwicklung von Piers Harding.<br />
<br />
Ein guter Artikel, wie man SAP mit PHP connected ist <a href="www.php.net.my/forum/attachment.php?attach_id=221" title="Integration SAP with PHP (PDF)">"Integrating SAP with PHP"</a> von Jason Simmons. Nach diesem Artikel bin ich auch vorgegangen.<br />
<br />
Zunächst mal, ich hatte fürs rumspielen mit ABAP bereits eine 90-Tage Testversion von Netweaver 7.1 installiert. Diese kann man sich von sdn.sap.com runterladen. Mit dem SAP-GUI Client wird auch die notwendige librfc.dll installiert. Als PHP Umgebung verwendete ich XAMPP unter Windows. Für Windows gibt es eine DLL von SAPRFC. Diese php_saprfc.dll habe ich ins Extension-Verzeichnis von PHP kopiert und in der php.ini mit dem Eintrag<br />
<br />
extension=php_saprfc.dll<br />
<br />
die Extension aktiviert. Dies sollte dann über phpinfo() erkennbar sein.<br />
<br />
Danach habe ich das mitgelieferte Script saprfc_test.php ausgeführt. Es erschien dann ein Formular, über das ich dann die Verbindungsdaten zum Mini-SAP System eingegeben habe:<br />
<br />
<strong>Application Server:</strong> 127.0.0.1<br />
<strong>System Number:</strong> 00<br />
<strong>User:</strong> BCUSER<br />
<strong>Passwort:</strong> minisap<br />
<strong>System Name:</strong> NSP<br />
<strong>Client:</strong> 000<br />
<br />
Der Test war erfolgreich.<br />
<br />
Es wurde also Zeit für ein erstes Script. <br />
<br />
<pre style="font-size: 12px;"><br />
// Verbindungsdaten<br />
$sapConnectionData = array( 'USER'      => 'bcuser',<br />
                            'PASSWD'    => 'minisap',<br />
                            'NSP'       => 'NSP',<br />
                            'ASHOST'    => '127.0.0.1',<br />
                            'SYSNR'     => '00',<br />
                            'CLIENT'    => '000'<br />
);<br />
//<br />
// RFC Verbindung zum Server aufbauen<br />
//<br />
$rfc = saprfc_open($sapConnectionData);<br />
//<br />
// prüfen ob Verbindung steht<br />
//<br />
if( !$rfc )<br />
{<br />
    echo "Fehler Verbindung: ";<br />
    print_r( saprfc_error() );<br />
    die();<br />
}<br />
else<br />
{<br />
    $info = saprfc_attributes($rfc);<br />
    print_r($info);<br />
}<br />
saprfc_close($rfc);<br />
</pre><br />
<br />
Entscheidend ist die Funktion saprfc_open(), welche die Verbindung zum SAP-Server aufbaut. Als Parameter übergibt man der Funktion die Verbindungsdaten als Assoziatives Array. Der Rest des Scripts ist simpel. Es gibt einfach nur die Verbindungseigenschaften aus, die über saprfc_attributes() ermittelt werden. <br />
<br />
<em>"Du hast den ersten Schritt in eine neue Welt getan, Luke".</em><br />
<br />
Das Script hat einwandfrei funktioniert und der Zugriff auf SAP mit PHP war garnicht so schwierig. Stellt sich immer noch die Frage, warum man denn überhaupt PHP für den SAP-Zugriff verwenden sollte. Nunja, mit Scriptsprachen lassen sich schnell und effizient Anwendungen entwickeln. Außerdem sind Scriptsprachen längst reif für den Enterprise-Einsatz, wie Grails, Ruby und nicht zuletzt PHP5 beweisen. Aber dazu mehr in einem anderen Blog-Eintrag.<br />
<br />
<strong>Weitere Links:</strong><br />
<br />
<a href="http://saprfc.sourceforge.net/" title="SAP RFC Homepage" target="_blank">SAP RFC Homepage</a><br />
<br />
<a href="http://www.piersharding.com/blog/" title="SAPNWRFC " target="_blank">Blog-Seite von Piers Harding zur neuen sapnwrfc Extension</a><br />
<br />
<a href="http://itrepublic.com/php_information/psecom,id,4,articles,199.html" title="Working with PHP and SAP" target="_blank">Working with PHP and SAP (Artikel von Stoyan Stefanov)</a><br />
<br />
<a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/docs/library/uuid/1270d0d9-0a01-0010-2d90-fb1f6db9ae96" title="SCRIPTING LANGUAGE SUPPORT FOR SAP SERVICES - PHP" target="_blank"><br />
HOWTO: SCRIPTING LANGUAGE SUPPORT FOR SAP SERVICES - PHP (SAP Developer Network - Vasil Bachvarov)</a><br />
<br />
<br />
 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.webentwickler.org/blog/archives/3-Welchen-Webshop-kannst-Du-denn-empfehlen.html" rel="alternate" title="Welchen Webshop kannst Du denn empfehlen?" />
        <author>
            <name>Stephan Beeker</name>
                    </author>
    
        <published>2009-01-30T22:38:47Z</published>
        <updated>2009-08-24T18:37:50Z</updated>
        <wfw:comment>http://www.webentwickler.org/blog/wfwcomment.php?cid=3</wfw:comment>
    
        <slash:comments>1</slash:comments>
        <wfw:commentRss>http://www.webentwickler.org/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=3</wfw:commentRss>
    
            <category scheme="http://www.webentwickler.org/blog/categories/4-Webanwendungen" label="Webanwendungen" term="Webanwendungen" />
    
        <id>http://www.webentwickler.org/blog/archives/3-guid.html</id>
        <title type="html">Welchen Webshop kannst Du denn empfehlen?</title>
        <content type="xhtml" xml:base="http://www.webentwickler.org/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Diese Frage stellte mir neulich ein Bekannter, der übers Internet elektronische Bauteile verkaufen möchte. Webshops. Ein Thema, mit dem ich mich seit Jahren nicht mehr befasst habe. Dabei hatte ich zu Anfangszeiten des WWW selbst mal einen Webshop gebaut - rein in JavaScript. Damals war ich stolz darauf, heute ist mir das Teil fast peinlicher als meine Vokuhila-Frisur aus den Achtzigern ;-><br />
<br />
Aber zurück zur Webshop-Frage. Spontan fiel mir osCommerce ein, weil ich das mal im Zusammenhang mit dem CMS Mambo angeschaut habe. Und da war noch so ein XY-Commerce-Ding, achja xtCommerce. Diese Webshops gibts natürlich immer noch und sind OpenSource. Allerdings sind, was man so hört die Templates dieser Shops mühsam zu customizen. Die Frage meines Bekannten war für mich Anlass, meine Lauscherchen auf Google-Frequenz einzustellen um im Internet mal nach den neuesten Trends auf dem Webshop-Markt zu horchen.<br />
<br />
Mittlerweile gibt es weitere gute Webshops aus dem OpenSource-Bereich (siehe Linkliste). Hervorzuheben sind hier <a href="http://www.magentocommerce.com/" title="Magento">Magento</a> und <a href="http://www.oxid-esales.com/de/startseite" title="Oxid eShop">Oxid eShop</a>. <br />
<br />
Der Oxid eShop war ursprünglich kostenpflichtig, ist aber seit kurzem unter der GPL kostenlos verfügbar. Allerdings hat die Sache einen Haken - für viele Zusatz-Module muss man dann doch Lizenzgebühren bezahlen. Der Shop präsentiert sich mit moderner AJAX-Technik und soll recht gut anpassbar und bedienbar sein. Vor allem das Template-Handling ist im Vergleich zu xtCommerce besser gelöst. Probleme gibt es aber noch mit rel="nofollow" Attributen, die sich negativ auf die Suchmaschinen-Indizierung auswirken. Wenn in absehbarer Zukunft aus der Community kostenlose Module zur Verfügung gestellt werden und das SEO-Problem gelöst wird, könnte Oxid eShop die Lösung für kleinere Webshops sein.<br />
<br />
Magento gilt als  Marktführer der OpenSource Webshops. Dem Webgeflüster nach ist Magento sehr flexibel und leistungsfähig, allerdings verbraucht es auch viel resourcen. Laut Doku wird ein Dedizierter Server mit ausreichend RAM vorausgesetzt. Außerdem erfordert es eine gewisse Einarbeitungszeit in das Customizing, also Templatedesign usw. Magento zielt damit wohl eher auf Anwender mit größerem Webshop und ausreichend Server-Power ab. Der Kleingewerbetreibende, der nebenher etwas verchecken will, sollte sich wohl eher nach einem anderen Shop umsehen. Wer einen Hoster findet, der seine Server auf Magento und Zend Framework (auf das setzt Magento nämlich auf - <a href="http://framework.zend.com/casestudies/ZFCaseStudy-Varien.pdf" title="Fallstudie von Zend zur Anwendung des Zend Frameworks bei Magentor (PDF)">Fallstudie dazu</a>) optimiert hat, könnte unter umständen auch mit einer Shared Hosting-Lösung zufrieden sein.<br />
<br />
Hier mal eine Liste weiterer OpenSource Webshops:<br />
<br />
<a href="http://www.phpshop.org/" title="PHPShop">PHPShop</a><br />
<a href="http://phpay.sourceforge.net/" title="PhPay">PhPay</a><br />
<a href="http://www.phpeppershop.com/" title="PhPeppershop">PhPeppershop</a><br />
<a href="http://www.fwpshop.org/" title="FWP Shop">FWPShop</a><br />
<a href="http://www.zen-cart.at/zcvb/" title="zen cart">zen cart</a><br />
<a href="http://www.oos-shop.de/" title="OSIS Online Shop">OSIS Online Shop</a><br />
<a href="http://www.icdevgroup.org/i/dev" title="Interchange">Interchange</a><br />
<a href="http://www.prestashop.com/" title="Prestashop">PrestaShop</a><br />
<a href="http://sourceforge.net/projects/pgmarket/" title="PgMarket">PgMarket</a><br />
 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.webentwickler.org/blog/archives/2-Artikel-zur-PHPJava-Integration.html" rel="alternate" title="Artikel zur PHP/Java Integration" />
        <author>
            <name>Stephan Beeker</name>
                    </author>
    
        <published>2009-01-30T11:18:27Z</published>
        <updated>2009-08-24T18:38:00Z</updated>
        <wfw:comment>http://www.webentwickler.org/blog/wfwcomment.php?cid=2</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.webentwickler.org/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=2</wfw:commentRss>
    
            <category scheme="http://www.webentwickler.org/blog/categories/3-Servercoding" label="Servercoding" term="Servercoding" />
    
        <id>http://www.webentwickler.org/blog/archives/2-guid.html</id>
        <title type="html">Artikel zur PHP/Java Integration</title>
        <content type="xhtml" xml:base="http://www.webentwickler.org/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Auf der "heise Developer" Webseite ist ein interessanter <a href="http://www.heise.de/developer/PHP-Anwendungen-mit-Java-Backends-verbinden--/artikel/121998" title="PHP-Anwendungen mit Java-Backends verbinden">Überblicksartikel</a> zur Integration von PHP und Java-Anwendungen veröffentlicht worden. Dabei geht es in erster Linie um die Anbindung Java-Backend Anwendungen an eine Webschnittstelle. <br />
<br />
Warum sollte man sowas überhaupt machen, wo es doch Servlets und Java Server Pages gibt. Aber sogar Sun hat mittlerweile erkannt, dass Webfrontends mit Java Server Pages eben doch mühsamer zu erstellen sind, als wie mit Scriptsprachen wie PHP. Leider muss man feststellen, dass für die bestehenden Ansätze PHP und Java miteinander zu Verbinden noch viel Verbesserungsbedarf besteht. Weder die PHP Java-Extension auf PHP-Seite, noch die PHP-Servlet SAPI auf Java-Seite sind ausgereift genug für einen produktiven Einsatz. Abhilfe könnte hier vielleicht mal eine PHP Scripting Engine entsprechend der <a href="http://jcp.org/en/jsr/detail?id=223" title="Java Specification Request 223">JSR 223</a> bringen (ab >Java6), die eine offizielle Spezifikation für die Integration von Scriptsprachen in Java darstellt.<br />
<br />
Für den produktiven Einsatz bleibt vorerst wohl nur die lose Kopplung von PHP und Java über Webservices. Gerade seit Version 5 bietet PHP ja eine deutlich verbesserte Unterstützung für Webservices- und XML-Verarbeitung an.<br />
 
            </div>
        </content>
        
    </entry>

</feed>