Czy można skutecznie opracowywać aplikacje PHP w systemie Windows, które będą wdrażane na serwerach z systemem Linux?

19

Czy można kodować PHP w systemie Windows i hostować go później na serwerze z systemem Linux? Czy mogą wystąpić problemy z migracją takiego projektu?

Myślałem, że naprawdę nie może być żadnych problemów, zwłaszcza, że ​​jestem początkującym w PHP i nie będę korzystać z żadnych zaawansowanych funkcji, które mogą być specyficzne dla systemu operacyjnego. Chciałbym się jednak upewnić, ponieważ naprawdę nie lubię Linuksa.

DotNetStudent
źródło
1
Prostym rozwiązaniem tego problemu jest maszyna wirtualna z systemem Linux z Sambą działającą na hoście Windows.
treekoder
Tak, można to zrobić, ale należy wziąć pod uwagę kilka rzeczy. Sprawdź odpowiedzi, aby uzyskać więcej informacji. Jest to jedna z tych rzeczy, które muszą robić programiści ze względu na zasoby, a nie dlatego, że im się podoba.
umlcat,

Odpowiedzi:

27

Niektóre wskazówki:

Rozróżnianie wielkości liter w systemie plików

Jeśli plik nazywa się HelloWorld.php to:

include "helloworld.php";

jest legalny w systemie Windows i będzie działać. Ale nazwy plików Linux jest wielkość liter, można mieć pliki o nazwie HelloWorld.php, helloworld.php, hEllOwOrlD.phpw tym samym katalogu. Powinieneś więc rozwijać się w systemie Windows, tak jakbyś tworzył system plików z rozróżnianiem wielkości liter: użyj dokładnie poprawnych nazw plików, nazw katalogów, nazw rozszerzeń - .phprównież różni się od .PHP.

Separatory katalogów i ścieżek

W systemie Windows mówimy:

include 'classes\myClass.php';

Ale w Linuksie powiedzielibyśmy:

include 'classes/myClass.php';

PHP jest wystarczająco inteligentny, aby się tym nie przejmować, oba separatory działają w obu systemach. Ale powinieneś być konsekwentny i stosować wszędzie slash (/), ponieważ jest to również normą w większości systemów. Istnieje sprytnie zdefiniowana stała, DIRECTORY_SEPARATOR która przekłada się na poprawną, jeśli chcesz posunąć się tak daleko:

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

To samo dotyczy separatora ścieżek, który w systemie Windows ma średnik, w przeciwnym razie dwukropek. Aby być bezpiecznym, powinieneś:

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

gdy potrzebujesz separatora ścieżek. Chociaż większość ludzi myśli, że ponieważ PHP nie ma nic przeciwko temu, którego separatora używasz, jest w porządku, ale jest jeden ważny haczyk: Separatory będą specyficzne dla systemu, gdy poprosisz system o katalogi lub ścieżki. Powiedzmy, że chcesz rozbić ścieżkę dołączania na jej części:

$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!!!

Kodowanie plików i ogranicznik

Powinieneś ustawić swoje IDE, aby ustawiało kodowanie plików dla wszystkich twoich skryptów na UTF-8 zamiast Cp *, a separator linii plików na Unix ( "\n"zamiast "\r\n"). W większości przypadków nie ma to większego znaczenia, ale powinieneś być konsekwentny, a najlepszym sposobem jest sposób uniksowy (który działa dobrze w systemie Windows, ale nie odwrotnie).

Yannis
źródło
1
W przypadku ciągów, w których mogą wystąpić problemy z nową linią, PHP zawiera również stałą PHP_EOL, która używa poprawnego znaku nowej linii dla bieżącej platformy.
Jonathan Patt
5
Czy ludzie używają odwrotnych ukośników na swoich ścieżkach w PHP / Windows? Nawet gdybym nie używał PHP po raz pierwszy w Linuksie, unikałbym odwrotnych ukośników tylko dlatego, że służą one do ucieczki.
cHao
2
Czy nie powinno to być „class \\ myClass.php”?
luiscubal,
@luiscubal Tak, ponieważ używam podwójnych cudzysłowów ... Dzięki za wykrycie tego, edytowane do pojedynczych cudzysłowów.
yannis
3
Rozróżnianie wielkości liter i kodowanie plików to dwa, które zawsze powodują problemy w systemie Windows / Linux.
Rangoric
6

Nie można uruchomić strftime()ze %ew środowisku Windows, jak zauważono w stronę ręcznego :

Nie wszystkie specyfikatory konwersji mogą być obsługiwane przez bibliotekę C, w takim przypadku nie będą obsługiwane przez strftime () PHP. Ponadto nie wszystkie platformy obsługują ujemne znaczniki czasu, więc zakres dat może być ograniczony do najwcześniejszej epoki Uniksa. Oznacza to, że% e,% T,% R i,% D (i ewentualnie inne) - a także daty sprzed 1 stycznia 1970 r. - nie będą działać w systemie Windows, niektórych dystrybucjach Linuksa i kilku innych systemach operacyjnych. W przypadku systemów Windows pełny przegląd obsługiwanych specyfikatorów konwersji można znaleźć w » MSDN .

ilhan
źródło
4

Nie będzie żadnych problemów z uruchomieniem kodu. Jeśli edytujesz pliki zapisane w systemie Windows w systemie Linux, możesz zauważyć, że znaki końca wiersza mogą być inne, ale nic nie zaszkodzi. Jeśli ci to przeszkadza, skonfiguruj swój Windows IDE / edytor, aby używał uniksowego końca linii.

Pierre
źródło
3

Skonfiguruj się z testbedem dla systemu Linux. Może to być wirtualny komputer z systemem Linux działający pod Windows, może to być komputer z podwójnym uruchomieniem, może to być system przyjaciela. Następnie co jakiś czas (np. W poniedziałki rano) przenieś swój kod do systemu Linux i przetestuj go.

Inne odpowiedzi dotyczyły podstawowych problemów, z którymi będziesz się borykać, ale istnieje wiele mniejszych błędów, takich jak:

  • katalog tymczasowy znajduje się w innym miejscu
  • uprawnienia do plików i katalogów są różne
  • funkcja system () zmienia się radykalnie
  • Nazwa użytkownika uruchamiana przez Apache jako zmiany
  • Rzeczy, które działają pod Windows XP mogą zawieść pod Windows 8.

Tak, istnieją sposoby ostrożnego obejścia wszystkich tych różnic, ale czy ostrożnie korzystałeś z obejść? Oczywiście, że nie - kodowałeś i działał, więc musi być OK.

Nie umieszczaj niczego na komputerze hosta, dopóki nie zostanie przetestowany na podobnym systemie operacyjnym.

Nie mam doświadczenia w przenoszeniu z systemu Windows na Linux, ale mam pewne doświadczenie w przenoszeniu z systemu Linux na Windows i więcej doświadczenia w przenoszeniu z systemu Linux na OS X. Można to zrobić, ale klucze to testowanie, testowanie i testowanie.

Andy Canfield
źródło
1

Mimo że czuję się swobodnie w wierszu poleceń Linuksa i narzędziach do edycji Linuksa, takich jak vim, większość mojego programowania PHP wykonuję na komputerze z systemem Windows.

Mam wirtualny serwer w Internecie (uruchamia mi około 20 USD miesięcznie), którego używam jako serwera programistycznego i łączę się z nim za pomocą FileZilla. FileZilla pobiera pliki, które edytuję, do katalogu tymczasowego i śledzi zapisy, a kiedy je zapisuję, rzuca je z powrotem na serwer programistów i stamtąd testuję.

Jest to trochę kłopotliwe, ale pozwala mi robić rozwój praktycznie wszędzie; za pomocą FileZilla i prostego edytora na pendrivie mogę nawet połączyć się z innego komputera i dokonać zmian. Wszystkie testy odbywają się zawsze na serwerze Linux, więc wychwytuję wszelkie problemy, które mogłem spowodować po wyjęciu z pudełka - mniej nieprzyjemnych niespodzianek po wrzuceniu kodu na serwer.

Możesz zrobić to samo z tanim kontem hostingowym (chociaż w zależności od rodzaju aplikacji, którą tworzysz, możesz mieć problemy z wydajnością, ponieważ tanie konta hostingowe są zwykle dość słabe), a inne wiele aplikacji FTP ma również funkcję edycji i- funkcja przesyłania.

cori
źródło
1

Tak, można to zrobić, ale należy wziąć pod uwagę kilka rzeczy. Sprawdź odpowiedzi, aby uzyskać więcej informacji.

Jest to jedna z tych rzeczy, które czasem muszą robić programiści ze względu na zasoby, a nie dlatego, że im się podoba.

Możesz mieć lokalny serwer WWW (apache, cherokee, a nawet M $) na swoim komputerze i zainstalowany serwer PHP. Twój komputer może nie mieć połączenia z Internetem lub może łączyć się tylko przez krótki czas.

Później możesz zaktualizować prawdziwą stronę internetową, aktualizując plik do prawdziwego serwera za pomocą narzędzi ftp, na tym samym komputerze lub innym komputerze podłączonym do Internetu.

umlcat
źródło
0

Jak większość ludzi powiedziała, naprawdę nie powinno być problemów. To powiedziawszy, VirtualBox sprawia, że ​​naprawdę bardzo łatwo jest postawić maszynę wirtualną z Linuksem, na której można przetestować bazę kodu, aby upewnić się, że działa ona w środowisku produkcyjnym bez konieczności posiadania wspomnianego środowiska produkcyjnego.

Wyatt Barnett
źródło