Linux üzerinde çalışan sunuculara dağıtılacak olan Windows üzerinde PHP uygulamalarını etkili bir şekilde geliştirmek mümkün müdür?


19

PHP'yi Windows üzerinde kodlamak ve daha sonra Linux çalıştıran bir sunucuda barındırmak uygun mudur? Böyle bir projenin göçünde herhangi bir sorun olabilir mi?

Özellikle PHP'de acemi olduğum ve işletim sistemine özgü olabilecek gelişmiş işlevlerden hiçbirini kullanmayacağım için gerçekten herhangi bir sorun olamayacağını düşünürdüm. Ancak, Linux'u hiç sevmediğimden emin olmak istiyorum.


1
Sorununuza basit bir çözüm, bir Windows ana bilgisayarında Samba ile çalışan bir Linux VM'dir.
treecoder

Evet, yapılabilir, ancak dikkate almanız gereken birkaç şey. Daha fazla bilgi için cevapları kontrol edin. Bu, geliştiricilerin kaynaklardan dolayı yapmak zorunda oldukları şeylerden hoşlandığı için yapması gereken şeylerden biri.
umlcat

Yanıtlar:


27

Bazı işaretçiler:

Dosya sistemi büyük / küçük harfe duyarlılık

Dosyanıza HelloWorld.php adı verilirse:

include "helloworld.php";

Windows'da yasaldır ve çalışacaktır. Ama Linux dosya adları aradığınız dosyaları olabilir, küçük harf duyarlıdır HelloWorld.php, helloworld.php, hEllOwOrlD.phpaynı dizinde. Bu nedenle, Windows'ta büyük / küçük harfe duyarlı bir dosya sisteminde geliştiriyormuş gibi geliştirmelisiniz: tam olarak doğru dosya adlarını, dizin adlarını, uzantı adlarını kullanın - .phpayrıca farklıdır .PHP.

Dizin ve yol ayırıcılar

Windows'da diyoruz:

include 'classes\myClass.php';

Ama Linux'ta şunu söyleyebiliriz:

include 'classes/myClass.php';

PHP umursamayacak kadar akıllıdır, her iki ayırıcı da her iki sistemde de çalışır. Ancak tutarlı olmalısınız ve çoğu sistemdeki norm olduğu için her yerde eğik çizgi (/) ile gitmelisiniz. Eğer bu kadar ileri gitmek istiyorsanız, doğru olana çeviren önceden tanımlanmış şık bir sabitDIRECTORY_SEPARATOR vardır:

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

Aynı şey Windows'ta noktalı virgül olan yol ayırıcı için de geçerlidir. Güvende olmak için şunları yapmalısınız:

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

yol ayırıcıya ihtiyaç duyulduğunda. Çoğu insan PHP'nin hangi ayırıcıyı kullandığınızı umursamadığını düşünmesine rağmen, tamamdır, ancak önemli bir yakalama vardır: Sistemden dizinler veya yollar istediğinde ayırıcılar sisteme özel olanlar olacaktır. Diyelim ki içerme yolunu parçalarına patlatmak istiyorsunuz :

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

Dosya kodlama ve sınırlayıcı

IDE'nizi tüm komut dosyalarınız için dosya kodlamasını Cp * yerine UTF-8 olarak ve dosya satırı sınırlayıcısını Unix ( "\n"yerine "\r\n") olarak ayarlamanız gerekir. Çoğu durumda gerçekten önemli olmayacaktır, ancak tutarlı olmalısınız ve en iyi yol Unix yoludur (Windows'da iyi çalışır, ancak tam tersi değildir).


1
Yeni satır sorunlarıyla karşılaşabileceğiniz dizeler için PHP, geçerli platform için doğru satırsonu karakterini kullanan PHP_EOL sabitini de içerir.
Jonathan Patt

5
İnsanlar aslında PHP / Windows yollarında ters eğik çizgi kullanıyor? Linux'ta ilk PHP kullanmamış olsam bile, sadece bir kaçış için oldukları için ters eğik çizgilerden kaçınırdım.
cHao

2
"Sınıflar \\ myClass.php" olmamalı mı?
luiscubal

@luiscubal Evet, çift tırnak kullandığımdan ... Bunu anlattığınız için teşekkürler, tek tırnak şeklinde düzenlendi.
yannis

3
Büyük / Küçük Harfe Duyarlılık ve Dosya Kodlama, Windows / Linux arasında her zaman sorun yaratan iki durumdur.
Rangoric

6

Sen koşamam strftime()ile %ebelirtildiği üzere, Windows ortamında elle sayfa :

Tüm dönüşüm belirteçleri C kitaplığınız tarafından desteklenmeyebilir, bu durumda PHP'nin strftime () tarafından desteklenmezler. Ayrıca, tüm platformlar negatif zaman damgalarını desteklemediğinden, tarih aralığınız Unix döneminden daha önce olmayanlarla sınırlı olabilir. Bu,% e,% T,% R ve% D'nin (ve muhtemelen diğerlerinin) yanı sıra 1 Ocak 1970 tarihinden önceki tarihlerin Windows, bazı Linux dağıtımları ve diğer birkaç işletim sisteminde çalışmayacağı anlamına gelir. Windows sistemleri için, desteklenen dönüşüm belirteçlerine tam bir genel bakış » MSDN'de bulunabilir .


4

Kodu çalıştırırken herhangi bir sorun olmayacak. Linux'ta Windows'a kaydedilen dosyaları düzenlerseniz, satır sonu karakterlerinin farklı olabileceğini, ancak hiçbir şeye zarar vermeyeceğini fark edebilirsiniz. Rahatsız olursa, Windows IDE / düzenleyicinizi Unix satır sonu kullanacak şekilde yapılandırırsınız.


3

Kendinizi bir Linux test yatağına kurun. Windows altında çalışan sanal bir Linux bilgisayar olabilir, çift önyüklemeli bir bilgisayar olabilir, bir arkadaşınızın sistemi olabilir. Ardından, arada bir (ör. Pazartesi sabahları), kodunuzu Linux sistemine taşıyın ve test edin.

Diğer cevaplar karşılaşacağınız temel sorunları ele aldı, ancak çok sayıda küçük gotchas var, örneğin:

  • temp dizini farklı bir yerde
  • dosya ve dizin izinleri farklı
  • system () işlevi radikal olarak değişir
  • Apache'nin değişiklik olarak çalıştırdığı kullanıcı adı
  • Windows XP altında çalışan şeyler Windows 8 altında başarısız olabilir.

Evet, tüm bu farklılıklar üzerinde dikkatli bir şekilde çalışmanın yolları var, ancak geçici çözümleri kullanmaya dikkat ettiniz mi? Tabii ki değil - kodladınız ve bu yüzden iyi olmalı koştu.

Benzer bir işletim sisteminde test edilene kadar ana bilgisayara hiçbir şey koymayın.

Windows'tan Linux'a taşıma konusunda hiçbir deneyimim yok, ancak Linux'tan Windows'a taşıma konusunda bazı deneyimim ve Linux'tan OS X'e taşıma konusunda daha fazla deneyimim var. Bu yapılabilir, ancak anahtarlar test, test ve test etmektir.


1

Linux komut satırında ve vim gibi Linux düzenleme araçlarıyla oldukça rahat olmama rağmen, PHP gelişimimin çoğunu bir Windows makinesinde yapıyorum.

Bir geliştirme sunucusu olarak kullandığım internette sanal bir sunucum var (beni ayda yaklaşık 20 $ çalıştırıyor) ve FileZilla kullanarak bağlanıyorum. FileZilla, düzenlediğim dosyaları geçici bir dizine indirir ve kaydetmeleri takip eder ve kaydettiğimde dev sunucusuna geri atar ve oradan test ederim.

Biraz hantal, ama gelişimi hemen hemen her yerde yapmama izin veriyor; FileZilla ve bir başparmak sürücüsünde basit bir düzenleyici kullanarak başka bir bilgisayardan bile bağlanabilir ve değişiklik yapabilirim. Tüm testler her zaman Linux sunucusundadır, bu yüzden kutunun dışında neden olabileceğim sorunları yakalarım - kodu sunucuya attığımda daha az hoş olmayan sürprizler.

Aynı şeyi ucuz bir barındırma hesabıyla da yapabilirsiniz (ne tür bir uygulama geliştirdiğinize bağlı olarak, ucuz barındırma hesapları genellikle oldukça güçsüz olduğundan performans sorunlarıyla karşılaşabilirsiniz) ve diğer birçok FTP uygulamasında da düzenleme ve yükleme işlevi.


1

Evet, yapılabilir, ancak dikkate almanız gereken birkaç şey. Daha fazla bilgi için cevapları kontrol edin.

Bu şeylerden biri, bazen geliştiriciler, kaynaklardan dolayı, yapmak istedikleri için değil, yapmak zorundalar.

Bilgisayarınızda yerel bir web sunucusu (apache, cherokee, hatta M $) ve PHP sunucusu yüklü olabilir. Bilgisayarınızın İnternet bağlantısı olmayabilir veya yalnızca kısa süreler için bağlanabilir.

Daha sonra gerçek bir web sitesini güncelleyebilir, dosyanızı aynı sunucu veya internete bağlı başka bir bilgisayarla ftp araçlarıyla gerçek sunucuya güncelleyebilirsiniz.


0

Çoğu insanın dediği gibi gerçekten sorun olmamalı. Bununla birlikte, VirtualBox , üretim ortamını kullanışlı hale getirmeden üretim ortamında çalıştığından emin olmak için kod tabanınızı test edebileceğiniz bir linux sanal makinesini açmayı gerçekten, gerçekten kolaylaştırıyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.