क्या आप PHP कोड को "संकलित" कर सकते हैं और एक बाइनरी-ईश फ़ाइल अपलोड कर सकते हैं, जो सिर्फ बाइट कोड दुभाषिया द्वारा चलाया जाएगा?


224

मुझे पता है कि सर्वर पर चलने से पहले PHP को बाइट कोड के लिए संकलित किया जाता है, और फिर उस बाइट कोड को कैश किया जा सकता है ताकि पूरी स्क्रिप्ट को हर वेब एक्सेस के साथ फिर से व्याख्या नहीं करनी पड़े।

लेकिन क्या आप PHP कोड को "संकलित" कर सकते हैं और एक बाइनरी-ईश फ़ाइल अपलोड कर सकते हैं, जो सिर्फ बाइट कोड दुभाषिया द्वारा चलाया जाएगा?


एक संबंधित प्रश्न: विंडोज के लिए PHP संकलक
Palec

3
कृपया इसे hhvm और न ही हिपहॉप के साथ टैग न करें । HHVM सवाल का एक अंतर्निहित हिस्सा नहीं है, बस एक संभावित उत्तर है। meta.stackexchange.com/a/149347/238706
Palec

@HalayemAnis मुझे लगता है कि आपको एक गलत लिंक का उल्लेख किया गया है .. क्या आप उस ट्यूटोरियल के लिए सही लिंक प्रदान कर सकते हैं? या किसी भी नवीनतम अद्यतन लोग?
सीजे रामकी

@CJRamki माफ करना, इस लिंक का उपयोग करें COMPILE_PHP
Halayem अनीस

यह प्रश्न वास्तव में अस्पष्ट है। आप "बस" एक PHP संकलक का निर्माण कर सकते हैं जो आपके स्रोत कोड और एक PHP दुभाषिया को एक ELF, EXE या जो भी हो, संकलन करता है
सेबस्टियन मच

जवाबों:


234

यह सवाल पूछे जाने के बाद, फेसबुक ने PHP के लिए हिपहॉप लॉन्च किया, जो शायद आज तक का सबसे अच्छा-परीक्षण किया गया PHP कंपाइलर है (यह दुनिया की 10 सबसे बड़ी वेबसाइटों में से एक के रूप में देखा गया)। हालांकि, फेसबुक ने इसे HHVM के पक्ष में बंद कर दिया, जो कि एक वर्चुअल मशीन है, कंपाइलर नहीं।

इसके अलावा, googling PHP compilerकई 3 पार्टी समाधानों को बदल देता है।

आड़ु पाई

  • पीचपी गिटहब
  • PHP को .NET और .NET कोर को कंपाइल करता है
  • स्व-निहित बाइनरी फ़ाइल में संकलित किया जा सकता है
  • मैक, लिनक्स, विंडोज, विंडोज कोर, एआरएम, पर चलाता है ...

आस्ट्रेलिया का एक पक्षी

  • GitHub (डाउनलोड), विकिपीडिया
  • .NET (CIL) के संकलन जुलाई 2017 से बंद दिख रहे हैं और PHP 7 का समर्थन नहीं करता है।

पीएचसी

  • देशी बायनेरिज़ के संकलन
  • अभी बहुत सक्रिय नहीं है (फरवरी 2014) - 2011 में अंतिम संस्करण, ग्रीष्मकालीन 2013 में अंतिम परिवर्तन

रोडसेंड PHP कम्पाइलर

bcompiler

  • PHP का PECL एक्सटेंशन
  • प्रयोगात्मक
  • PHP बाइटकोड को संकलित करता है, लेकिन इसे विंडोज़ बाइनरी में लपेट सकता है जो PHP दुभाषिया को लोड करता है ( bcompiler_write_exe_footer()मैनुअल देखें )
  • अब बंद (फरवरी 2014) दिखता है - 2011 में अंतिम परिवर्तन

परियोजना शून्य

  • विकिपीडिया , आईबीएम
  • WebSphere sMash के लिए परिवर्तनों का इनक्यूबेटर
  • आईबीएम द्वारा समर्थित
  • जावा बाइटकोड को संकलित करता है
  • अब (फरवरी 2014) बंद कर दिया गया है - वेबसाइट नीचे, 2008 और 2009 में बड़े प्रचार की तरह लग रहा है

Bambalam

  • अकेले विंडोज बायनेरिज़ को संकलित करना
  • बायनेरिज़ में बायटेकोड और एक लांचर होता है
  • अब बंद (फरवरी 2014) दिखता है - 2006 में अंतिम परिवर्तन

BinaryPHP

  • C ++ के लिए संकलित
  • अब बंद (फरवरी 2014) दिखता है - 2003 में अंतिम परिवर्तन

साझा वेब होस्ट के बारे में क्या? क्या मैं अपनी PHP स्क्रिप्ट उन कंपाइलरों में से एक के साथ संकलित कर सकता हूं और फिर अपने लिनक्स आधारित वेब होस्ट पर अपलोड कर सकता हूं?
सईदबकर

2
@ s @мsєм यह आपके मेजबान पर निर्भर करता है, लेकिन अगर मुझे अनुमान लगाना था, तो मुझे लगता है कि कई मेजबान इसे अनुमति नहीं देंगे।
फ्रैंक किसान

2
ऊपर उन परियोजनाओं में से कोई भी अब बनाए रखा जा रहा है। क्या पिछले 2 वर्षों से आम तौर पर स्वीकृत कंपाइलर हैं या उन सभी परियोजनाओं की अवहेलना / त्याग क्यों की जाती है?
प्रिक्सो

PHP संकलक की एक अच्छी सूची thefreecountry.com पर है। वहाँ वर्णित सभी उपकरण अब इस उत्तर में शामिल हैं।
पालक

1
चूंकि ये सभी मृत प्रतीत होते हैं, इसलिए उत्तर "नहीं" प्रतीत होता है।
इरा बैक्सटर

22

संक्षिप्त जवाब नहीं है"।

PHP का वर्तमान कार्यान्वयन एक व्याख्या की गई भाषा का है। आप इस तथ्य के सैद्धांतिक पहलुओं पर बहस कर सकते हैं कि किसी भी भाषा को तकनीकी रूप से व्याख्या या संकलित किया जा सकता है, लेकिन जैसा कि यह खड़ा है, वर्तमान कार्यान्वयन ऐसे हैं कि PHP कोड को चलाने के लिए एक दुभाषिया की आवश्यकता होती है, और दुभाषिया निष्पादित वातावरण का प्रबंधन करता है।

पूर्व संकलित PHP बाइटकोड अपलोड करने के बारे में आपके प्रश्न का उत्तर देने के लिए, यह संभवतः संभव है, लेकिन आपको PHP दुभाषिया के लिए इस तरह की फ़ाइल में पढ़ने और इसके साथ काम करने का एक तरीका लागू करना होगा। मौजूदा ऑपकोड कैश के साथ पहले से ही, यह एक ऐसा काम नहीं लगता है जो बहुत इनाम लाएगा।


3
इसका अक्सर यह मामला होता है कि आपको PHP प्रोग्राम को ठीक से चलाने के लिए दुभाषिया की आवश्यकता होती है, लेकिन इसका मतलब यह नहीं है कि संकलक इसे संकलित कोड में प्रदान नहीं कर सकता है। phc (phpcompiler.org) आपके द्वारा वर्णित सभी समस्याओं को संभालती है। मेरे ज्ञान का सबसे अच्छा करने के लिए, Roadsend (roadend.com) भी करता है।
पॉल बिगगर

28
यह उत्तर तारीख से बाहर है - हिपहॉप 6 फरवरी को रिलीज़ होने के 6 महीने बाद, फरवरी 2010 में जारी किया गया था।
फ्रैंक किसान

1
@FrankFarmer क्या आपको हिपहॉप के साथ कोई अनुभव था? क्या HipHop के साथ includeऔर ठीक से काम करता है require? उदाहरण के लिए यदि एक PHP स्क्रिप्ट को आमतौर पर इसमें शामिल किया जाता है तो include( 'controller/' . $controller_name . '.php' )क्या यह हिपहॉप के साथ स्वचालित रूप से काम करेगा? चीयर्स
ली हेस

2
वास्तव में आप नियमित PHP संकलक का उपयोग करके, PHP कोड संकलित कर सकते हैं। यह सिर्फ लक्ष्य मंच पर निर्भर करता है; आप Zend opcode, C भाषा या .NET असेंबलीज़ (Phalanger php-compiler.net का उपयोग करके ) में संकलित कर सकते हैं
Jakub Míšek

1
The short answer is "no". The current implementation of PHP is that of an interpreted language. You can argue the theoretical aspects…इसके बारे में कुछ भी सैद्धांतिक नहीं है, बहुत सारी व्याख्या की गई भाषाओं में संकलक हैं; अर्थात ऑटोकॉट / ऑटोहॉटकी, या यहां तक ​​कि बुनियादी के रूप में। बहुत सारे कार्यक्रम हैं जो उन में लिखे गए हैं, फिर स्टैंडअलोन कार्यक्रमों के रूप में जनता द्वारा उपयोग के लिए संकलित किया गया है। PHP को कंपल्सिव होने से रोकने के लिए कुछ खास नहीं है, यही वजह है कि कंपाइलरों का एक गुच्छा मौजूद है, लेकिन AHK के विपरीत, कोई आधिकारिक, परीक्षणित, कंपाइलर नहीं है - Zend Guard की कोई गिनती नहीं है।
सिंटेक

16

चूँकि यह प्रश्न पहले पूछा गया था, इसलिए उस उत्तर को "नहीं" से एक "आउट" करने के लिए उस उत्तर को बदल दिया गया है।

http://github.com/facebook/hiphop-php/wiki

PHP के लिए हिप हॉप एक संकलक था जिसने PHP कोड लिया और इसे अत्यधिक अनुकूलित C ++ में बदल दिया, जाहिर है, कुछ फ़ंक्शन समर्थित नहीं हैं (उदाहरण के लिए 'विस्फोट')

मुझे हिपहॉप को लागू करने के तरीके के बारे में अधिक जानकारी की तलाश में यह प्रश्न मिला और मुझे लगा कि मैं बोलूंगा :)

2013 के बाद से फेसबुक अब इसका उपयोग नहीं करता है, और इसे HHVM के पक्ष में बंद कर दिया गया है, जो एक संकलक नहीं है: https://en.wikipedia.org/wiki/HipHop_for_PHP


3
यह वही है जो फेसबुक का उपयोग करता है मुझे विश्वास है
रिचर्ड एच

एचएचवीएम (हिपहॉप पीएचपी) के "तरह" अब कुछ साल पीछे है और हर दिन बेहतर हो रहा है, फाइनली एक रास्ता है (मुझे लगता है)। HHVM का उपयोग करना आजकल pre-analyzephp कोड के लिए संभव है । परिणामस्वरूप आपको बाइनरी-कैश फ़ाइल मिलती है। इस फ़ाइल और सही HHVM कॉन्फ़िगरेशन के साथ, केवल Webtec को bytecode के साथ चलाना संभव है, स्रोत फ़ाइलों की अब कोई आवश्यकता नहीं है;) <br> मुझे आशा है कि मुझे यह सही लगी।
पीकेइदेल

@ और, एचएचवीएम द्वारा पदावनत किए जाने का क्या मतलब है? यह एक परियोजना के रूप में बनाए रखा और जीवित दिखता है। या क्या आपका मतलब है कि PHP के लिए हिप हॉप से ​​HHVM में नाम बदल गया है? फिर पदावनति की बात करना भ्रामक है।
पालेक

1
PHP के लिए @Palec हिपहॉप बंद कर दिया गया था। यह एक PHP-to-C ++ कंपाइलर था जिसका फेसबुक इस्तेमाल करता था, लेकिन इसने अनडीली आउटपुट (मल्टी-जीबी बायनेरिज़) का उत्पादन किया और पूरी भाषा का समर्थन नहीं कर सका। HHVM एक उत्तराधिकारी परियोजना है जो समान कोड में से कुछ को साझा करती है, लेकिन एक संकलक नहीं है। HHVM एक वर्चुअल मशीन है। फेसबुक अब हिपहॉप का समर्थन नहीं करता है।
एंड्रिया २

11

वहाँ भी

कौनसा उद्देश्य

  • एक मालिकाना PHP आवेदन में पूरी स्क्रिप्ट सांकेतिक शब्दों में बदलना करने के लिए
  • एक मालिकाना PHP आवेदन में कुछ वर्गों और / या कार्यों को सांकेतिक शब्दों में बदलना
  • Php-gtk अनुप्रयोगों के उत्पादन को सक्षम करने के लिए जिनका उपयोग क्लाइंट डेस्कटॉप पर किया जा सकता है, बिना php.exe की आवश्यकता के।
  • PHP से C कन्वर्टर के लिए व्यवहार्यता अध्ययन करने के लिए

एक्सटेंशन PECL से उपलब्ध है।


8

phc आपको साझा कार्यक्रमों में PHP प्रोग्रामों को संकलित करने की अनुमति देता है, जिसे सर्वर पर अपलोड किया जा सकता है। PHP प्रोग्राम को बायनेरिज़ में संकलित किया गया है। यह इस तरह से किया जाता है जैसे कि evalएस, includeएस और संपूर्ण पीएचपी मानक पुस्तकालय का समर्थन करना।


8

यदि आप बस एक PHP स्क्रिप्ट से बाइनरी निष्पादन योग्य उत्पादन करने के लिए देख रहे हैं, तो कृपया अपने प्रश्न को बेहद सटीक बनाने की कोशिश करने से बचें क्योंकि यह ऐसा प्रतीत होगा कि आप वास्तव में जानते हैं कि आपको क्या चाहिए। इसके अलावा, अधिकांश PHP डेवलपर के पास बिल्कुल शून्य सुराग है कि एक बायटेकोड क्या है।

इसके साथ ही कहा, उत्तर हां है । मैंने अभी हाल ही में एक PHP स्क्रिप्ट को बाइनरी में संकलित किया है। और सिर्फ कोई बाइनरी नहीं। मैंने एक पोर्टेबल बाइनरी में बदलने के लिए सीडीई एप्लिकेशन (वेबैक मशीन से लिंक, मूल लिंक अब टूट गया है) का उपयोग किया है जिसे सभी निर्भरता के साथ वितरित किया जा सकता है और बिना किसी मुद्दे के निष्पादित किया जा सकता है ... और यह खूबसूरती से काम करता है।

आपको बस पीएचसी का उपयोग करना है ।


7

उम, किसी ने भी Zend Guard के बारे में सुना , जो वास्तव में इस व्यक्ति से पूछ रहा है। यह PHP कोड को "मशीन कोड" में इनकोड / ऑबफ्यूकेट करता है।


1
मुझे नहीं लगता कि वे स्रोत के बजाय इंटरटेक बाइटकोड से होने वाले स्पीडअप के रूप में अधिक गति चाहते थे।
स्टीफन

@ स्टेफेन जेंड गार्ड ऐसा करने के लिए है।
गजस

Zend गार्ड ने PHP 7 का समर्थन नहीं करने का फैसला किया जो कि कमबैक है
vj

2

PHP कोड के कई "कंपाइलर" हैं। उनमें से अधिकांश सभी PHP सुविधाओं का समर्थन नहीं करते हैं, क्योंकि इनको केवल रन टाइम के दौरान व्याख्या किया जाना चाहिए।

हम Phalanger - http://www.php-compiler.net/ का उपयोग कर रहे हैं - जो उन गंदे PHP डायनामिक फीचर्स का भी समर्थन कर रहा है, और फिर भी उन्हें .NET असेंबली के रूप में संकलित करने में सक्षम है, जिसे स्टैंडअलोन DLL के रूप में वितरित किया जा सकता है।


1

एकीकृत OPCache मॉड्यूल के साथ 5.5.x देखें, एक साझा मेमोरी में अस्थिर, बहुत अधिक प्रदर्शन और php की गतिशीलता सिद्धांत अछूता रहता है।

http://www.php.net/manual/en/opcache.installation.php


1

Php 7 में php ini ऑप्शन opcache.file_cache है जो एक विशिष्ट फ़ोल्डर में बाइटकोड को बचाता है। Php cli स्क्रिप्ट में उपयोगी हो सकता है जो कि "संकलित" हैं और एक अनुकूलित पुन: उपयोग के लिए एक विशिष्ट फ़ोल्डर में सहेजा गया है।

Opcache यह संकलन नहीं है, लेकिन कुछ समान है।


"Php 7 में" इसका PHP7 ही नहीं, यह PHP 5.5.0 है और बाद में
रेमंड

0

PHP वास्तव में कई कार्यक्रमों के साथ संकलित नहीं है। हालांकि इसे अपठनीय बनाने के लिए आप Zend के एनकोडर का उपयोग कर सकते हैं।


क्या यह उसी तरह संकलित नहीं होता जिस तरह से प्रति संकलित होता है?
कार्सन मायर्स

PHP मुझे विश्वास है कि मक्खी पर सर्वर पर संकलित है। मैं हालांकि स्रोत कोड को छिपाने के लिए एक एनकोडर का उपयोग किया है। यदि ऐसा है तो आप किस बारे में चिंतित हैं। वे वास्तव में अच्छा काम करते हैं।
जो

नाह, मुझे बस इसके सैद्धांतिक पहलू में दिलचस्पी थी
कार्सन मायर्स

2
PHP का अनुपालन नहीं है, इसकी व्याख्या की गई भाषा है। कैश में 'opcodes' व्हिच php इंटरप्रिट्स (पाठ को पढ़ने के लिए नहीं) होता है, php कोड को सीधे 'रन' नहीं किया जा सकता है जैसा कि आप c
borrel

0

यदि आपको वास्तविक देशी बायनेरिज़ चलाने की अनुमति है, तो यह आपका कंपाइलर है:

https://github.com/ircmaxell/php-compiler

यह PHP में लिखा गया एक PHP कंपाइलर है!

यह PHP कोड को अपने स्वयं के VM कोड में संकलित करता है। इस वीएम कोड की व्याख्या या तो अपने स्वयं के व्याख्याकार द्वारा की जा सकती है (यह भी PHP में लिखा गया है, यह पागल नहीं है?) या इसे बिटकोड में अनुवादित किया जा सकता है। और एलएलवीएम कंपाइलर फ्रेमवर्क ( clangऔर सह) का उपयोग करके , इस बिटकोड को किसी भी प्लेटफ़ॉर्म के लिए एक देशी बाइनरी में संकलित किया जा सकता है जो एलएलवीएम का समर्थन करता है (जो कि आज भी बहुत अधिक मंच है)। आप कोड निष्पादित होने से ठीक पहले या हर बार वैधानिक रूप से या हर बार चुन सकते हैं (JIT स्टाइल)। तो इस संकलक के लिए आपके सिस्टम पर काम करने के लिए केवल दो आवश्यकताएँ एक स्थापित PHP दुभाषिया और एक संकलित clangसंकलक है।

यदि आपको देशी बायनेरीज़ चलाने की अनुमति नहीं है, तो आप एक संभाषण के रूप में ऊपर संकलक का उपयोग कर सकते हैं और इसे अपने स्वयं के वीएम कोड की व्याख्या करने दे सकते हैं, फिर भी यह धीमा होगा क्योंकि आप एक PHP दुभाषिया चला रहे हैं जो स्वयं एक PHP इंजन पर चल रहा है, इसलिए आपके पास "दोहरी व्याख्या" है।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.