Bir dizi çevrimiçi derleyici: Kodu doğrudan tarayıcıda çalıştırır ve test ederiz. Bir PHP betiğinin derlenmesini başlatma örneği

  • 22.04.2019

Hemen hemen tüm geliştiriciler er ya da geç bazı kodları çalıştırma veya hızlı bir şekilde kontrol etme ihtiyacıyla karşı karşıya kalırlar, ancak herkes bu kadar basit bir görev için ağır masaüstü IDE'lerini veya uygulama derleyicilerini çalıştırmanın hiç gerekli olmadığını bilmiyor. Her şeyi çok daha hızlı yapmanızı sağlayan çevrimiçi araçları kullanmak yeterlidir: Ctrl + C, Ctrl + V, Çalıştır, yüksek sesle - ve programın çıktısı zaten kırmızımsı gözlerinizin önünde.

En iyi çevrimiçi derleyicileri seçtik: bazıları oldukça çok yönlüdür, diğerleri ise kesinlikle belirli görevler için uyarlanmıştır. Her durumda, gereksiz olmayacaklar.

kodlama

Koding.com, bilinen anlamda bir çevrimiçi derleyici değildir. Hizmetin her kullanıcısı, bulutta birkaç tam teşekküllü sanal makine oluşturabilir. Ubuntu'yu çalıştırmak Kodu derlemek de dahil olmak üzere istediğini yapabileceği 14.04. Her şey popüler diller varsayılan olarak desteklenir, ancak kendinizinkini kolayca ekleyebilirsiniz.

Sunucunuz için kontrol paneline ek olarak, arayüzde kullanışlı bir IDE ve bir terminal penceresi mevcuttur. Kodlama en çok yönlü araçtır, aşağıda daha basit ve daha özel seçeneklere bakacağız.

IdeOne

IdeOne, 60'tan fazla programlama dilinde ve bunların belirli sürümlerinde doğrudan tarayıcıda kod çalıştırmanıza izin veren çevrimiçi bir derleyici ve hata ayıklama aracıdır.

Kız arkadaşı olmayanlar için yaratıcılar kodun Brainfuck dilinde derlenmesini sağladı.

JDoodle

Diğer birçok çevrimiçi derleyicide bulamayacağınız diller de dahil olmak üzere birçok dili destekleyen başka bir çevrimiçi derleyici. JDoodle'ın güzel bir özelliği, Birlikte çalışma- sadece bir bağlantı gönderin geçerli oturum ve böcekleri çift hızda yapın!

jsFiddle

Adına aldanmayın - jsFiddle yalnızca JavaScript için değildir. Bu çevrimiçi ön uç düzenleyici, herhangi bir JavaScript, HTML ve CSS kombinasyonunu test etmenize olanak tanır. Tabii ki, jQuery, Vue, React, TypeScript gibi çeşitli çerçeveler ve ayrıca SCSS gibi CSS ön işlemcileri için destek var. Kolaylık sağlamak için, favori düzenleyicinizden tuş bağlantılarını seçebilirsiniz. Doğru, yalnızca favori düzenleyiciniz Vim, Emacs veya Sublime Text ise.

CodePad

CodePad, kodu depolayabileceğiniz, paylaşabileceğiniz ve yürütme sonuçlarının daha sonra görüntülenmesiyle çalıştırabileceğiniz minimalist bir hizmettir. En yaygın dillerin birçoğu arasından seçim yapmak için sağlanmıştır, ancak ne yazık ki, belirli tercüman veya derleyici sürümlerini seçmeden.

Ana avantajı basitlik ve hafifliktir: site, hızlı bir şekilde çalışacaktır. yavaş internet... Vim veya Emacs ile entegrasyonun yanı sıra standart başlıkların otomatik olarak bağlanmasını sağlar.

Eksilerden, adlandırabilirsiniz tam yokluk Bir forma kod girerken sözdizimi vurgulaması. Ancak, önceden kaydedilmiş bir kaydı görüntülerken arka ışık mevcuttur.

Gcc tanrı cıvatası

GCC GodBolt etkileşimli bir C++ derleyicisidir. Bu koleksiyona basit bir arayüze sahip olması ve tuşlarla ayarlanabilen seçenekler de dahil olmak üzere çok sayıda ayar olması nedeniyle girdim.

En yenileri de dahil olmak üzere seçilebilecek birçok derleyici sürümü vardır. İtibaren ilginç özellikler program kodunun anında montaj diline çevrildiğini not edebiliriz.

PHP'yi kaynaktan derlemek daha çok Unix benzeri sistemlerde yapılır. Windows işletim sistemi kullananlar büyük ihtimalle PHP'yi ikili paketlerden indirecek ve kuracaktır. Kullanımının daha kolay olduğuna katılmasam da, önceden derlenmiş çözüm açık Unix sistemleri kaynaktan ikili derleme ile gelebilecek bazı faydalar vardır. Her şeyi hesaba katarak:

  • bir şansın var ince ayar son ürün derleme yaparken. belki istersin kesin uzantı harici bir kitaplık olarak yüklemek yerine doğrudan ikili olarak derlenir. Veya varsayılan olarak genellikle mevcut olanı kapatmak isteyebilirsiniz.
  • Gerekirse derleme sırasında belirli bir ortam için performansı artırabilecek bir numara yapabilirsiniz (elbette bu, bu durumda ne yaptığınızı zaten bildiğinizi varsayar. bu yazıyı okumazsın !).
  • derleme olabilir tek yol derlenmişse işlerin çalışmasını sağlayın ikili dosyalar yazılım ve kitaplık desteği ile eski sürümler üzerine inşa edildi ve şimdi yeni bir sistem üzerinde çalışıyorsunuz.

Bir uyarı: derleme, özellikle Windows'ta sinir bozucu olabilir! Derleme ortamının doğru şekilde kurulduğundan emin olmalı, derleyiciyi ve diğer derleme araçlarını beklendiği gibi nasıl kullanacağınızı öğrenmeli ve tüm bağımlılık kitaplıklarını karşılamalısınız. Umarız bu makale, bu engellerin birçoğunun üstesinden gelmek için attığınız ilk adımdır.

Yapı ortamını ayarlama

PHP C ile yazılmıştır ve bu nedenle kaynaktan PHP oluşturacaksanız bir C derleyicisi gereklidir. C ++ süper bir C kümesidir, bu nedenle iyi bir C ++ derleyicisi C kodunu derleyebilmelidir ve bu her zaman böyle olmasa da. Windows için Visual Microsoft, C ++ Express (daha sonra VC ++ olarak adlandırılacaktır) Microsoft web sitesinde ücretsiz olarak kullanılabilir... 2010 baskısı kullanıldı.

Bir derleyici sürümü seçerken PHP'yi nasıl çalıştıracağınızı aklınızda bulundurmalısınız. Resmi olarak derlenmiş Apache ikili dosyalarından mod_php ile çalışmak zorundaysanız ve yapmak istiyorsanız, PHP ile derleyin. Görsel kullanma Studio 6, çünkü bu Apache derleme sürümüdür. Modül, bu durumda msvcrt.dll olan Apache ile aynı çalışma zamanı kitaplığını hedeflemelidir. Apache'yi de kaynaktan oluşturuyorsanız veya PHP'yi FastCGI veya CLI olarak çalıştırmayı düşünüyorsanız, bu bir sorun değildir ve 2010 iyi çalışacaktır.

Yazılımı da yüklemeniz gerekir Windows yazılımı Geliştirme Kiti(SDK'dan sonra). SDK bize önemli dosyalar için başlıklar Windows platformları başarılı bir şekilde derlememiz gereken. Bu da sürüm 7.1 kullanıldı.

Derleyiciyi ve ardından SDK'yı yükleyin. Her ikisinde de tüm süreç boyunca size rehberlik eden bir grafik kurulum sihirbazı olduğu için kurulumdan bahsetmeyeceğim.

Çalışan bir derleyici derlemeniz olduğunda, Binary Tools ve Bilinen Paketleri adresinden indirin. windows.php.net... İkili araç paketi (20110915 arşivini kullanıyorum) re2c, bizon ve bazıları gibi geliştirme araçlarını içerir. ek komutlar PHP oluşturmak için ihtiyacınız olacak. İyi bilinen bir paket (derleyeceğim PHP sürümüyle aynı olduğu için 5.4 arşivini kullanıyorum) gereken minimum başlıkları ve kitaplık bağımlılıklarını içerir, örneğin zlib.h.

Muhtemelen PHP kaynağını indirmek istediğinizi söylemeye gerek yok. windows.php.net... Bu yazı yazılırken, Şimdiki versiyonu PHP 5.4.6, bu nedenle örneklerde bu sürüm numarasını göreceksiniz.

o İyi bir fikir, yaratmak çalışma alanı, kaynak kodunu paketinden çıkarabilir ve sisteminizin geri kalanını etkilemeyecek şekilde derleyebilirsiniz. Çalışma dizininiz olarak hizmet verecek bir C: \ PHP-Dev klasörü oluşturun ve ardından paketini açın ikili arşiv ve araçlar.

Ardından, C: \ PHP-Dev'deki PHP kaynağı olan arşivin içeriğini açın, artık kaynak klasörünüzde php5.4 var ve ardından deps arşivini deps kardeş klasörüne çıkartın. Dizin yapısı şöyle görünmelidir:

SDK ile birlikte yüklenen Windows SDK Komut İstemini açın (Başlat => Microsoft Windows SDK => Windows SDK Komut İstemi) ve aşağıdaki komutları yürütün:

Setenv / yayın / xp / x86 cd C: \ PHP-Dev bin \ phpsdk_setvars.bat

Derlemeye özgü birçok ortam değişkenini ayarladığından, tercihen normal cmd.exe konsolundan önce komut satırı SDK konsolunu kullanma kaynak kodu... Daha sonra komut derlemeleri de bu konsolda yapılmalıdır.

setenv, ortam için bazı yapı özelliklerini ayarlar. bu durum Hedef Windows XP 32 bit oluşturma ortamı yüklenir. Macera arıyorsanız / x64 ile deneyebilir ve inşa edebilirsiniz. Tanım farklı versiyonlar/Vista gibi Windows'un betiklerdeki bazı garip tanımlar nedeniyle çıkış sorunları yaşaması muhtemeldir (PHP hala XP uyumlu olmak istiyor). Ne yaptığınızı gerçekten bilmiyorsanız, yukarıda kullandığım önerilen değerlere bağlı kalmak muhtemelen en güvenlisidir.

phpsdk_setvars.bat betiği bazı ek ortam değişkenlerine gider, derleme işlemi ikili araçları bulabildi.

Tüm bu değişken ayarların yalnızca konsoldaki geçici oturumlar olduğunu unutmayın. Daha sonra derlemeye geri dönmek için her şeyi hızlı bir şekilde kapatırsanız, komutu tekrar çalıştırmanız gerekecek ve aksi takdirde aşağıdaki gibi hatalar alacaksınız, daha sonra yapılandırmayı çalıştırdığınızda devam edemezsiniz:

bison.exe denetleniyor... HATA: bizon gerekli

Doğru yapı ortamına, gerekli kaynaklara sahip olduğunuzdan ve hiçbir bağımlılığa sahip olmadığınızdan emin olmak, sürecin en zor kısmıdır. Şimdi ortamınız kaynaktan kuruldu ve bağımlılıklar yerinde, derleme zamanı!

PHP'yi Derlemek

SDK komut satırından PHP kaynak klasörüne gidin ve buildconf'u çalıştırın. Komut, derleme sürecini kontrol etmek için Makefile'ın oluşturacağı yapılandırma dosyalarını oluşturmaktan sorumludur.

buildconf tamamlandıktan sonra (yalnızca bir saniye sürer), configure --help - komutunu çalıştırın ve etkinleştirmek / devre dışı bırakmak istediğiniz özelliklerin yardımına bakın ve ardından istediğiniz seçenekle yeniden yapılandırmayı çalıştırın. Geçiş yapmadan önce hafta sonunu kontrol etmek iyi bir fikirdir, çünkü gerekli bağımlılıklardan herhangi biri mevcut değilse sizi uyaracaktır. Bu olursa, bağımlılıkları yükleyebilir ve kurulumu yeniden çalıştırabilir veya çağrıyı, bunlara ihtiyaç duyan uzantıları devre dışı bırakacak şekilde ayarlayabilirsiniz.

Son olarak, derlemeye başlamak için NMAKE'i çalıştırın.

Cd C: \ PHP-Dev \ php5.4 buildconf yapılandırmak nmake nmake testi

Herhangi bir yapılandırma veya NMAKE başarısız olursa, sorun iki şeyden biridir: Birincisi, ortam doğru şekilde yapılandırılmamış, ikincisi, harici kitaplıklara bağlı bir özelliği etkinleştirmişsiniz ve kitaplıklar sisteminizde yüklü değil. Ortamı yukarıdaki talimatlara göre oluşturduğunuzu ve çerçevede gerekli olabilecek ek kitaplıkların yapılandırıldığını iki kez kontrol edin.

İlk NMAKE derleme işlemi tamamlandığında, yepyeni PHP dosyalarınızı Release_TS klasöründe bulacaksınız. NMAKE testi, her şeyin olması gerektiği gibi çalıştığından emin olmak için yeni çift kovalı hataları çalıştırır. NMAKE testlerinin sonuçları, PHP'yi geliştirmelerine bağlı olan QA ekibine gönderilir, bu nedenle başlaması birkaç dakika sürebilir, bu çok önemli.

Bu noktada, oluşturacak NMAKE ek bileşenini sürdürme ek adımından da yararlanabilirsiniz. ZIP arşivleri ve kopyalanacak ikili dosyalar.

Uzantıları derleme

PHP uzantılarını derlemenin iki yolu vardır: statik ve dinamik olarak. Statik olarak derlenmiş bir uzantı bir PHP ikili dosyasına derlenirken, dinamik olarak derlenmiş bir uzantı daha sonra bir php.ini dosyası aracılığıyla yüklenebilen ayrı bir DLL dosyasıdır. Uzantılar genellikle DLL'nin durumuna göre derlenir, ancak statik derlemenin de bazı avantajları olsa da, sonuçta ihtiyaçlarınıza bağlıdır.

PHP uzantılarını Windows'ta derlemek için uzantı kaynak klasörünü PHP kaynak dizininiz olan ext klasörüne çıkarın. Ardından, buildconf - force komutunu çalıştırarak ve uzantıyı etkinleştirmek için uygun adımları kullanarak PHP'yi yeniden derleyerek komut dosyasını yeniden yapılandırın.

Örnek olarak AOP eklentisini statik olarak derleyelim. İndirmek PECL'den kaynak kodu ve ext içindeki bir klasöre sıkıştırın. Ardından şu adımları izleyin:

Cd C: \ PHP-Dev \ php5.4 buildconf --force configuration --enable-aop nmake

--force seçeneğiyle, buildconf onu yapılandırma komut dosyasını geri yüklemeye zorlar. Ardından, configure --help komutunu çalıştırın ve çıktıda yeni uzantıyı etkinleştirmek için bir seçenek görmelisiniz. Bu durumda, --enable-AOP olur.

nmake bittiğinde, AOP ile PHP ile yeni oluşturulmuş bir PHP ikili dosyasına ihtiyacınız olacak.

Uzantılar, PHP'de hazırlanmamış bir DLL olarak mevcut olacak, yukarıdaki adımların aynısını takip edebilirsiniz, ancak özelleştirilecek değer olarak "paylaşılan"ı belirtmek, seçeneğe izin verir.

Buildconf --force configuration --enable-aop = paylaşılan

Sonuç olarak DLL, ikili dosyayla birlikte Release_TS klasöründe olacaktır. PHP derlemesi sona erecek, bu durumda isim php_aop.dll'dir.

not

Windows'ta derleme yapmak, özellikle de uzantılar söz konusu olduğunda, hala biraz zor. Özellikle daha sonra PHP'yi değiştirmek istiyorsanız, kaynaktan derleme yapabilmek iyi bir beceridir.

Makale sizler için hazırlandı, site ekibi
Orijinal makale:
Çeviren: Victor Klim

Her şey ücretsiz derleyiciler Burada sunulan PHP, PHP komut dosyalarını, özel bir PHP yorumlayıcısı yüklemeden bir bilgisayarda çalışabilen makine koduna yeniden oluşturabilir veya bunları bir bayt kodu komut satırı arabiriminde derleyebilir (kurulum için NET veya Mono çerçevesi veya Java bayt kodu gerekir (sanal Java makinesi Kurulum için)).

Bu tür derleyiciler çeşitli amaçlar için faydalı olabilir: artık çalışma zamanında yorumlanmadıkları için betiğinizin yürütülmesini hızlandırabilirler; veya onlar sayesinde (diğer ticari scriptler için gerekli olan) kaynak kodunu ifşa etmeden uygulamalarınızı dağıtabilirsiniz. Sanırım internet bağımlıları yazmak isteyenler için de uygunlar. PHP programları ve bunları masaüstünde çalıştırarak dağıtın (bir sunucu üzerinde çalışan normal web uygulamalarının aksine), tüm bunlar PHP'nin öğrenmesi kolay bir programlama dili olması ve temelde İnternet erişimi olan birçok yerleşik işlevi içermesi nedeniyle mümkündür. (Bu durumda, uygulamaları gömülü bir web sunucusuyla yeniden dağıtmanız veya sunucuyu uygulamanıza derleyen bir derleyici kullanmanız gerekir.)

Bu arada, kodunuzda şaşırtmaca kullanmak istiyorsanız, bunun kullanırken de mümkün olduğunu bilmelisiniz. PHP hızlandırıcı ... Bu hızlandırıcılar ayrıca komut dosyanızın yürütme hızında bir artış sağlar.

Henüz bilmeyenler için faydalı bilgiler Resmi sürüm PHP tercümanı PHP web sitesinden indirilebilir: Köprü Metni İşlemcisi.

Yerel kod, .NET veya Java bayt kodu komut dosyaları yazmak için ücretsiz PHP derleyicileri.

Bambalam (yeni)

Bu program bağımsız üretir Windows uygulamaları PHP kaynak kodunuz için EXE. Sadece kaynak kodu kodladığı ve bir PHP yorumlayıcısı yerleştirdiği için yerel kod için gerçekten bir derleyici değildir, ancak bu program kesinlikle yerel ve bayt kodu için derleyici arayanlar için uygundur. Programın tamamı yazıldığı zaman, yürütme ortamı PHP 4.4.4'te yerleşikti (program 2006'dan beri güncellenmedi). Bambalam'ın kaynak kodu kamu malıdır.

Falanger (.NET için)

Phalanger, PHP kodunuzu CLI bayt koduna (.exe veya.dll) derler. Bu program, .NET 4.0 veya Mono çerçeveleri aracılığıyla çalıştırılabilir. PHP kodunuz herhangi bir .NET nesnesini ve ek PHP standart uzantı kitaplıklarını kullanabilir. Ortaya çıkan NET derlemesi imzalanabilir veya gizlenebilir. Bu program oluşturmanıza izin veren şablonlar da yayınlar. PHP uygulamaları Visual Studio'yu kullanarak. Program Apache lisansı altında yayınlanmıştır.

PHP için HipHop (yerel kod için)

HipHop, PHP kodunuzu daha sonra GNU C++ derleyicisi kullanılarak bir yürütülebilir dosyaya derlenen C++ koduna çevirir. ikili kod... Derleyici tüm işlevleri destekler PHP sürümleri 5.3 (tabii ki, şöyle bir şey dışında değerlendirmek ()). 64 bit için kodu çalışır ve derler Linux sürümleri ve FreeBSD. Program kaynak formda dağıtıldığı için manuel olarak (kendiniz) derlemeniz gerekir. PHP Lisansı altında yayınlandı.

Roadsend PHP (yerel kod için).

Roadsend PHP derleyicisi, Windows ve Linux için makine ikili dosyaları (yürütülebilir dosyalar) üretir. Komut dosyalarınız konsol programlarıyla (komut satırları) sınırlı değildir: yerleşik web sunucuları ile oluşturulabilirler, bu da sizin web sitenizde de olsa bir web sitesinde olduğu gibi çalışmalarına izin verir. özel sistem... Derleyici GNU GPL altında yayınlanır ve GNU LGPL altında çalışır. Ne yazık ki, program aktif gelişimini durdurdu.

Sıfır Projesi (Java için)

(Not: bu yazılım artık geçersiz görünüyor. Siteye yarım yıldır ulaşılamıyor.) Project Zero, PHP kodunuzu Java bayt koduna derleyip çalıştırabilen bir derleyici ve CLR içerir. Project Zero'nun yalnızca bir PHP derleyicisinden / çalışma zamanından daha fazlası olduğunu unutmayın; PHP veya Groovy (başka bir betik dili) kullanarak web uygulamalarını geliştirmenize izin veren gelişmiş bir çerçevedir. Bu derleyici Windows, Mac OS X ve Linux için kullanılabilir. Bu derleyici ile çalışmak için Java Development Kit'i indirmeniz gerekir.

Önerilen derleyicilerden hangisini tercih edersiniz? Yoksa başka bir favori tercümanınız var mı? Yorumlarınızı ve yorumlarınızı aşağıya bırakın, onları okumaktan ve geri almaktan memnuniyet duyarız.

Etiketler: PHP derleyicileri, komut dosyası çevirisi

Alexey Romanenko: Benim adım Alexey Romanenko, RBC için çalışıyorum. Bu konuşmanın konusu biraz tartışmalı. Görünüşe göre, her şey böyle çalışıyor gibi göründüğünde neden PHP betiklerini derleyelim?

Muhtemelen asıl soru şudur: "Neden?" Genel olarak bu sunumun amacı, böyle bir derlemenin gerekli olup olmadığını, gerekiyorsa neden, hangi biçimde ve kime yapıldığını anlamaya çalışmaktır.

PHP derleyici nedir?

Başlamak küçük genel bakış PHP derleyicisi nedir. Size nasıl çalıştığını, ne olduğunu ve nasıl hızlandırabileceğinizi anlatacağım.

İlk işlevsel modül, çeşitli istemcilerden (Apache, bir tür CGI sunucusu (Ortak Ağ Geçidi Arayüzü) ve diğerleri) PHP'ye erişmek için bir arayüz sağlayan SAPI (Sunucu API'si) olarak adlandırılır. PHP'yi herhangi bir uygulamaya yerleştirmenize izin veren gömülü SAPI de vardır.

İkinci ana kısım ise PHP Çekirdeği istekleri işleyen, tüm ağları uygulayan, dosya sistemi ve komut dosyalarının kendilerini ayrıştırarak.

Üçüncü küresel kısım, betiklerimizi bir bayt kodunda derleyen ve kendi başına yürüten Zend Engine'dir. sanal makine ve bellek yönetimiyle ilgilenir (kapsamlı ayırıcıları uygular).

En önemlilerinden biri ve büyük parçalar PHP'de kullandığımızın %99'unu uygulayan bir uzantı modülüdür (İngilizce Uzantılar). Bunlar, bazı kitaplıklar için "sarmalayıcılar" veya işlevsellik veya sınıflar, yerleşik kitaplıklar vb. Kendi uzantılarımızı da yazabiliriz.

Komut dosyasının kendisi nasıl yürütülür?

Öncelikle. Sözcük analizi yapılır - dosya yüklenir, ayrıştırılır, bu dosyanın kümesindeki tüm karakterler, daha sonra birlikte çalıştığımız belirli bir simge kümesine çevrilir.

fazda ayrıştırma bu jetonlar analiz edilir. Bu analize dayanarak, bayt kodunun daha sonra oluşturulacağı belirli bir gramer yapısı derlenir.

Sonunda, Zend Engine onu yürütür. Sonuç müşteriye geri gönderilir.

Yüksek yüklerden bahsediyoruz. Bu eylem planını her seferinde onlarla yeniden üretirseniz, her şey çok yavaş çalışacaktır. Tercümanımıza aynı anda yüzlerce veya binlerce istek geldiğinde, hız orada değildir.

Ama çözümler var. Uzun zamandır biliniyorlar.

Hızlanma nasıl sağlanır?

En basit, en ucuz ve en çok denenmiş çözüm, bayt kodu önbelleğe almadır. Ayrıştırma ve ayrıştırma aşamalarından geçmek yerine, sadece bayt kodumuzu önbelleğe alıyoruz. Bunun için var özel uzantılar- PHP ile çalışan herkese aşinadırlar, APC, eAccelerator, Xcache vb. Zend Engine sadece bayt kodunu çalıştırır.

İkinci seçenek, darboğazları belirleyen kod profillemedir. Bir şeyi PHP uzantıları olarak yeniden yazabiliriz (bir C/C++ uzantısı olacak) onu derleyip modüller olarak kullanabiliriz.

Üçüncü seçenek daha geneldir - PHP'yi unutun ve her şeyi yeniden yazın. Genel olarak, seçeneğin yaşam hakkı vardır, ancak yalnızca php kodunun yeterli olmadığı durumlarda. Büyükçe, büyük projeler(veya oldukça var olan uzun zaman) genellikle çok fazla birikir ve her şeyi yeniden yazmak uzun zaman alır. İş gereksinimleri bunu yapmanıza izin vermez. Genel olarak, PHP'de bir şeyler yazın, örneğin, ön uç sunucuÇok uzun değil çünkü basit bir dil. Olanları hızlı bir şekilde yapmanızı sağlar düşük seviyeli diller daha uzun yap.

Var Alternatif seçenek son zamanlarda yaygınlaşan PHP'yi bir yerde, daha hızlı bir şeye derlemek.

Bir şeyler derleyelim mi?

"Derleme" kelimesiyle kodun çevirisini kastediyorum. PHP betiği başka bir şeye, başka bir koda.

Bu durumda, iki tip olabilir.

Yerel kod bir tür ikili dosya fiziksel bir makinede çalıştırılabilir.

Yerel olmayan kod. Başka bir sanal makinede, örneğin JVM'de yürütülebilecek bazı bayt kodlarını derlemek mümkündür.

PHP'den yerel kodu derlemek için ne kullanılabilir?

Roadsend derleyicisi. Onun devamı Raven'dır. Ayrıca PHC var (bu PHP Açık kaynak derleyici). Son zamanlarda HipHop (Facebook) da ortaya çıktı.

Yerel olmayan kod için neler yapabileceğinize dair hızlı bir genel bakış burada. Bildiğim kadarıyla 3 çalışma seçeneği var. Bu, Java için bayt kodu oluşturma ve .Net için bayt kodu oluşturma: Quercus, Project Zero, Phalanger. Yerel olmayan koda derlemeyi dikkate almayacağım, çünkü onu kullanmıyoruz. Yerel kodu derlemeye geri dönelim.

Bence en eski derleyici Roadsend. 2002 yılında oldukça uzun zaman önce geliştirilmeye başlandı. Bu başlangıçta ticari bir uygulamaydı. Kapatıldı, sadece 2007'de Açık Kaynak olarak yayınlandı. çok var karmaşık şema derleme: Scheme dili için bir Bigloo derleyicisi kullanılır, ardından yerel kod oluşturulur. Bu derleyici Zend Engine kullanmaz.

Ayrı bir yürütülebilir ikili dosya oluşturabilir veya Apache için bir modül oluşturabiliriz. Bir web sunucusu görevi görecek bir ikili dosya oluşturmak da mümkündür. Ama çalışmıyor. Neden bilmiyorum ama bende hiç işe yaramıyor.

Bildiğim kadarıyla Roadsend şu anda üzerinde çalışılmıyor. Tamamen C++ ile yeniden yazılan Raven projesi olarak yeniden doğdu. Derleme olarak, kod oluşturmak için LLVM'yi kullanır.

Açık şu an her şey çok umut verici görünüyor.

Ama henüz yaratılış aşamasında. Belgelerde bile ikili dosyalar oluşturmayacağımıza dair ipuçları var. Beklemek.

PHC'miz olmasaydı her şey üzücü olurdu. Bir OpenSource derleyicisidir. 2005 yılından beri geliştirilmektedir. Dezavantajlarından biri: gömülü bir SAPI kullanıyor. Java makinesi olan Zend Engine'i terk etmiyoruz. Temel olarak, PHP kodunu PHP uzantı modülü koduna çevirir. Daha sonra derlenir, ancak yürütme işlemi yine Zend Motorunu kullanır.

PHC kullanma örneği

Örneğin, geleneksel derleyiciler gcc ile nasıl çalıştığımıza çok benzer. İlki bir tane ikili dosya olduğunu gösteriyor, kodu "C" de de üretebiliriz. Bu kodu oluşturduktan sonra aynı gcc dahili olarak kullanıldığından, optimizasyona yönelik bayrakları ve diğer şeyleri kullanabiliriz.

Komut satırında çalışan bir uygulama hakkındaydı.

Bir web uygulamasını başlatmak için birkaç adım gerçekleştirmeniz gerekir, bu oldukça zordur. İlk önce bir uzantı (Uzantı) oluşturmanız, ardından kodu derlemeniz ve ardından bir şekilde (dinamik veya statik olarak) bağlamanız gerekir.

PHC'nin temel faydaları

Aslında aynı PHP'yi kullanıyoruz, tam uyumluluğumuz var. Diğer tüm uzantılar desteklenir. Derlediğimiz her şeyi kullanıyoruz. Oldukça iyi belgeler.

Bu arada, PHC'nin ek bonuslarından biri, XML'in nasıl oluşturulduğuna bağlı olarak betiğimizin XML çalışmasını oluşturabilmenizdir, bazen bu yararlı olabilir.

eksiler

Bence bu eksik bir ikili dosya çünkü hala Zend Engine'e bağımlı. Web projelerini bağlamak açısından da bazı zorluklar var.

Ana fikir

Muhtemelen, Facebook'tan bir çözüm olan HipHop ortaya çıkmasaydı bu konuşma olmayacaktı. Yaratıcıları ayrıca büyük miktarda PHP kodu biriktirdi ve uzun süre onunla ne yapacağını düşündü.

Anladığım kadarıyla, her şeyi yeniden yazma seçenekleri reddedildikten sonra, bir çevirmen yazılmasına karar verildi (bu durumda, C++ koduna). Proje nispeten genç; resmen bu yıl Şubat ayında yayınlandı. PHP kodu C++ koduna çevrilir ve ardından oluşturulur standart yollarla işletim sisteminiz. Doğru, şimdiye kadar yalnızca Linux işletim sistemi destekleniyor.

Daha dün, bir Facebook temsilcisine bu kararı sordum. Şu anda PHP kodunun %100'ünün HipHop aracılığıyla derlendiğini söyledi. V saf formu kod PHP yorumlayıcısı aracılığıyla çalışmıyor. Yine, yaratıcılar işlemci yükünde önemli bir azalma olduğunu duyurdular.

HipHop'un ana işlevi

Doğrudan komut satırında çalıştırılabilen ikili dosyayı oluşturur. Akış web sunucusu olarak başlatmak için böyle bir seçenek var. Ayrı bir yerleşik hata ayıklayıcı da vardır. Komut dosyalarında hem yerel hem de uzaktan hata ayıklayabilirler (bir sunucu olarak çalışır).

Oluşturma süreci oldukça önemsizdir. Bir açıklama var, ancak her yerde toplanmadı. Şu anda, dediğim gibi, her şey Linux altında toplanıyor, ayrıca her şey başlangıçta 64 bit için "keskinleştirildi". Şimdi deneysel olarak 32 bit destekleniyor olsa da. Ama biraz toplamayı ve düzeltmeyi başardım - genel olarak, tüm bunları yaptı, çünkü varsayılan olarak olmayacak.

Ek olarak, kendi libcore sürümlerine sahipler ve bence, yamalanması gereken birkaç kitaplık var. Genel olarak, oluşturma süreci o kadar basit değildir.

Montajdan sonraki çıktıda, PHP kodumuzu C++'a çeviren belirli bir hphp dosyası alıyoruz. Bayraklara bakarsak, bunlardan epeyce var. Burada ihtiyaç duyabileceğiniz birkaç temel öğeyi vurguladım.

Çeşitli yönergeler ayarlayarak bir HDF dosyasını yapılandırma dosyası (config) olarak kullanabiliriz. Hataların seviyesini ve diğer şeyleri orada ayarlayabiliriz (HDF, yapılandırılmış bir biçimde olan her şeydir). Ayrıca, yapılandırmayı veritabanından alabilir veya doğrudan komut satırında kullanabiliriz.

Derleme sırasında kayıt seviyesini belirledik: tüm hataları göster veya ayrıca uyarıları göster, Ek bilgi veya genellikle olan her şeyin tam bir kaydını tutun.

Çok kullanışlı bir yönerge, derlemek istediğimiz komut dosyalarının bir listesini belirtmemize izin veren input_list = FILE'dir. Tembel bağlama yönergesinden de bahsetmeye değer. Tüm proje dosyalarını - derlenecek olanları belirtebiliriz.

Bir PHP betiğinin derlenmesini başlatma örneği

Üçüncü seviye günlük kaydı kuruldu, burada oldukça Genel bilgi zamanla, ne kadar sürdüğünü görebilirsin. Aslında senaryo oldukça basit. Bu her zamanki "Merhaba, Dünya", sadece bir ekran görüntüsü aldım.

En "ağır" dosya "program" ikili dosyamızdır, boyutu 28 MB'dir. Aslında, "Merhaba, Dünya"mız 28 MB ağırlığındadır. Belirtmek isterim ki standart "Yankı" dışında Merhaba, Dünya! "Line, bu ikili dosya çok daha fazlasını içerir. Tam teşekküllü bir web sunucusu, yönetim için tam teşekküllü bir sunucudur.

Ne elde ederiz?

C++'da bir satır "echo" Hello, World "den oluşan bir işlevi yerine getiren "Merhaba ..." var. Ayrıca, bir çok üçüncü taraf şeyler yükleniyor. Gördüğümüz gibi, bu bir tam teşekküllü dosya C++.

Bu sonuçta ortaya çıkan programdır. Zaten farklı konfigürasyonlar için epeyce farklı anahtar içeriyor, ancak ben sadece birkaçından bahsedeceğim.

Bu --mode, bu programımızın başlatma modudur. Hem doğrudan (komut satırından) hem de bir web sunucusu veya tam teşekküllü bir arka plan programı modunda çalıştırabiliriz. Birkaç seçenek daha var, ancak bunlar zorunlu değil.

Aynı formatta kullanılan config. Yönerge vermedim çünkü çok var. Belgeler HipHop'a dahildir. Wiki sitesinde yoktur, ancak her şeyin açıkça tanımlandığı dağıtım kitiyle birlikte belgeler sağlanır. Açıklamanın bu kadar ayrıntılı olmasını beklemiyordum bile.Çözümün oldukça esnek bir şekilde yapılandırılmasına izin veriyor.

Sunucu modunda çalıştırmak için bir bağlantı noktası belirtebiliriz. Yönetim için, sunucuyu yönetmenize izin veren bazı istekleri koyabileceğiniz ayrı bir bağlantı noktası kullanılır. Çalışan bir hata ayıklama sunucumuz varsa, hata ayıklama için "bağlanacağımız" ana bilgisayarı ve bağlantı noktasını belirtiriz.

Başlatma örneği

Örneğin 9999 numaralı bağlantı noktasını yayın için belirledik.Basit http istekleri yaparak ya istatistik alabilir ya da bir şekilde sunucuyu yönetebilir ya da bazı ek bilgiler alabiliriz. Genel olarak, bu çok uygundur.

Durum seçeneği

Sunucu durumunu çeşitli yerleşik biçimlerde (xml, json, html) ayarlamak mümkündür. Aslında, sunucu ana işleminin kendisi ve işleyiciler - istekleri işleyen iş parçacıkları - hakkında bilgi sağlanır.

Ek istatistikler

Aslında, birçok istatistik sağlanmaktadır. HipHop yerel olarak memcache ve SQL ile MySQL biçiminde çalıştığından, onunla gerçekleştirilen tüm işlemler hakkında ayrıntılı bilgi sağlar.

Bellekle çalışmanın tam istatistikleri

çok var kullanışlı özellik- Uygulama İstatistikleri. kullanma ilave fonksiyonlar PHP'de HipHop'un kendisi, betiklerimize istatistikler yazabilir ve daha sonra http'ye düzenli erişim elde ederiz.

hata ayıklama

Dediğim gibi, komut dosyalarında hata ayıklamak için yerleşik "hata ayıklamayı" kullanmak mümkündür. Bu çok uygundur, çünkü hphpi yorumlayıcısı derlediğimize benzer şekilde çalışır. Standart PHP'de yürütüldüklerinde ve derlenmiş olanlardan bazı verileri kullanırken komut dosyalarının "davranışında" bir fark vardır. Derlenenlerde hata ayıklamak için Facebook ayrı bir yorumlayıcı yazdı.

İlk durumda, kodu “-f” tuşuyla çalıştırın ve dosyanın nasıl davrandığını görün; tüm çıktılar stdout'a gider. Veya hata ayıklama modunda çalıştırabilir ve etkileşimli hata ayıklayıcıya girebiliriz. Standart GDB'ye çok benzer: ayrıca kesme noktaları ayarlayabilir, çalıştırabilir, değişken değerleri girebilir, takip edebilir ve daha fazlasını yapabilirsiniz.

Ek özelliklerden biri

Derlemeden sonra çıkan bir programımız var. RPC sunucusu olarak kullanılabilir. İstekleri http üzerinden başlatıyoruz ve params işlevini çağırarak parametreyi bir json dizisi veya ayrı parametre... Bu işlevlerin sonuçlarını döndüren json'u döndüreceğiz. Bu çok uygun, - gerekli işlevsellik zaten başlangıçta yerleşik.

HipHop'ın Eksileri

Şu anda, HipHop bu tür dil yapıları ve / e ile eval (), create_function () ve preg_replace () gibi işlevler, ancak bunların tümü eval () ile benzerdir. Doğru, son sürümlerde, bence eval () öğesini config aracılığıyla etkinleştirebilirsiniz. Ancak bunu yapmanız önerilmez. Genel olarak, eval() kullanmak kötüdür.

HipHop'un başlıca avantajları

Tabii ki, ana artı Facebook'tan destek. Çalışıyor ve oldukça aktif bir şekilde gelişiyor. Bu proje etrafında bir geliştiriciler topluluğu gelişiyor. Tamamen yeni bir PHP uygulaması yazılmıştır.

Dediğim gibi artı, yerel kodun üretilmesidir. CPU kullanım maliyetini düşürerek iddia edilen performans kazancı (testler bunu doğrular).

Konfigürasyonunda oldukça esnektir. Özelleştirme için epeyce seçenek olduğu için hoş bir şekilde şaşırdım. Bunun projenin gerçekten işe yaramasından kaynaklandığını düşünüyorum. Kullanılan her şey artırılır.

Bahsettiğim gibi, HipHop epeyce ek özellikler sunar. Bunların arasında RPC sunucusu, yönetim, çeşitli istatistikler ve çok daha fazlası olarak kullanın. Bu arada, diğer dillerle çalışmak için bir API de var.

Bu çözüm için oldukça iyi belgeler yazılmıştır. Diğer bir avantajı ise üretimde (örneğin Facebook) kullanıma gerçekten hazır bir çözüm olmasıdır.

eksiler

Ana dezavantaj, şu anda oldukça sınırlı sayıda modülün desteklenmesidir. Örneğin, bir veritabanı ile çalışırken, fonksiyonları sadece MySQL ile çalışmak için kullanabiliriz. Burada PostgreSQL desteği yoktur.

Daha önce bahsettiğim montajın karmaşıklığı gibi bir an da var. 32 bit sistemlerde derleme sorunları var. Ama bu, sanırım, yakında düzeltilecek. Şimdiye kadar sadece PHP 5.2'den derleme kullanılmıştır. Sürüm 5.3 henüz desteklenmemektedir, ancak söz verildiği gibi desteklenecektir.

Genel olarak derlemeden ve özel olarak HipHop'tan ne beklenmemelidir?

Derleme, veritabanına karşı yavaş SQL sorgularınızı hiçbir şekilde hızlandırmaz. Darboğaz temel ise, derleyin veya derlemeyin, bunun bir anlamı olmayacaktır.

Derleme, yükleme statiğini hızlandırmaz, yalnızca dinamikleri hızlandırır. Hata ayıklamayı çok daha zor hale getirir. Muhtemelen, çoğu kişi PHP'de her şeyin oldukça basit bir şekilde hatalarının ayıklanmasına alışkındır. Derlendiğinde, bu artık çalışmayacak. Her ne kadar belirttiğim gibi, Facebook bu süreci olabildiğince kolaylaştırmış olsa da, onsuz her seferinde derlemek daha da zor olurdu.

Bunun tüm sorunlarınızı çözecek bir tür "gümüş kurşun" olmasını beklemeyin. Aslında, derleme oldukça dar bir dizi sorunu çözer. Eğer öyleyse, o zaman yardımcı olabilir.

Derleme hangi sorunları çözer?

CPU üzerindeki yükü azaltır, çünkü aktif çalışma PHP ile Büyük bir sayı istekleri, üzerindeki yük oldukça güçlü bir şekilde artar. Tabii ki, bazı testler yapmak istiyorum.

Test yapmak

İlk test (en basit olanı), tamamlanması uzun zaman alan oldukça pahalı bir işlemdir. Testlerde bazı dış kaynakları kullanarak istekte bulunmaya değil, kendimi soyutlamaya çalıştım.

Yük tamamen işlemciye düşüyor. Test, HipHop'un herkesi "kazandığını" gösterdi: standart PHP derleyicisinden neredeyse bir buçuk kat daha hızlı çalışıyor. PHC bu testi çok yavaş geçti.

İkinci performans testi için SVN'den indirilebilen resmi PHP betiğini aldım. Sıralama, atama, toplama - matematik açısından oldukça pahalı işlemler gerçekleştiren bir dizi işlevi yerine getirir.

HipHop yine öndeydi. Ayrıca, standart PHP zaman farkı yaklaşık 3 kat. PHC burada daha iyi performans gösterdi, ancak HipHop'tan yaklaşık iki kat daha kötü.

PHP esas olarak http isteklerini işleyen akışlar için kullanılır - bu akılda tutulması gereken bir şeydir.

Birkaç standart konfigürasyon (PHP ile Apache, fpm-php ile Nginx ve kod önbelleğe alma için takılabilir bir APC). Beşinci seçenek HipHop'tur.

Dürüst olmak gerekirse, testleri bir sunucuda değil, bir dizüstü bilgisayarda çalıştırdım. Rakamlar elbette tam olarak gerçeğe uymayabilir ancak bu durumda sonuçlar normaldir. Unutulmamalıdır ki, yük arttıkça aynı anda istek sayısı da artar ve toplam tutar istekler. Sırada RPS var. test edildi standart sayfa, bunlardan 10 tanesini içeren basit kapanımlar... Temel olarak, bu PHP'yi bir yorumlayıcı olarak test ediyor.

Seyirciden gelen soru: Bir hücredeki sayılar nelerdir - saniye?

Alexey Romanenko: Bu fps'dir.

Buradan, eşzamanlı istek sayısındaki artışla HipHop'un çok iyi davrandığı sonucuna varabiliriz.

APC kullanımının standart bir uygulama olduğu görülebilir. Örneğin Apache olarak yaklaşık 2 kat performans artışı eklediğini gösterir. Nginx ile bu da var. Ancak Nginx'in yavaş olması bu paketin daha kötü olduğu anlamına gelmiyor. Sadece belirli bir test. Burada gerçekten test edersek, Apache yavaş isteklerde "ölecektir".

Muhtemelen, ihtiyacımız olup olmadığını anlamak istiyorum.

Derlemeyi ne zaman düşünmelisiniz?

Büyük olasılıkla, darboğazımızın CPU olduğunu gördüğümüzde buna ihtiyaç vardır. PHP'yi standart yorumlayıcı olarak kullanarak CPU "karşılaşırsak", muhtemelen projenin bir bölümünün derlenebileceğini düşünmeye değer.

Uygulamanızın çalışması için özerkliğe ihtiyaç duyduğunuz bazı durumlarda, bu yöntemin işe yaraması pek olası değildir.

Sunucu sayısını azaltmak. Çok sayıda sunucu olduğunda, performansı yarıya indirerek, kabaca konuşursak, sayıyı da yarıya indiririz. Bu bir sunucu olduğunda anlamsızdır, ancak 100-200 olduğunda muhtemelen mantıklıdır.

Facebook'un HipHop'u kullanmaya başlamasının ana nedeni, yeniden yazılamayan (ya da hiç kimsenin olmaması ya da sadece pahalı olması) büyük miktarda PHP kodunun bulunmasıdır. Verimlilikte 2 kat artış zaten iyi bir şey.

Muhtemelen her şey. Soruları bekliyorum.

Sorular ve cevaplar

Seyirciden gelen soru: Merhaba. Facebook dışında başka başarılı Hiphop uygulamalarınız varsa lütfen söyleyin. Örneğin, RBC web sitesini HipHop'a aktarmak ister misiniz? Alexey Romanenko:İkincisinden başlayacağım. RBC web sitesinin tercüme edilmesi zordur. Başarılı uygulama hakkında. PHP Unit'i kendim derledim, başarıyla derlendi. Ayrıca bildiğim kadarıyla PHP Bunty board başarıyla derleniyor. Aslında, bir dizi kuruluş zaten derleme kullanıyor. Daha ileri testler, bu projenin kullanımının ne kadar haklı olacağını gösterecektir. Seyirciden gelen soru: Bunu kullanan bir kuruluşa örnek verebilir misiniz? Alexey Romanenko: Dürüst olmak gerekirse, şimdi söylemeyeceğim ama burası Batı. Bildiğim kadarıyla burada kimse kullanmıyor. Seyirciden gelen soru: Bahsettiğiniz bazı özelliklerin desteklenmemesi dışında çalışma zamanındaki fark nedir? Canlı bir projeyi çevirmek ne kadar tehlikeli? Alexey Romanenko: Aradaki fark, derlenmiş herhangi bir programın çökebilmesidir. Belki de henüz tespit edilmemiş bazı sorunlar ortaya çıkacaktır. Aslında, PHP'nin kendi "davranışında" bir takım farklılıklar vardır. Onlardan bahsetmedim, çünkü belgelerde daha ayrıntılı bilgi bulunabilir. Facebook ekibi kendi tercümanını yazdı ki bu aslında derlenmiş biçimde çalışacak olanın %99,9'una denk geliyor. Kodunuzu standart bir PHP yorumlayıcısı ile değil, dediğim gibi PHP için hphpi ile test etmek daha iyidir.