È possibile sviluppare efficacemente applicazioni PHP su Windows che verranno distribuite su server che eseguono Linux?

19

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

Penserei che non ci possano essere problemi, specialmente visto che sono un principiante in PHP e non userò nessuna delle funzioni avanzate che potrebbero essere specifiche per il sistema operativo. Tuttavia, mi piacerebbe essere sicuro dal momento che davvero non mi piace affatto Linux.

    
posta DotNetStudent 12.11.2011 - 01:24
fonte

7 risposte

27

Alcuni indicatori:

Sensibilità al caso del filesystem

Se il tuo file si chiama HelloWorld.php questo:

include "helloworld.php";

è valido su Windows e funzionerà. Ma i nomi di file Linux sono case sensitive, puoi avere file chiamati HelloWorld.php , helloworld.php , hEllOwOrlD.php nella stessa directory. Quindi dovresti sviluppare su Windows come se stessimo sviluppando su un filesystem sensibile al maiuscolo / minuscolo: usa esattamente i nomi file, i nomi delle directory, i nomi delle estensioni 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 preoccuparsi, 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 costante predefinita DIRECTORY_SEPARATOR che si traduce in quella corretta, se vuoi farlo lontano:

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

Lo stesso vale per il separatore del percorso, che è il punto e virgola su Windows, altrimenti i due punti. Quindi per sicurezza dovresti fare:

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

quando è necessario un separatore di percorsi. Sebbene la maggior parte della gente pensi che dal momento che PHP non si preoccupa di quale separatore si usa, va bene, ma c'è un aspetto importante: i separatori saranno quelli specifici del sistema quando chiederai al sistema directory o percorsi. Supponiamo che tu voglia esplodere il percorso di inclusione 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 l'IDE per impostare la codifica dei file per tutti gli script su UTF-8 anziché su Cp * e il delimitatore del file line su Unix ( "\n" invece di "\r\n" ). Nella maggior parte dei casi non ha molta importanza ma dovresti essere coerente e il modo migliore è Unix (che funziona bene su Windows ma non viceversa).

    
risposta data 12.11.2011 - 03:31
fonte
6

Non puoi eseguire strftime() con %e in ambiente Windows, come indicato nella pagina di manuale :

Not all conversion specifiers may be supported by your C library, in which case they will not be supported by PHP's strftime(). Additionally, not all platforms support negative timestamps, so your date range may be limited to no earlier than the Unix epoch. This means that %e, %T, %R and, %D (and possibly others) - as well as dates prior to Jan 1, 1970 - will not work on Windows, some Linux distributions, and a few other operating systems. For Windows systems, a complete overview of supported conversion specifiers can be found at » MSDN.

    
risposta data 12.11.2011 - 16:27
fonte
4

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

    
risposta data 12.11.2011 - 02:24
fonte
3

Preparati con un banco di prova Linux. Potrebbe essere un computer Linux virtuale che gira sotto Windows, potrebbe essere un computer dual-boot, potrebbe essere il sistema di un amico. Quindi, ogni tanto (ad esempio il lunedì mattina), porta il tuo codice sul sistema Linux e testalo.

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

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

Sì, ci sono modi per risolvere attentamente tutte queste differenze, ma siete stati attenti a utilizzare le soluzioni alternative? Certo che no - hai codificato e ha funzionato, quindi deve essere OK

Non mettere nulla su un computer host finché non è stato testato su un sistema operativo simile.

Non ho esperienza di porting da Windows a Linux, ma ho esperienza di porting da Linux a Windows e più esperienza di porting da Linux a OS X. Può essere fatto, ma le chiavi sono test, testing e testing.

    
risposta data 13.11.2011 - 08:27
fonte
1

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

Ho un server virtuale su internet (mi fa circa $ 20 al mese) che uso 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 salvi lo rimette sul server di sviluppo e lo provo da lì.

È un po 'macchinoso, ma mi permette di fare lo sviluppo praticamente ovunque; usando FileZilla e un semplice editor su una pen drive posso anche collegarmi da un altro computer e apportare modifiche. Tutti i test sono sempre sul server Linux, quindi prendo in considerazione eventuali problemi che potrei aver causato fuori dalla scatola: meno sorprese sgradevoli quando lancio il codice sul server.

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

    
risposta data 16.11.2011 - 15:42
fonte
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é gli piaccia.

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

Più tardi puoi aggiornare un vero sito web, aggiornando il tuo file sul server reale, con strumenti ftp, con lo stesso PC o un altro PC, connesso a Internet.

    
risposta data 16.11.2011 - 18:41
fonte
0

Come molti hanno detto, non dovrebbero esserci problemi. Detto questo, VirtualBox rende davvero facile montare una macchina virtuale Linux che puoi testare il tuo codice di base per assicurarti che funzioni lavorare nell'ambiente di produzione senza aver detto che l'ambiente di produzione è a portata di mano.

    
risposta data 12.11.2011 - 16:32
fonte

Leggi altre domande sui tag