cool IT Team-Blog

Wordpress oder andere PHP-Webprojekte auf Windows mit Visual Studio debuggen

Ausgangssituation

  • Auf PHP basierendes CMS-System
  • MySQL Database
  • lokaler PC mit Windows
  • Visual Studio (2012 - geht sicher auch mit älteren Versionen)

Notwendige Tools / Softwareinstalltionen

  • PHP, mindestens Version 5.4 (NTS für Windows X86, http://windows.php.net/download/#php-5.4). Einfach mit Standardoptionen in beliebigem Verzeichnis installieren
  • MySQL, Version 5.5 (X86, 32 Bit für Windows, geht auch mit älteren Versionen - das ist fürs Debuggen nicht relevant, http://dev.mysql.com/downloads/mysql/5.5.html#downloads)
  • MySQL Workbench 5.2.47 (ebenfalls X86, 32 Bit für Windows, http://dev.mysql.com/downloads/workbench/5.2.html. Alternativ dazu kann auch das Commandline-Tool verwendet werden oder PHPMyAdmin installiert werden, wenn man einen lokalen Internet Information Server betreibt. Nachdem ich es vorgezogen haben, den IIS auf meiner Maschine nicht aufzudrehen, habe ich die Workbench gewählt.
  • PHP Tools für Visual Studio 2012. Diese können im Visual Studio über Tools->"Extension and Updates" installiert werden.
    PHP_Tools.JPG
  • Zum Debuggen benötigen wir noch PHP XDebug. Das ist eine einfache DLL, die über http://xdebug.org/files/php_xdebug-2.2.2-5.4-vc9-nts.dll geholt werden kann, und im Verzeichnis C:\PHP\ext abgelegt werden muss. Damit diese Extension von PHP auch erkannt wird, muss in der PHP.ini folgender Eintrag gemacht werden:

    zend_extension = C:\PHP\ext\php_xdebug-2.2.2-5.4-vc9-nts.dll

Übertragung des Webprojekts

Gleich einmal vorweg: Theoretisch könnte man auch direkt eine Remote-Site debuggen. Aber das wollen wir hier nicht, weil die Seite schon produktiv ist oder langsam oder es aus sonst irgendeinem Grund mühsam oder nicht empfehlenswert ist.

Daher müssen als erstes die Sourcen vom Webserver komplett in ein beliebiges Verzeichnis auf der lokalen Maschine kopiert werden. Dieses Verzeichnis, das Stammverzeichnis dient dann als Basis für das Website-Projekt im Visual Studio.

Mittels File->Open...->Website und der Auswahl des oben erwähnten Stammverzeichnisses wird das Webprojekt angelegt.
OpenWebsite.JPG

Visual Studio legt einen Rootknoten im Solution Explorer und darunter alle Dateien an, die sich in dem Verzeichnis befinden.

Als nächsten Schritt wird das Projekt in ein PHP-Projekt konvertiert. Eine gute Anleitung gibt es unter
http://www.devsense.com/wp-content/uploads/phptools-tutorial/debug-tutorial.htm. Hier steht auch, was man tun muss, dass man theoretisch debuggen kann. Das funktioniert bei uns natürlich noch nicht - wäre ja zu einfach.

Wir müssen nun als nächstes die Datenbank auf das lokale System übertragen. Dazu öffnet man den PHPMyAdmin am Fremdsystem und exportiert die gesamte Datenbank in ein SQL Script. Dieses wird auf der Platte für die spätere Verwendung zwischengespeichert.

Für den Export sind die vorgeschlagenen Standard-Einstellungen gerade recht.
ExportDatabase-(1).JPG

Danach wird die MySQL Workbench geöffnet, um die Datenbank zu importieren. Dazu muss zunächst mal die Defaultinstanz ausgewählt werden (Doppelklick).

In dieser Instanz wird dann das vorbereitete Skript geöffnet und ausgeführt.
OpenWorkbenchScript-(1).JPG

Danach muss die ini-Datei des CMS dahingehend geändert werden, dass auf die lokalen Datenbankeinstellungen zugegriffen werden kann.

Ganz funktioniert das System jetzt noch nicht, denn CMS-Systeme verwenden eine .htaccess, um URL-Rewirtes zu machen. Diese wird auf dem Windows-System jedoch ignoriert. Deshalb müssen wir die Rewrites in eine web.config übertragen, die dann ausgeführt werden kann.

Ich habe hier ein  Beispiel, das leicht auf verschiedene Bedürfnisse angepasst werden kann. Die Logik der Regular Expressions ist ja auf allen Systemen die gleiche. Das angeführte Beispiel ist für ein Wordpress-System.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>

    <modules runAllManagedModulesForAllRequests="true">
      <remove name="UrlRoutingModule" />
      <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule,System.Web.Routing, Version=3.5.0.0,Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    </modules>

    <handlers>
      <remove name="UrlRoutingHandler" />
      <add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    </handlers>

    <rewrite>
      <rules>

        <rule name="wordpress" patternSyntax="Wildcard" stopProcessing="true" >
          <match url="*" />
          <conditions>
              <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
              <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
          </conditions>
          <action type="Rewrite" url="index.php" />
        </rule>

    </rewrite>
  </system.webServer>
</configuration>


Nun sollte das System mal ohne Debugger korrekt funktionieren. Um debuggen zu können, müssen nun noch die Projekteinstellungen korrekt gesetzt werden.

Projekteinstellungen.JPG

Ich bevorzuge die Verwendung eines statischen Ports, da man diese Adresse dann ggf. auch - falls nötig - in Konfigurationseinstellungen aufnehmen kann bzw. bei der Verwendung eines Configuration Management Tools auch auf anderen Systemen bei Kollegen gleich funktioniert.

Nun ist alles vorbereitet und das Debuggen kann losgehen!

Es gibt bestimmt auch noch andere Möglichkeiten, das System zum Laufen zu bringen, aber diese funktioniert eigentlich recht gut!

Der Debugger hat einige Probleme, zum Beispiel kann man während einer Ausführung keine Breakpoints wegnehmen - diese werden trotzdem angesprungen, auch wenn sie gelöscht sind. Aber soll nichts Schlimmeres passieren, als in diesem Fall die Applikation neu zu starten!

Ist doch cool. oder?

LG,
Sabine.
Verfasst: 30.03.2013 02:24:15 von Sabine Stiller
Tags: config, MySQL, MySQL Workbench, PHP, PHP Debugging, PHP Tools for Visual Studio, URL Rewrites, web, Wordpress, XDebug

1


Kommentare
Für diesen Blogbeitrag liegen zurzeit keine Kommentare vor.
Einen Kommentar schreiben



 Security code