Ist es möglich, PHP-Anwendungen unter Windows effektiv zu entwickeln, die auf Servern unter Linux bereitgestellt werden?

19

Ist es in Ordnung, PHP unter Windows zu codieren und es später auf einem Server unter Linux zu hosten? Kann es Probleme bei der Migration eines solchen Projekts geben?

Ich würde denken, dass es wirklich keine Probleme geben kann, zumal ich ein Anfänger in PHP bin und keine der erweiterten Funktionen verwende, die betriebssystemspezifisch sein könnten. Ich möchte jedoch sicherstellen, dass mir Linux überhaupt nicht gefällt.

DotNetStudent
quelle
1
Eine einfache Lösung für Ihr Problem ist eine Linux-VM, auf der Samba auf einem Windows-Host ausgeführt wird.
treecoder
Ja, das ist möglich, aber einige Dinge, die Sie beachten müssen. Überprüfen Sie die Antworten auf weitere Informationen. Es ist eines der Dinge, die Entwickler aufgrund von Ressourcen tun müssen, nicht, weil sie es mögen.
umlcat

Antworten:

27

Einige Hinweise:

Groß- / Kleinschreibung des Dateisystems

Wenn Ihre Datei HelloWorld.php heißt:

include "helloworld.php";

ist unter Windows legitim und wird funktionieren. Aber Linux - Dateinamen Groß- und Kleinschreibung, können Sie Dateien mit dem Namen HelloWorld.php, helloworld.php, hEllOwOrlD.phpim selben Verzeichnis. Daher sollten Sie unter Windows so entwickeln, als ob Sie auf einem Dateisystem mit Groß- und Kleinschreibung arbeiten: Verwenden Sie genau die richtigen Dateinamen, Verzeichnisnamen und Erweiterungsnamen - .phpunterscheidet sich auch von .PHP.

Verzeichnis- und Pfadtrennzeichen

In Windows sagen wir:

include 'classes\myClass.php';

Aber unter Linux würden wir sagen:

include 'classes/myClass.php';

PHP ist klug genug, sich nicht darum zu kümmern, beide Separatoren funktionieren in beiden Systemen. Aber Sie sollten konsistent sein und den Schrägstrich (/) überall verwenden, da dies auch auf den meisten Systemen die Norm ist. Es gibt eine raffinierte vordefinierte Konstante DIRECTORY_SEPARATOR , die in die richtige Konstante übersetzt wird, wenn Sie so weit gehen möchten:

include "classes" . DIRECTORY_SEPARATOR . "myClass.php";

Gleiches gilt für das Pfadtrennzeichen, das unter Windows durch ein Semikolon gekennzeichnet ist, andernfalls durch einen Doppelpunkt. Um sicher zu gehen, sollten Sie Folgendes tun:

set_include_path(get_include_path() . PATH_SEPARATOR . $path);

wenn ein Pfadtrennzeichen benötigt wird. Obwohl die meisten Leute denken, dass PHP nichts dagegen hat, welches Trennzeichen Sie verwenden, ist es in Ordnung, aber es gibt einen wichtigen Haken: Die Trennzeichen sind die systemspezifischen, wenn Sie das System nach Verzeichnissen oder Pfaden fragen. Also lassen Sie uns sagen , Sie wollen explodieren die Include - Pfad in seine Teile:

$includePath = get_include_path();

$pathParts = explode(";", $includePath) // Will only work on Windows
$pathParts = explode(":", $includePath) // Will work on other systems but not Windows
$pathParts = explode(PATH_SEPARATOR, $includePath) // Will work everywhere!!!

Dateicodierung und Trennzeichen

Sie sollten Ihre IDE so einstellen, dass die Dateicodierung für alle Ihre Skripte auf UTF-8 anstelle von Cp * und das Trennzeichen für die Dateizeile auf Unix ( "\n"anstelle von "\r\n") eingestellt wird. In den meisten Fällen spielt es keine Rolle, aber Sie sollten konsistent sein und der beste Weg ist der Unix-Weg (der unter Windows gut funktioniert, aber nicht umgekehrt).

yannis
quelle
1
Für Zeichenfolgen, bei denen möglicherweise Probleme mit Zeilenumbrüchen auftreten, enthält PHP auch die Konstante PHP_EOL, die das richtige Zeilenumbruchszeichen für die aktuelle Plattform verwendet.
Jonathan Patt
5
Leute benutzen tatsächlich Backslashes in ihren Pfaden in PHP / Windows? Selbst wenn ich PHP nicht zum ersten Mal unter Linux verwendet hätte, würde ich Backslashes vermeiden, nur weil sie für das Entkommen von Dingen gedacht sind.
CHAO
2
Sollte es nicht "classes \\ myClass.php" sein?
Luiscubal
@luiscubal Ja, da ich doppelte Anführungszeichen verwende ... Vielen Dank, dass Sie das erkannt haben und in einfache Anführungszeichen umgewandelt haben.
Yannis
3
Die Groß- und Kleinschreibung und die Dateicodierung sind die beiden Faktoren, die mir zwischen Windows / Linux immer Probleme bereiten.
Rangoric
6

Sie können nicht strftime()mit %ein Windows-Umgebung ausgeführt werden, wie in der Manpage vermerkt :

Möglicherweise werden nicht alle Konvertierungsspezifizierer von Ihrer C-Bibliothek unterstützt. In diesem Fall werden sie von PHP strftime () nicht unterstützt. Darüber hinaus unterstützen nicht alle Plattformen negative Zeitstempel, sodass der Zeitraum möglicherweise nicht früher als in der Unix-Epoche festgelegt wird. Dies bedeutet, dass% e,% T,% R und% D (und möglicherweise auch andere) sowie Daten vor dem 1. Januar 1970 unter Windows, einigen Linux-Distributionen und einigen anderen Betriebssystemen nicht funktionieren. Eine vollständige Übersicht der unterstützten Konvertierungsspezifizierer für Windows-Systeme finden Sie unter » MSDN .

ilhan
quelle
4

Es wird keine Probleme geben, den Code auszuführen. Wenn Sie die unter Windows in Linux gespeicherten Dateien bearbeiten, werden Sie möglicherweise feststellen, dass die Zeichen am Zeilenende unterschiedlich sind, aber nichts anrichten. Wenn es Sie stört, konfigurieren Sie Ihre Windows-IDE / -Editor für die Verwendung von Unix-Zeilenende.

Pierre
quelle
3

Richten Sie sich mit einem Linux-Testbed ein. Es könnte ein virtueller Linux-Computer sein, der unter Windows läuft, es könnte ein Dual-Boot-Computer sein, es könnte das System eines Freundes sein. Dann portieren Sie Ihren Code von Zeit zu Zeit (z. B. Montagmorgen) auf das Linux-System und testen Sie ihn.

Die anderen Antworten behandelten die Hauptprobleme, denen Sie gegenüberstehen, aber es gibt zahlreiche kleinere Fallstricke, wie:

  • Das temporäre Verzeichnis befindet sich an einem anderen Ort
  • Datei- und Verzeichnisberechtigungen sind unterschiedlich
  • Die system () -Funktion ändert sich radikal
  • Der Benutzername, den Apache als Änderungen ausführt
  • Dinge, die unter Windows XP funktionieren, können unter Windows 8 fehlschlagen.

Ja, es gibt Möglichkeiten, diese Unterschiede sorgfältig zu umgehen, aber haben Sie die Umgehungsmöglichkeiten sorgfältig genutzt? Natürlich nicht - du hast codiert und es lief, also muss es in Ordnung sein.

Legen Sie nichts auf einen Host-Computer, bevor dieser nicht auf einem ähnlichen Betriebssystem getestet wurde.

Ich habe keine Erfahrung mit dem Portieren von Windows nach Linux, aber ich habe Erfahrung mit dem Portieren von Linux nach Windows und mit dem Portieren von Linux nach OS X. Dies ist möglich, aber die Schlüssel sind Testen, Testen und Testen.

Andy Canfield
quelle
1

Obwohl ich mich in der Linux-Befehlszeile und mit Linux-Bearbeitungstools wie vim ziemlich wohl fühle, entwickle ich den größten Teil meiner PHP-Entwicklung auf einem Windows-Computer.

Ich habe einen virtuellen Server im Internet (kostet ungefähr 20 US-Dollar pro Monat), den ich als Entwicklungsserver verwende und mit dem ich über FileZilla eine Verbindung herstelle. FileZilla lädt die Dateien, die ich bearbeite, in ein temporäres Verzeichnis herunter und protokolliert die gespeicherten Daten. Wenn ich sie speichere, werden sie wieder auf dem Entwicklungsserver gespeichert und von dort aus getestet.

Es ist etwas umständlich, aber ich kann die Entwicklung so ziemlich überall durchführen. Mit FileZilla und einem einfachen Editor auf einem USB-Stick kann ich sogar von einem anderen Computer aus eine Verbindung herstellen und Änderungen vornehmen. Alle Tests finden immer auf dem Linux-Server statt, sodass ich Probleme, die ich möglicherweise verursacht habe, sofort aufspüre - weniger unangenehme Überraschungen, wenn ich den Code auf den Server bringe.

Sie könnten dasselbe mit einem billigen Hosting-Konto tun (obwohl je nach Art der Anwendung, die Sie entwickeln, Leistungsprobleme auftreten können, da billige Hosting-Konten in der Regel nicht ausreichend ausgelastet sind). Upload-Funktionalität.

cori
quelle
1

Ja, das ist möglich, aber einige Dinge, die Sie beachten müssen. Überprüfen Sie die Antworten auf weitere Informationen.

Es ist eines dieser Dinge, die Entwickler manchmal aufgrund von Ressourcen tun müssen, nicht weil sie es mögen.

Möglicherweise ist auf Ihrem PC ein lokaler Webserver (Apache, Cherokee, sogar M $) und ein PHP-Server installiert. Und Ihr PC hat möglicherweise keine Internetverbindung oder kann nur für kurze Zeit eine Verbindung herstellen.

Später können Sie eine reale Website aktualisieren und Ihre Datei mit FTP-Tools auf den realen Server aktualisieren, wobei derselbe oder ein anderer PC mit dem Internet verbunden ist.

umlcat
quelle
0

Wie die meisten Leute sagten, sollte es wirklich keine Probleme geben. Mit VirtualBox können Sie eine virtuelle Linux-Maschine, auf der Sie Ihre Codebasis testen können, auf einfache Weise in Betrieb nehmen, um sicherzustellen, dass sie in der Produktionsumgebung funktioniert, ohne die Produktionsumgebung zur Hand zu haben.

Wyatt Barnett
quelle