È possibile sviluppare in modo efficace applicazioni PHP su Windows che verranno implementate su server che eseguono Linux?


19

Va bene codificare PHP su Windows e ospitarlo in un secondo momento su un server che esegue Linux? Ci possono essere problemi nella migrazione di un tale progetto?

Penserei che non ci possano essere problemi, soprattutto perché sono un principiante in PHP e non userò nessuna delle funzioni avanzate che potrebbero essere specifiche del sistema operativo. Tuttavia, vorrei esserne sicuro, dato che non mi piace affatto Linux.


1
Una soluzione semplice al tuo problema è una VM Linux con Samba in esecuzione su un host Windows.
treecoder

Sì, può essere fatto, ma molte cose che devi considerare. Controlla le risposte per maggiori informazioni. È una di quelle cose che gli sviluppatori devono fare, a causa delle risorse, non perché a loro piace.
Umlcat,

Risposte:


27

Alcuni suggerimenti:

Case sensitive filesystem

Se il tuo file si chiama HelloWorld.php questo:

include "helloworld.php";

è legittimo su Windows e funzionerà. Ma i nomi dei file Linux sono case sensitive, si può avere file chiamati HelloWorld.php, helloworld.php, hEllOwOrlD.phpnella stessa directory. Quindi dovresti sviluppare su Windows come se stessi sviluppando su un filesystem con distinzione tra maiuscole e minuscole: usare esattamente i nomi di file, i nomi di directory, i nomi di estensione corretti - .phpè anche diverso da .PHP.

Separatori di directory e percorsi

In Windows diciamo:

include 'classes\myClass.php';

Ma in Linux diremmo:

include 'classes/myClass.php';

PHP è abbastanza intelligente da non preoccuparsene, entrambi i separatori funzionano in entrambi i sistemi. Ma dovresti essere coerente e andare con la barra (/) ovunque poiché è anche la norma sulla maggior parte dei sistemi. C'è una bella costante predefinita DIRECTORY_SEPARATOR che si traduce in quella corretta, se vuoi andare così lontano:

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

Lo stesso vale per il separatore di percorso, che è punto e virgola su Windows, in caso contrario due punti. Quindi, per sicurezza, dovresti fare:

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

quando è necessario un separatore di percorso. Anche se la maggior parte delle persone pensa che dal momento che a PHP non importa quale separatore usi, va bene, ma c'è un problema importante: i separatori saranno quelli specifici del sistema quando chiedi al sistema directory o percorsi. Quindi supponiamo che tu voglia far esplodere il percorso include nelle sue parti:

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

Codifica e delimitatore di file

Dovresti impostare il tuo IDE per impostare la codifica dei file per tutti i tuoi script su UTF-8 invece di Cp * e il delimitatore della linea di file su Unix ( "\n"anziché "\r\n"). Nella maggior parte dei casi non importa davvero, ma dovresti essere coerente e il modo migliore è il modo Unix (che funziona bene su Windows ma non viceversa).


1
Per le stringhe in cui potresti riscontrare problemi con la nuova riga, PHP include anche la costante PHP_EOL che utilizza il carattere di nuova riga corretto per la piattaforma corrente.
Jonathan Patt,

5
Le persone usano effettivamente le barre rovesciate nei loro percorsi in PHP / Windows? Anche se non avessi usato PHP per la prima volta su Linux, eviterei le barre rovesciate solo perché sono per evadere.
cHao,

2
Non dovrebbe essere "classi \\ myClass.php"?
luiscubal,

@luiscubal Sì, dato che sto usando virgolette doppie ... Grazie per averlo notato, modificato con virgolette singole.
yannis,

3
La distinzione tra maiuscole e minuscole e la codifica dei file sono i due che mi causano sempre problemi tra Windows / Linux.
Rangoric,

6

Non è possibile eseguire strftime()con %ein ambiente Windows, come si nota nella pagina di manuale :

Non tutti gli identificatori di conversione potrebbero essere supportati dalla tua libreria C, nel qual caso non saranno supportati da strftime di PHP (). Inoltre, non tutte le piattaforme supportano timestamp negativi, quindi l'intervallo di date potrebbe essere limitato a non prima dell'epoca di Unix. Ciò significa che% e,% T,% R e,% D (e forse altri) - nonché date precedenti al 1 gennaio 1970 - non funzioneranno su Windows, su alcune distribuzioni Linux e su alcuni altri sistemi operativi. Per i sistemi Windows, una panoramica completa degli identificatori di conversione supportati è disponibile su » MSDN .


4

Non ci saranno problemi nell'esecuzione del codice. Se modifichi i file salvati su Windows in Linux potresti notare che i caratteri di fine riga potrebbero essere diversi ma non danneggeranno nulla. Se ciò ti dà fastidio, configura il tuo IDE / editor di Windows per utilizzare la fine della linea Unix.


3

Preparati con un banco di prova Linux. Potrebbe essere un computer Linux virtuale in esecuzione su Windows, potrebbe essere un computer a doppio avvio, potrebbe essere il sistema di un amico. Quindi, ogni tanto (ad es. Lunedì mattina), porta il tuo codice sul sistema Linux e testalo.

Le altre risposte hanno gestito i problemi principali che dovrai affrontare, ma ci sono numerosi gotcha più piccoli, come:

  • la directory temporanea si trova in un posto diverso
  • le autorizzazioni per file e directory sono diverse
  • la funzione system () cambia radicalmente
  • Il nome utente che Apache viene eseguito come modifiche
  • Le cose che funzionano in Windows XP potrebbero non funzionare in Windows 8.

Sì, ci sono modi per aggirare con attenzione tutte queste differenze, ma sei stato attento a usare le soluzioni alternative? Certo che no - hai codificato e funzionava quindi deve essere OK.

Non mettere nulla su un computer host fino a quando non è stato testato su un sistema operativo simile.

Non ho esperienza di porting da Windows a Linux, ma ho una certa esperienza di porting da Linux a Windows e più esperienza di porting da Linux a OS X. Si può fare, ma le chiavi sono test, testing e testing.


1

Anche se mi sento abbastanza a mio agio sulla riga di comando di Linux e con strumenti di editing Linux come vim, faccio gran parte del mio sviluppo di PHP su una macchina Windows.

Ho un server virtuale su Internet (mi costa circa $ 20 al mese) che utilizzo come server di sviluppo e mi collego ad esso usando FileZilla. FileZilla scarica i file che sto modificando in una directory temporanea e tiene traccia dei salvataggi e quando li salvo li ricollega sul server dev, e li collaudo da lì.

È un po 'ingombrante, ma mi permette di fare lo sviluppo praticamente ovunque; usando FileZilla e un semplice editor su una chiavetta USB posso persino collegarmi da un altro computer e apportare modifiche. Tutti i test sono sempre sul server Linux, quindi colgo tutti i problemi che potrei aver causato immediatamente - meno spiacevoli sorprese quando lancio il codice sul server.

Potresti fare la stessa cosa con un account di hosting economico (anche se a seconda del tipo di applicazione che stai sviluppando potresti incorrere in problemi di prestazioni poiché gli account di hosting economico sono in genere abbastanza scarsi) e altre molte applicazioni FTP hanno anche la modifica e funzionalità di caricamento.


1

Sì, può essere fatto, ma molte cose che devi considerare. Controlla le risposte per maggiori informazioni.

È una di quelle cose, a volte gli sviluppatori devono fare, a causa delle risorse, non perché a loro piace.

Potresti avere un server web locale (apache, cherokee, anche M $), sul tuo PC e un server PHP installato. E il tuo PC, potrebbe non avere una connessione Internet, o può connettersi solo per brevi periodi di tempo.

Successivamente puoi aggiornare un sito Web reale, aggiornando il tuo file sul server reale, con strumenti ftp, con lo stesso PC o un altro PC, connesso a Internet.


0

Come molti hanno detto, non dovrebbero esserci problemi. Detto questo, VirtualBox semplifica davvero la creazione di una macchina virtuale Linux su cui è possibile testare la base di codice per assicurarsi che funzioni nell'ambiente di produzione senza averlo a portata di mano.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.