Bir dizi çevrimiçi derleyici: Kodu doğrudan tarayıcıda çalıştırır ve test ederiz. Ücretsiz PHP derleyicileri Bir PHP betiğini derlemeye nasıl başlayacağınıza dair bir örnek

  • 20.06.2020

PHP'yi kaynaktan derlemek daha çok Unix benzeri sistemlerde yapılır. Windows işletim sistemi ortamında çalışanlar büyük olasılıkla PHP'yi ikili paketlerden indirip kuracaktır. Önceden derlenmiş bir çözümü kullanmanın daha kolay olduğuna katılmasam da, Unix sistemlerinde bile ikili dosyaları kaynaktan derlemenin bazı avantajları var. Neticede:

  • Derlerken nihai ürüne ince ayar yapma olanağına sahipsiniz. Belki de harici bir kitaplık olarak yüklemek yerine doğrudan ikili olarak derlenen belirli bir uzantı istiyorsunuz. Veya genellikle varsayılan olarak bulunan bir özellik olan bir şeyi kapatmak isteyebilirsiniz.
  • Gerekirse, derleme sırasında belirli ortamınız için performansı artırabilecek hileler yapabilirsiniz (elbette bu, bu durumda ne yaptığınızı zaten bildiğinizi varsayar. bu makaleyi okumazsın !).
  • Derlenmiş ikili dosyalar, yazılım ve kitaplık desteğine sahip eski sürümler üzerine kurulmuşsa ve şimdi yeni bir sistem üzerinde çalışıyorsanız, derleme, işleri yürütmenin tek yolu olabilir.

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

Yapı ortamını ayarlama

PHP C ile yazılmıştır ve bu nedenle kaynaktan PHP oluşturacaksanız bir C derleyicisi gerekir. C++, C'nin bir üst 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 mevcuttur. 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. Mod_php ile Apache'nin resmi olarak derlenmiş ikili dosyaları ile çalışmak zorundaysanız ve bu Apache derleme sürümü olduğundan PHP'yi Visual Studio 6 kullanarak derlemek istiyorsanız. Modül, Apache ile aynı çalışma zamanı kitaplığını hedeflemelidir, bu durumda msvcrt.dll . Apache'yi de kaynaktan oluşturuyorsanız veya PHP'yi FastCGI veya CLI olarak çalıştıracaksanız, bu bir sorun değildir ve 2010 gayet iyi çalışacaktır.

Ayrıca Windows Development Kit (sonra SDK) yazılımını da yüklemeniz gerekir. SDK bize, başarılı bir şekilde derlememiz gereken Windows platformu için önemli başlık dosyalarını verir. 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 edecek bir grafik kurulum sihirbazı olduğu için kurulumdan bahsetmeyeceğim.

Çalışan bir derleyici derlemeniz olduğunda, ikili araçları ve bilinen paketleri windows.php.net adresinden indirin. İkili araçlar paketi (20110915 arşivini kullanıyorum) re2c, bizon gibi geliştirme araçlarını ve PHP'yi oluşturmak için ihtiyaç duyacağınız bazı ekstra komutları içerir. Bilinen paket (derleyeceğim PHP sürümüyle eşleştiği için 5.4 arşivini kullanıyorum) gereken minimum üstbilgileri ve zlib.h gibi kitaplık bağımlılıklarını içerir.

Muhtemelen PHP kaynağını windows.php.net adresinden de indirmek istediğinizi söylemeye gerek yok. Bu yazının yazıldığı sırada PHP'nin şu anki sürümü 5.4.6'dır, bu yüzden örneklerde bu sürüm numarasını göreceksiniz.

Kaynak kodu paketinden çıkarabileceğiniz ve sisteminizin geri kalanını etkilemeyecek şekilde derleyebileceğiniz bir çalışma alanı oluşturmak iyi bir fikirdir. Bir çalışma dizini olarak hizmet etmek için bir C:\PHP-Dev klasörü oluşturun ve ardından ikili arşivi ve araçları bu klasöre çıkarın.

Ardından, C:\PHP-Dev'deki PHP kaynağı olan arşivin içeriğini çıkarın, şimdi kaynak klasörde 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 yüklenen Windows SDK Komut İstemi'ni açın (Başlat => Microsoft Windows SDK => Windows SDK Komut İstemi) ve aşağıdaki komutları çalıştırın:

Setenv /release /xp /x86 cd C:\PHP-Dev bin\phpsdk_setvars.bat

Kaynak kodu derlemesine özgü birçok ortam değişkenini ayarladığından, normal cmd.exe konsolundan önce komut satırı SDK konsolunun kullanılması istenir. Daha sonra komut derlemeleri de bu konsolda yapılmalıdır.

setenv, derlemenin bazı özelliklerini ortam için ayarlar, bu durumda, derlemenin hedef Windows XP 32-bit sürümünün ortamı ayarlanır. Macera arıyorsanız /x64 ile deneyebilir ve inşa edebilirsiniz. /Vista gibi farklı Windows sürümlerini tanımlamak, komut dosyalarındaki bazı garip tanımlar nedeniyle büyük olasılıkla bir çıkış sorunudur (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.

Bazı ek ortam değişkenleri için phpsdk_setvars.bat betiği çıkar, derleme işlemi ikili araçları bulabildi.

Tüm bu ayar değişkenlerinin konsolda yalnızca 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. Artık ortamınız kaynaktan kurulduğuna ve bağımlılıklar yerinde olduğuna göre, derleme zamanı!

PHP'yi Derlemek

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

buildconf tamamlandıktan sonra (sadece bir saniye sürer), configure --help - komutunu çalıştırın ve hangi özellikleri etkinleştirmek/devre dışı bırakmak istediğinize ilişkin yardımı inceleyin, ardından istediğiniz seçenekle yeniden configure (ayarlar) çalıştırın. Gitmeden önce çıktıyı 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

Yapılandırma veya NMAKE başarısız olursa, sorun ikisinden biridir: Birincisi, ortam doğru kurulmamış, ikincisi, dış kitaplıklara bağlı bir özelliği etkinleştirmişsiniz ve kitaplıklar sisteminizde yüklü değil. Ortamı yukarıda belirtildiği gibi oluşturduğunuzu ve temel yapılandırma ayarlarında gerekli olabilecek ek kitaplıkların ayarlandığı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 kapasitans hata testleri çalıştırır. NMAKE testlerinin sonuçları, PHP'yi geliştirmelerine bağlı olan QA ekibine gönderilir, bu nedenle çalışması birkaç dakika sürebilir, bu sorumlu bir konudur.

Bu noktada, kopyalayabileceğiniz ZIP arşivleri ve ikili dosyalar oluşturacak isteğe bağlı NMAKE ek bileşen adımından da yararlanabilirsiniz.

Derleme uzantıları

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

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

Örnek olarak, bir AOP uzantısını statik olarak derleyelim. Kaynak kodunu PECL'den indirin ve ext içindeki bir klasöre çıkarın. Ardından şunları yapın:

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ıya yeni uzantıyı dahil etmek için bir seçenek görmelisiniz. Bu durumda, --enable-AOP olur.

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

Uzantılar PHP'de hazır değil, bir DLL olarak mevcut olacak, yukarıdakiyle aynı adımları takip edebilirsiniz, ancak yapılandırılacak değer olarak "paylaşılan" (paylaşılan) belirtmek bu seçeneğe izin verir.

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

Ortaya çıkan DLL, Release_TS klasöründe olacak ve ikili PHP derlemesi sona erecek, bu durumda isim php_aop.dll olacaktır.

not

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

Yazı site ekibi tarafından sizler için hazırlanmıştır.
Orijinal makale:
Çeviren: Viktor Klim

Burada sunulan tüm ücretsiz PHP derleyicileri, PHP komut dosyalarını, özel bir PHP yorumlayıcısı indirmeden bir bilgisayarda çalışabilen makine kodunda yeniden derleyebilir veya bunları bir bayt kodu komut satırı arabiriminde derleyebilir (kurulum için NET veya Mono çerçevesi veya Java bayt kodu gerekir ( kurulum için Java Sanal Makinesinin gerekli olduğu durumlarda)).

Bu tür derleyiciler çeşitli amaçlar için yararlı olabilir: artık çalışma zamanında yorumlanmadıkları için betiğinizin daha hızlı çalışmasını sağlayabilirler; veya onlar sayesinde (diğer ticari scriptlerin gerektirdiği) kaynak kodunu ifşa etmeden uygulamalarınızı dağıtabilirsiniz. İnternete bağlı PHP programları yazmak ve bunları masaüstü çalıştırma özelliği ile dağıtmak (sunucu üzerinde çalışan normal web uygulamalarının aksine) için de uygun olduklarını varsayıyorum, bunların hepsi mümkün çünkü PHP kolay -öğrenmek için programlama dili ve temel olarak internete erişimi olan birçok yerleşik işlevi içerir. (Bu durumda, uygulamaları gömülü bir web sunucusuyla dağıtmanız veya sunucuyu uygulamanızda derleyen bir derleyici kullanmanız gerekir.)

Bu arada, kodunuzda şaşırtmaca kullanmak istiyorsanız, bunun aynı zamanda şunu kullanarak da mümkün olduğunu bilmelisiniz. PHP hızlandırıcı. Bu hızlandırıcıların ayrıca komut dosyası yürütmenizi hızlandırması gerekiyor.

PHP çevirmeninin resmi sürümünün PHP web sitesinden indirilebileceğini henüz bilmeyenler için faydalı bilgiler: Köprü Metni İşlemcisi.

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

Bambalam (yeni)

Bu program, PHP kaynak kodunuz için bağımsız Windows EXE uygulamaları üretir. Sadece kaynak kodu kodladığı ve bir PHP yorumlayıcısı yerleştirdiği için tam olarak yerel bir kod derleyicisi değildir, ancak bu program kesinlikle yerel ve bayt kodu derleyicileri arayan kişiler içindir. Programın tamamı yazıldığında, yürütme ortamı PHP 4.4.4'ün yerleşik sürümüydü (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 standart PHP uzantısının ek kitaplıklarını kullanabilir. Ortaya çıkan NET derlemesi imzalanabilir veya gizlenebilir. Program ayrıca Visual Studio kullanarak PHP uygulamaları oluşturmanıza izin veren şablonlar da üretir. 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 çalıştırılabilir ikili koda derlenen C++ koduna çevirir. Derleyici, PHP 5.3'ün tüm özelliklerini destekler (elbette değerlendir()). 64 bit Linux ve FreeBSD için çalışır ve kod derler. Program kaynak kod şeklinde dağıtıldığı için manuel olarak (kendiniz) derlemeniz gerekecektir. PHP Lisansı altında yayınlandı.

Roadsend PHP (yerel kod için).

Roadsend PHP derleyicisi, Windows ve Linux için yerel 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 ve elbette kendi kullanıcı sisteminizde de olsa bir web sitesinde çalıştıkları şekilde çalışmalarına izin verirler. 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 geçersiz görünüyor. Siteye yarım yıldır ulaşılamıyor.) Project Zero, PHP kodunuzu Java bayt kodunda 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 olgun 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 gerekecek.

Hangi derleyiciyi 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ı memnuniyetle okuyacağız ve saracağız.

Etiketler: PHP derleyicileri, komut dosyası çevirisi

Alexey Romanenko: Benim adım Alexei Romanenko, RBC için çalışıyorum. Bu raporun konusu biraz tartışmalı. Görünüşe göre, her şey zaten çalışıyor gibi görünüyorken neden PHP betiklerini derleyelim?

Muhtemelen asıl soru: "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?

İlk olarak, bir PHP derleyicisinin ne olduğuna dair küçük bir genel bakış. 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, istekleri işleyen, ağ, dosya sistemi ve komut dosyalarının ayrıştırılması ile ilgili tüm çalışmaları uygulayan PHP Çekirdeğidir.

Üçüncü küresel kısım, betiklerimizi bir bayt kodunda derleyen, onu sanal makinesinde yürüten ve bellek yönetimini yöneten (kapsamlı ayırıcıları uygular) Zend Motorudur.

En önemli ve büyük parçalardan biri, PHP'de kullandığımızın %99'unu uygulayan Eklentiler modülüdür. 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 - bir 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.

Ayrıştırma aşaması bu belirteçleri ayrıştırır. Bu analize dayanarak, daha sonra bayt kodunun üretileceği belirli bir gramer yapısı derlenir.

Sonunda, Zend Engine onu yürütür. Sonuç istemciye döndürülür.

Yüksek yüklerden bahsediyoruz. Bu eylem planını her seferinde onlarla tekrarlarsanız, her şey çok yavaş çalışacaktır. Tercümanımıza aynı anda birkaç yüz veya binlerce istek geldiğinde, hiçbir hız yoktur.

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

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

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

İkinci seçenek, darboğazları belirleyen kod profili oluşturmadır. 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 yeterli php kodunun olmadığı durumlarda. Büyük, büyük projelerde (veya oldukça uzun süredir var olanlarda), 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 yazmak, örneğin bir ön uç sunucu için çok uzun değildir, çünkü basit bir dildir. Düşük seviyeli dillerde yapılması daha uzun süren şeyleri hızlı bir şekilde yapmanızı sağlar.

Ayrıca son zamanlarda yaygınlaşan alternatif bir seçenek daha var - bu PHP'yi bir yerde, daha hızlı bir şekilde derlemek.

Bir şeyler derleyelim, olur mu?

"Derleme" kelimesiyle, PHP betik kodunun başka bir şeye, başka bir koda çevrilmesini kastediyorum.

Bu durumda, iki tip olabilir.

Yerel kod, fiziksel bir makinede çalıştırılabilen bir tür ikili dosyadır.

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

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

Yol Gönderimi Derleyicisi. Onun devamı Raven'dır. Ayrıca PHC vardır (bu bir PHP Açık Kaynak derleyicisidir). Son zamanlarda HipHop (Facebook) da ortaya çıktı.

Yerel olmayan kod için neler yapılabileceğine dair küçük bir genel bakış vereceğim. Bildiğim kadarıyla 3 çalışma seçeneği var. Bunlar Java için bayt kodu oluşturma ve .Net için bayt kodu oluşturma: Quercus, Project Zero, Phalanger. Yerel olmayan kod için 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ı. Başlangıçta ticari bir uygulamaydı. Kapatıldı, sadece 2007'de Açık Kaynak'ta yayınlandı. Çok karmaşık bir derleme şeması vardır: Scheme dili için belirli bir Bigloo derleyicisi kullanılır ve ardından yerel kod oluşturulur. Bu derleyici Zend Motorunu kullanmaz.

Bağımsız 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.

Roadsend ile ilgili çalışmalar bildiğim kadarıyla şu anda devam etmiyor. Tamamen C++ ile yeniden yazılan Raven projesi olarak yeniden doğdu. Derleme olarak, kod oluşturmak için LLVM kullanır.

Şu anda her şey çok umut verici görünüyor.

Ama hala yapım aşamasında. Belgelerde bile ikili dosyalar oluşturmayacağımıza dair ipuçları var. Beklemek.

PHC'miz olmasaydı her şey üzücü olurdu. Bu açık kaynak kodlu bir derleyicidir. 2005 yılından beri geliştirilmiştir. Eksilerinden biri: yerleşik SAPI kullanır. Java makinesi olan Zend Engine'i terk etmiyoruz. Esasen, PHP kodunu PHP uzantı modülü koduna çevirir. Bundan sonra derlenir, ancak yürütme işlemi yine Zend Engine'i kullanır.

PHC ö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, ayrıca sadece C kodunu da üretebiliriz. Bu kodu oluşturduktan sonra aynı gcc dahili olarak kullanıldığından, optimizasyon ve diğer şeyler için tasarlanan bayrakları kullanabiliriz.

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

Bir web uygulamasını başlatmak için birkaç işlem yapmanız gerekir, bu oldukça zordur. Önce bir uzantı oluşturmanız (eng. Uzantı), 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 avantajlarından biri, XML'in nasıl oluşturulduğuna bağlı olarak betiğimizin XML çalışmasını oluşturabilmemizdir, bazen bu yararlı olabilir.

eksiler

Bence bu daha düşük 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 rapor 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 yeniden yazma seçenekleri reddedildikten sonra bir çevirmen yazılmasına karar verildi (bu durumda C++ koduna). Proje nispeten genç, resmen bu yılın Şubat ayında piyasaya sürüldü. PHP kodu, C++ koduna çevrilir ve ardından işletim sisteminizin standart araçları kullanılarak oluşturulur. 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. Saf haliyle, kod PHP yorumlayıcısı aracılığıyla çalışmaz. Yine, yaratıcılar işlemci yükünde önemli bir azalma olduğunu iddia ettiler.

HipHop'un ana işlevi

Komut satırında çalıştırılabilen ikili dosyayı doğrudan oluşturur. Bir 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ıklayabilir (sunucu olarak çalışır).

Montaj süreci oldukça önemsiz değildir. Bir açıklama var, ancak her yerde toplanmadı. Şu anda, dediğim gibi, her şey Linux altında ilerliyor, ayrıca başlangıçta her şey 64 bit için "keskinleştirildi". Şimdi 32 bit deneysel olarak desteklense de. Ama biraz derlemeyi ve düzeltmeyi başardım - genel olarak, tüm bunları yaptı, çünkü varsayılan olarak toplanmadı.

Ayrıca kendi libcore sürümlerine sahipler ve yamalanması gereken birkaç kitaplık olduğunu düşünüyorum. Genel olarak, montaj işlemi 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 başlıca birkaç tanesini vurguladım.

Konfigürasyon dosyası (config) olarak çeşitli direktifler ayarlayarak HDF formatında bir dosya kullanabiliriz. Orada hata seviyesini ve diğer şeyleri ayarlayabiliriz (HDF, yapılandırılmış bir biçimde mevcut olan tek şeydir). Ayrıca yapılandırmanın kendisini veritabanından alabilir veya doğrudan komut satırında kullanabiliriz.

Derleme sırasında kayıt seviyesini belirleriz: tüm hataları göster veya ayrıca uyarıları (İngilizce uyarılar), ek bilgileri göster veya genellikle olan her şeyin tam bir kaydını tut.

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

Bir PHP betiğinin derlemesini çalıştırma örneği

Üçüncü seviye günlük kaydı ayarlandı, burada zaman hakkında oldukça genel bilgiler var, ne kadar sürdüğünü görebilirsiniz. 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'dir. Standart "Echo "Merhaba, Dünya!" satırına ek olarak, bu ikili dosyanın birçok başka şey içerdiğini belirtmek istedim. Bu, tam teşekküllü bir web sunucusu, yönetim için tam teşekküllü bir sunucudur.

Ne elde ederiz?

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

Bu ortaya çıkan programdır. Zaten farklı konfigürasyonlar için epeyce farklı tuşlara sahip, ancak ben bunlardan sadece birkaçını not edeceğ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ı olarak çalıştırabiliriz. Birkaç seçenek daha var, ancak bunlar gerekli değil.

Aynı formatta kullanılan config. Direktif vermeye başlamadım, çünkü birçoğu var. HipHop belgelerle birlikte gelir. 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, bu da çözümün oldukça esnek bir şekilde yapılandırılmasına olanak sağlıyor.

Sunucu modunda çalıştırmak için bir bağlantı noktası belirtebiliriz. Yönetim için, sunucuyu yönetmenize izin veren bazı istekler ekleyebileceğ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ı portu 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, çok uygundur.

Durum bilgisi alma seçeneği

Sunucunun durum setini çeşitli yerleşik biçimlerde (xml, json, html) almak 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ığı için, üzerinde gerçekleştirilen tüm işlemler hakkında ayrıntılı bilgi sağlar.

Tam bellek istatistikleri

İşte çok kullanışlı bir özellik - Uygulama İstatistikleri. PHP'de HipHop'un ek işlevlerini kullanarak, betiklerimize istatistikler yazabiliriz ve bunları normal http erişimi yoluyla alırız.

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ı 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ı yazmıştır.

İlk durumda kodu “-f” tuşu ile çalıştırıyoruz ve dosyanın nasıl davrandığını görüyoruz; 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ı (müh. kesme noktaları) ayarlayabilir, çalıştırabilir, değişken değerleri girebilir, takip edebilir ve daha fazlasını yapabilirsiniz.

Ek seçeneklerden biri

Derlemeden sonra ortaya çıkan bir programımız var. RPC sunucusu olarak kullanılabilir. Http üzerinden istekleri çalıştırıyoruz ve params işlevini çağırarak parametreyi bir json dizisi veya ayrı bir parametre olarak iletebiliriz. Bu işlevlerin sonuçlarını döndüren json'u döndüreceğiz. Bu çok kullanışlıdır - gerekli işlevsellik başlangıçta zaten yerleşiktir.

HipHop'ın Eksileri

Şu anda HipHop, /e ile eval(), create_function() ve preg_replace() gibi dil yapılarını ve işlevlerini desteklemez, ancak bunların tümü eval() ile benzerdir. Doğru, son sürümlerde, bence eval () işlevini config aracılığıyla etkinleştirebilirsiniz. Ancak bunu yapmanız önerilmez. Genel olarak, eval() kullanımı 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ştirildi. Bu projenin etrafında bir geliştiriciler topluluğu var. Tamamen yeni bir PHP uygulaması yazılmıştır.

Dediğim gibi, artı, yerel kodun üretilmesidir. İşlemciyi yükleme maliyetini düşürerek performansta bir artış talep edilir (testler bunu doğrular).

Yapılandırmada 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 ekstralar sağlıyor. Bunların arasında, bir 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 var. Diğer bir avantaj: Bu, üretimde gerçekten kullanıma hazır bir çözümdür (örnek - Facebook).

eksiler

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

Daha önce bahsettiğim montajın karmaşıklığı gibi bir an da var. 32 bit sistemlerde oluşturma ile ilgili sorunlar var. Ama bunun yakında düzeltileceğini düşünüyorum. Ş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 bir derlemeden ve özel olarak HipHop'tan ne beklenmemelidir?

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

Derleme, statik yüklemeyi hızlandırmaz, yalnızca dinamikler açısından. Hata ayıklamayı büyük ölçüde karmaşıklaştırır. Muhtemelen çoğu, her şeyin PHP'de oldukça basit bir şekilde hatalarının ayıklandığı gerçeğine alışmıştır. Derlerken, 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, bu yardımcı olabilir.

Derleme hangi sorunları çözer?

CPU üzerindeki yükü azaltır, çünkü PHP ile aktif olarak çalışırken, çok sayıda istekle, üzerindeki yük oldukça 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 bulunmamaya, 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. Ve standart PHP ile zaman farkı yaklaşık 3 kattır. 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 - bunu akılda tutmakta fayda var.

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

Dürüst olmak gerekirse, bir sunucuda değil, bir dizüstü bilgisayarda testler yaptım. Rakamlar elbette gerçeğe tam olarak uymayabilir, ancak bu durumda sonuçlar normaldir. Yük arttıkça istek sayısının ve toplam istek sayısının aynı anda arttığını belirtmekte fayda var. Sırada RPS var. Bazı basit eklemelerden 10'unu içeren standart bir sayfa test edildi. Aslında bu, PHP'yi bir yorumlayıcı olarak test ediyor.

Yerden soru: Hücredeki sayılar nelerdir - saniye?

Alexey Romanenko: Bu fps'dir.

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

APC kullanmanın standart bir uygulama olduğu görülebilir. Örneğin Apache olarak yaklaşık 2 kat performans artışı eklediğini gösteriyor. Nginx'te de durum böyle. 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 bu gereklidir. PHP'yi standart yorumlayıcı olarak kullanarak CPU'ya ulaşıyorsak, muhtemelen projenin belki bir kısmının derlenebileceğini düşünmeye değer.

Uygulamanızın özerkliğine ihtiyaç duyduğunuz bazı durumlarda, bu yöntem pek uygun değildir.

Sunucu sayısını azaltmak. Çok fazla sunucu olduğunda, performansı 2 kat azaltarak, kabaca konuşursak, sayıyı da yarıya indiririz. Bu bir sunucu olduğunda hiçbir anlam ifade etmiyor, ancak 100-200 tanesi olduğunda, muhtemelen bir nokta var.

Facebook'un HipHop'u kullanmaya başlamasının ana nedeni, yeniden yazılamayan (hiç kimse tarafından ya da sadece maliyetli) büyük miktarda PHP kodunun varlığıdır. Performansta 2 kat artış zaten iyi bir şey.

Muhtemelen her şey. Soruları bekliyorum.

Sorular ve cevaplar

Yerden 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 çevirmek ister misiniz? Alexey Romanenko:İkincisinden başlayacağım. RBC web sitesinin tercüme edilmesi zordur. Başarılı uygulama ile ilgili. 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 projeyi kullanmanın ne kadar haklı olacağını gösterecektir. Yerden 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 kimse bizi kullanmıyor. Yerden soru: Bahsettiğiniz bazı özelliklerin desteklenmemesi dışında çalışma zamanındaki fark nedir? "Canlı" bir projeyi tercüme etmek 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. Bunları dahil etmedim çünkü belgelerde daha ayrıntılı bilgi bulunabilir. Facebook ekibi, derlendiğinde çalışacak olanın esasen %99,9'una eşdeğer olan kendi tercümanını yazdı. Kodunuzu standart bir PHP yorumlayıcısı ile değil, dediğim gibi PHP için hphpi ile test etmek daha iyidir.

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, whoop - 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 evrenseldir, bazıları ise kesin olarak tanımlanmış 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 Ubuntu 14.04 çalıştıran ve kodu derlemek de dahil olmak üzere istediklerini yapabilecekleri birkaç tam teşekküllü sanal makine oluşturabilir. Tüm popüler diller varsayılan olarak desteklenir, ancak kendi dilinizi 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, bundan sonra 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 Brainfuck dilinde bir kod derlemesi 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ışabilme yeteneğidir - sadece mevcut oturumunuza bir bağlantı gönderin ve hataları iki kat daha hızlı ortaya çıkarın!

jsFiddle

Adının sizi aldatmasına izin vermeyin - jsFiddle yalnızca JavaScript için değildir. Bu ön uç çevrimiçi düzenleyici, herhangi bir JavaScript, HTML ve CSS kombinasyonunu kontrol etmenizi sağlar. Elbette jQuery, Vue, React, TypeScript gibi çeşitli çerçeveler ve SCSS gibi CSS ön işlemcileri için destek var. Kolaylık sağlamak için favori düzenleyicinizden bir tuş takımı seçebilirsiniz. Doğru, yalnızca favori düzenleyiciniz Vim, Emacs veya Sublime Text ise.

kod takımı

CodePad, kodu depolayabileceğiniz, paylaşabileceğiniz ve yürütme sonuçlarının sonraki çıktılarıyla çalıştırabileceğiniz minimalist bir hizmettir. Aralarından seçim yapabileceğiniz en yaygın birkaç dil vardır, ancak ne yazık ki, belirli tercüman veya derleyici sürümleri seçeneği yoktur.

Ana avantajı basitlik ve kolaylıktır: site yavaş bir İnternet ile bile hızlı bir şekilde çalışacaktır. Standart başlıkların otomatik bağlantısının yanı sıra Vim veya Emacs ile entegrasyon sağlanır.

Eksiler arasında, bir forma kod girerken tam sözdizimi vurgulama eksikliği sayılabilir. Ancak, önceden kaydedilmiş bir kaydı görüntülerken arka ışık mevcuttur.

GCC Tanrı Cıvatası

GCC GodBolt etkileşimli bir C++ dil derleyicisidir. Bu koleksiyona, basit bir arayüze sahip olmasının yanı sıra ayarlanabilir tuşlar için seçenekler de dahil olmak üzere çok sayıda ayara sahip olması nedeniyle girdim.

En yenileri de dahil olmak üzere aralarından seçim yapabileceğiniz birçok derleyici sürümü vardır. İlginç özelliklerden biri, program kodunun anında montaj diline çevrilmesidir.