আপনি কি পিএইচপি কোডটি "সংকলন" করতে এবং একটি বাইনারি-ইশ ফাইলটি আপলোড করতে পারেন, যা কেবল বাইট কোড দোভাষী দ্বারা চালিত হবে?


224

আমি জানি যে পিএইচপি সার্ভারে চালুর আগে বাইট কোডটি সংকলিত হয় এবং তারপরে সেই বাইট কোডটি ক্যাশে করা যায় যাতে প্রতিটি স্ক্রিপ্ট অ্যাক্সেসের সাথে পুরো স্ক্রিপ্টটির পুনরায় ব্যাখ্যা করতে না হয়।

তবে আপনি কি পিএইচপি কোডটি "সংকলন" করতে এবং একটি বাইনারি-ইশ ফাইলটি আপলোড করতে পারেন, যা কেবল বাইট কোড দোভাষী দ্বারা চালিত হবে?


একটি সম্পর্কিত প্রশ্ন: উইন্ডোজের জন্য পিএইচপি সংকলক
প্লেক

3
দয়া করে সঙ্গে এই ট্যাগটি না hhvm কিংবা হিপহপ । এইচএইচভিএম প্রশ্নের অন্তর্নিহিত অংশ নয়, কেবল একটি সম্ভাব্য উত্তর। meta.stackexchange.com/a/149347/238706
Palec

@ হালিমআনিস আমার মনে হয় আপনার একটি ভুল লিঙ্ক উল্লেখ করা হয়েছে .. আপনি কি এই টিউটোরিয়ালটির জন্য সঠিক লিঙ্কটি সরবরাহ করতে পারবেন? বা কোন সর্বশেষ আপডেট ছেলেরা?
সিজে রামকি

@ সিজেআরমকি দুঃখিত, দয়া করে এই লিঙ্কটি ব্যবহার করুন COMPILE_PHP
হালায়ম আনিস

এই প্রশ্নটি আসলে অস্পষ্ট। আপনি "সহজভাবে" একটি পিএইচপি সংকলক তৈরি করতে পারেন যা আপনার উত্স কোড এবং একটি পিএইচপি ইন্টারপ্রেটারকে একটি ইএলএফ, এক্সই বা অন্য যে কোনও কিছুতে সংকলন করে (তার সম্পূর্ণ অর্থ সহ) সংকলন করে
সেবাস্তিয়ান মাচ

উত্তর:


234

এই প্রশ্নটি জিজ্ঞাসা করার পরে, ফেসবুক পিএইচপি-র জন্য হিপহপ চালু করেছে যা সম্ভবত আজ অবধি সেরা-পরীক্ষিত পিএইচপি সংকলক (এটি বিশ্বের দশটি বৃহত্তম ওয়েবসাইটের মধ্যে একটি হিসাবে দেখেছে)। তবে ফেসবুক এটি এইচএইচভিএমের পক্ষে বন্ধ করে দিয়েছে, যা একটি ভার্চুয়াল মেশিন, সংকলক নয়।

এর বাইরেও, গুগলিং PHP compilerবেশ কয়েকটি তৃতীয় পক্ষের সমাধান সমাধান করে।

PeachPie

  • পিচপি গিটহাব
  • নেট এবং। নেট কোর থেকে পিএইচপি সংকলন করে
  • স্ব-অন্তর্ভুক্ত বাইনারি ফাইলটিতে সংকলন করা যায়
  • ম্যাক, লিনাক্স, উইন্ডোজ, উইন্ডোজ কোর, এআরএম, ...

Phalanger

  • গিটহাব (ডাউনলোড), উইকিপিডিয়া
  • .NET (সিআইএল) এর সংকলন জুলাই 2017 থেকে বন্ধ দেখায় এবং পিএইচপি 7 সমর্থন করে বলে মনে হয় না।

পিএইচসি

  • দেশীয় বাইনারিগুলিতে সংকলন করে
  • এখন খুব সক্রিয় নয় (ফেব্রুয়ারী ২০১৪) - ২০১১ সালের শেষ সংস্করণ, ২০১৩ গ্রীষ্মের শেষ পরিবর্তন

রোডসেন্ড পিএইচপি সংকলক

bcompiler

  • পিএইচপি এর পিইসিএল এক্সটেনশন
  • পরীক্ষামূলক
  • পিএইচপি বাইটোকোডে সংকলন করে তবে উইন্ডোজ বাইনারিতে এটি মোড়ানো করতে পারে যা পিএইচপি ইন্টারপ্রেটার লোড করে ( bcompiler_write_exe_footer()ম্যানুয়াল দেখুন )
  • এখন বন্ধ রয়েছে বলে মনে হচ্ছে (ফেব্রুয়ারি 2014) - শেষ পরিবর্তন ২০১১

প্রকল্প জিরো

  • উইকিপিডিয়া , আইবিএম
  • ওয়েবস্পিয়ার sMash এর পরিবর্তনের ইনকিউবেটর
  • আইবিএম দ্বারা সমর্থিত
  • জাভা বাইটকোডে সংকলন করে
  • এখন বন্ধ রয়েছে (ফেব্রুয়ারী ২০১৪) - ওয়েবসাইটটি ডাউন, ২০০৮ এবং ২০০৯ এ বড় হাইপ এর মতো দেখাচ্ছে

Bambalam

  • একা একা উইন্ডোজ বাইনারিগুলিকে সংকলন করে
  • বাইনারিগুলিতে বাইকোড এবং একটি লঞ্চার রয়েছে
  • এখন বন্ধ রয়েছে (ফেব্রুয়ারী 2014) - 2006 সালে শেষ পরিবর্তন change

BinaryPHP

  • সি ++ তে সংকলন করে
  • এখন বন্ধ রয়েছে (ফেব্রুয়ারী 2014) - 2003 এ শেষ পরিবর্তন change

শেয়ার্ড ওয়েব হোস্ট সম্পর্কে কী? আমি কি এই পিএইচপি স্ক্রিপ্টটি সেই সংকলকগুলির মধ্যে একটির সাথে সংকলন করতে এবং তারপরে আমার লিনাক্স ভিত্তিক ওয়েব হোস্টে আপলোড করতে পারি?
সৈয়দবাকআর

2
@ sємsєм এটি আপনার হোস্টের উপর নির্ভর করে, তবে যদি আমার অনুমান করতে হয় তবে আমি অনুমান করি যে অনেক হোস্ট এটির অনুমতি দেয় না।
ফ্র্যাঙ্ক ফার্মার

2
উপরের এই প্রকল্পগুলির কোনওটিই আর রক্ষণাবেক্ষণের জন্য মনে হচ্ছে না। গত 2 বছর থেকে কোনও সাধারণভাবে গৃহীত সংকলক রয়েছে বা কেন এই সমস্ত প্রকল্প অবহেলা / পরিত্যক্ত?
প্রিক্সো

পিএইচপি সংকলকগুলির একটি দুর্দান্ত তালিকাটি thefreecountry.com এ রয়েছে। সেখানে উল্লিখিত সমস্ত সরঞ্জাম এখন এই উত্তরের অন্তর্ভুক্ত রয়েছে।
প্যালেক

1
যেহেতু এগুলি সমস্ত মৃত বলে মনে হচ্ছে, উত্তরটি "না" বলে মনে হচ্ছে।
ইরা

22

সংক্ষিপ্ত উত্তর হলো 'না".

পিএইচপি-র বর্তমান বাস্তবায়ন হ'ল একটি বর্ণিত ভাষার। আপনি এই তাত্ত্বিক দিকগুলি তর্ক করতে পারেন যে কোনও ভাষাকে প্রযুক্তিগতভাবে ব্যাখ্যা করা বা সংকলন করা যায়, তবে এটি যেমন দাঁড়িয়ে আছে, বর্তমান বাস্তবায়নগুলি এমন যে পিএইচপি কোড চালনার জন্য একটি দোভাষী প্রয়োজন হয়, এবং অনুবাদক কার্যকরকারী পরিবেশ পরিচালনা করে।

প্রাক-সংকলিত পিএইচপি বাইকোড আপলোড সম্পর্কে আপনার প্রশ্নের উত্তর দিতে, সম্ভবত এটি সম্ভব, তবে আপনাকে পিএইচপি ইন্টারপ্রেটারকে এই জাতীয় কোনও ফাইলে পড়ার এবং এটির সাথে কাজ করার একটি উপায় প্রয়োগ করতে হবে। ইতিমধ্যে সেখানে বিদ্যমান অপকোড ক্যাশে রয়েছে এমন কোনও কাজ বলে মনে হচ্ছে না যা অনেক পুরষ্কার লাভ করবে।


3
এটি প্রায়শই ক্ষেত্রে ঘটে থাকে যে পিএইচপি প্রোগ্রামগুলি যথাযথভাবে চালানোর জন্য আপনার দোভাষী দরকার, তবে এর অর্থ এই নয় যে কোনও সংকলক সংকলিত কোডে এটি সরবরাহ করতে পারে না। phc (phpcompiler.org) আপনার বর্ণিত সমস্ত সমস্যা পরিচালনা করে। আমার জ্ঞানের সর্বোপরি, রোডসেন্ড (রোডস্যান্ড.কম )ও তা করে।
পল বিগগার

28
এই উত্তরটি পুরানো - হিপহপ পোস্ট হওয়ার 6 মাস পরে ফেব্রুয়ারী 2010 এ প্রকাশ হয়েছিল
ফ্র্যাঙ্ক ফার্মার

1
@ ফ্র্যাঙ্কফার্মার হিপহপ নিয়ে আপনার কি কোনও অভিজ্ঞতা আছে? হিপহপ includeএবং এর সাথে সঠিকভাবে কাজ করে require? উদাহরণস্বরূপ যদি কোনও পিএইচপি স্ক্রিপ্টটি সাধারণত অন্তর্ভুক্ত থাকে include( 'controller/' . $controller_name . '.php' )তবে এই স্বয়ংক্রিয়ভাবে হিপহপের সাথে কাজ করবে? চিয়ার্স
লায়া হেইস

2
আসলে আপনি নিয়মিত পিএইচপি সংকলকগুলি ব্যবহার করে পিএইচপি কোড সংকলন করতে পারেন। এটি কেবল লক্ষ্য প্ল্যাটফর্মের উপর নির্ভর করে; আপনি জেন্দ অপকোড , সি ভাষা বা। নেট সংস্থাগুলিতে ( ফালঙ্গার php-compiler.net ব্যবহার করে ) সংকলন করতে পারেন
জাকব মেক

1
The short answer is "no". The current implementation of PHP is that of an interpreted language. You can argue the theoretical aspects…এটি সম্পর্কে তাত্ত্বিক কিছুই নেই, প্রচুর ব্যাখ্যামূলক ভাষার সংকলক রয়েছে; যেমন অটোআইটি / অটোহটকি, এমনকি বেসিকের মতো অনেক পিছনে। সেগুলিতে প্রচুর প্রোগ্রাম লেখা হয়েছে যা জনগণের দ্বারা স্ট্যান্ডেলোন প্রোগ্রাম হিসাবে ব্যবহারের জন্য সংকলিত হয়েছে। পিএইচপি সম্পর্কে এটি সংকলনযোগ্য হওয়া থেকে রক্ষা করার জন্য বিশেষ কিছু নেই, এজন্যই এখানে সংকলকগুলির একগুচ্ছ উপস্থিত রয়েছে, তবে এএইচকেকের বিপরীতে কোনও অফিসিয়াল, পরীক্ষিত, সংকলক নেই end জেন্ড গার্ড যথেষ্ট গণনা করে না।
সিনিটেক

16

যেহেতু প্রথম প্রশ্নটি জিজ্ঞাসা করা হয়েছিল, ফ্ল্যাট আউট "না" থেকে "ধরণের" থেকে সেই উত্তরটিতে পরিবর্তন হয়েছে

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

পিএইচপি-র জন্য হিপ হপ এমন একটি সংকলক ছিল যা পিএইচপি কোড নিয়েছিল এবং এটিকে অত্যন্ত অনুকূল সি ++ এ রূপান্তরিত করে, দৃশ্যত কিছু ফাংশন সমর্থিত নয় (উদাহরণস্বরূপ 'বিস্ফোরিত')

হিপহপ বাস্তবায়ন করার জন্য আরও তথ্যের সন্ধান করার সময় আমি এই প্রশ্নটি পেয়েছি এবং ভেবেছিলাম যে আমি কথা বলব :)

২০১৩ সাল থেকে ফেসবুক আর এটি ব্যবহার করে না, এবং এটি এইচএইচভিএমের পক্ষে বন্ধ করা হয়েছে, যা সংকলক নয়: https://en.wikedia.org/wiki/HipHop_for_PHP



এই "ধরণের" বর্তমানে কয়েক বছর পিছনে রয়েছে এবং যেহেতু এইচএইচভিএম (হিপহপ পিএইচপি) প্রতিদিন আরও ভাল এবং উন্নত হচ্ছে, তাই ফাইনালের একটি উপায় রয়েছে (আমার মনে হয়)। এইচএইচভিএম ব্যবহার করে এটি আজকাল pre-analyzeপিএইচপি কোডে সম্ভব । ফলস্বরূপ আপনি একটি বাইনারি-ক্যাশে ফাইল পান। এই ফাইলটি এবং সঠিক এইচএইচভিএম কনফিগারেশনের সাহায্যে কেবলমাত্র বাইটোকোড দিয়ে কোনও ওয়েবপৃষ্ঠা চালানো সম্ভব হবে, উত্স ফাইলগুলির আর দরকার নেই;) <br> আমি আশা করি এটি সঠিক হয়ে গেছে।
পি কেইডেল

@ আন্ড্রেয়া, এইচএইচভিএমকে অবমূল্যায়িত করার অর্থ কী? এটি একটি প্রকল্প হিসাবে রক্ষণাবেক্ষণ এবং জীবিত দেখায়। বা আপনি কি বোঝাতে চাইছেন যে নামটি হিপহপ থেকে পিএইচপি থেকে এইচএইচভিএম-তে পরিবর্তিত হয়েছে? তারপরে অবচয় সম্পর্কে কথা বলা বিভ্রান্তিকর।
পেরেক

1
পিএইচপি-র জন্য প্যালিক হিপহপ বন্ধ ছিল। এটি একটি পিএইচপি-টু-সি ++ সংকলক ছিল যা ফেসবুক ব্যবহার করেছিল, তবে এটি অযৌক্তিক আউটপুট (মাল্টি-জিবি বাইনারি) তৈরি করেছে এবং সম্পূর্ণ ভাষা সমর্থন করতে পারে না। এইচএইচভিএম একটি উত্তরাধিকারী প্রকল্প যা একই কোডের কিছু ভাগ করে দেয় তবে সংকলক নয়। এইচএইচভিএম একটি ভার্চুয়াল মেশিন। ফেসবুক আর হিপহপ সমর্থন করে না।
Andrea

11

এছাড়াও আছে

যার লক্ষ্য

  • মালিকানা পিএইচপি অ্যাপ্লিকেশনটিতে সম্পূর্ণ স্ক্রিপ্ট এনকোড করা
  • মালিকানা পিএইচপি অ্যাপ্লিকেশনটিতে কিছু ক্লাস এবং / অথবা ফাংশনগুলি এনকোড করা
  • কোনও php.exe প্রয়োজন ছাড়াই ক্লায়েন্ট ডেস্কটপগুলিতে ব্যবহার করা যেতে পারে এমন php-gtk অ্যাপ্লিকেশনগুলির উত্পাদন সক্ষম করতে।
  • পিএইচপি থেকে সি রূপান্তরকারীটির সম্ভাব্যতা অধ্যয়ন করতে To

এক্সটেনশনটি পিইসিএল থেকে উপলব্ধ।


8

পিএইচসি আপনাকে ভাগ করা লাইব্রেরিতে পিএইচপি প্রোগ্রামগুলি সংকলন করতে দেয়, যা সার্ভারে আপলোড করা যায়। পিএইচপি প্রোগ্রামটি বাইনারিগুলিতে সংকলিত হয়। এটি evalএস, includeগুলি এবং সম্পূর্ণ পিএইচপি স্ট্যান্ডার্ড লাইব্রেরি সমর্থন করার মতো উপায়ে করা হয়েছে ।


8

যদি আপনি কেবল পিএইচপি স্ক্রিপ্ট থেকে বাইনারি নির্বাহযোগ্য উত্পাদন করার জন্য সন্ধান করছেন, তবে দয়া করে আপনার প্রশ্নটি অত্যন্ত সুনির্দিষ্ট করার চেষ্টা করা এড়িয়ে চলুন কারণ এটি আপনাকে দেখাবে ঠিক কী আপনার প্রয়োজন তা জানাবে। এছাড়াও, বেশিরভাগ পিএইচপি বিকাশকারীর বাইকোড কী তা সম্পর্কে একেবারে শূন্য ক্লু থাকে।

যা বলেছিল, উত্তরগুলি হ্যাঁ হ্যাঁ । আমি সবেমাত্র একটি বাইনারি মধ্যে একটি পিএইচপি স্ক্রিপ্ট সংকলন শেষ। এবং কেবল কোনও বাইনারি নয়। আমি সিডিই অ্যাপ্লিকেশন ব্যবহার করেছি (ওয়াইব্যাক মেশিনের লিঙ্ক, মূল লিঙ্কটি এখন ভাঙা হয়েছে) এটিকে পোর্টেবল বাইনারি রূপে পরিণত করতে যা সমস্ত নির্ভরতার সাথে বিতরণ করা যায় এবং কোনও সমস্যা ছাড়াই কার্যকর করা যায়… এবং এটি সুন্দরভাবে কাজ করে।

আপনার সমস্ত প্রয়োজন পিএইচসি ব্যবহার করা ।


7

ওম, জেন্ড গার্ডের কথা কেউ শুনেছেন , যা ঠিক এই ব্যক্তিটি যা জিজ্ঞাসা করছে তা করে। এটি পিএইচপি কোডটিকে "মেশিন কোড" এ এনকোড করে / অবরুদ্ধ করে।


1
আমি মনে করি না তারা উত্সের চেয়ে বাইটকোডকে ইন্টারপ্রেটিংয়ের ফলে গতিবেগের মতো ততটুকু অনিচ্ছাকৃত চেয়েছিল।
স্টিফেন

@ স্টেফেন জেন্ড গার্ডকেও এটি করা বোঝানো হয়েছে।
গজুস

জেন্ড গার্ড পিএইচপি 7 সমর্থন না করার সিদ্ধান্ত নিয়েছে যা হ'ল - blog.zend.com/2016/10/10/zend-guard-and-php-7/#.W7YISnszaM8
vj

2

পিএইচপি কোডের বেশ কয়েকটি "সংকলক" রয়েছে। তাদের বেশিরভাগ পিএইচপি বৈশিষ্ট্যগুলি সমর্থন করে না, কারণ রানের সময়গুলিতে এগুলি কেবল ব্যাখ্যা করা উচিত।

আমরা ফাল্যাঙ্গার ব্যবহার করছি - http://www.php-compiler.net/ - এটি এমনকি এই নোংরা পিএইচপি গতিশীল বৈশিষ্ট্য সমর্থন করে, এবং এখনও তাদের নেট। সমাবেশ হিসাবে সংকলন করতে সক্ষম, যে স্ট্যান্ডেলোন ডিএলএল হিসাবে বিতরণ করা যেতে পারে।


1

5.5.x দেখুন ইন্টিগ্রেটেড ওপ্যাচে মডিউল সহ, একটি ভাগ করা মেমোরিতে অস্থির, আরও অনেক বেশি পারফরম্যান্স এবং পিএইচপি-র গতিশীলতা নীতিটি অস্পৃশ্য থেকে যায়।

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


1

পিএইচপি In-তে পিএইচপি আইএনআই অপশনটি রয়েছে অপক্যাচ.ফিল_ক্যাচ যা একটি নির্দিষ্ট ফোল্ডারে বাইটোকড সংরক্ষণ করে। পিএইচপি ক্লাইপ স্ক্রিপ্টে দরকারী হতে পারে যা "সংকলিত" এবং একটি অনুকূল ফোল্ডারে একটি অনুকূলিত পুনরায় ব্যবহারের জন্য সংরক্ষণ করা হয়।

ওপচ্যাশ এটি সংকলন করছে না তবে এটি একই রকম।


"পিএইচপি 7 এ" এটি কেবল পিএইচপি 7 নয়, এটি পিএইচপি 5.5.0 এবং পরবর্তীকালে
রায়মন্ড নিজল্যান্ড

0

পিএইচপি সত্যিই অনেক প্রোগ্রামের মতো সংকলিত হয় না। আপনি এটিকে অপঠনযোগ্য করতে জেন্ডের এনকোডারটি ব্যবহার করতে পারেন।


পার্লটি যেভাবে সঙ্কলিত হয় তেমনভাবে সংকলন হয় না?
কারসন মাইয়ার্স

আমি বিশ্বাস করি যে ফ্লাইতে সার্ভারে পিএইচপি সংকলিত হয়। যদিও সোর্স কোডটি লুকানোর জন্য আমি একটি এনকোডার ব্যবহার করেছি। যদি তা হয় তবে আপনি চিন্তিত। তারা সত্যিই ভাল কাজ।
জো

না, আমি এর তাত্ত্বিক দিকটিতে কেবল আগ্রহী ছিলাম
কারসন মায়ার্স

2
পিএইচপি মেনে চলেনি, এটি একটি ব্যাখ্যা করা ভাষা। ক্যাশে 'অপকডস' হুইচ পিএইচপি ইন্টারপ্রেট থাকে (টেক্সট পড়তে হবে না), পিএইচপি কোডটি সরাসরি 'রান' করা যাবে না আপনি সি
বোরেল

0

যদি আপনাকে আসল নেটিভ বাইনারিগুলি চালানোর অনুমতি দেওয়া হয় তবে এটি আপনার সংকলক:

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

এটি পিএইচপি লিখিত একটি পিএইচপি সংকলক !

এটি পিএইচপি কোডটি তার নিজস্ব ভিএম কোডে সংকলন করে। এই ভিএম কোডটি তখন হয় তার নিজস্ব অনুবাদক দ্বারা ব্যাখ্যা করা যেতে পারে (পিএইচপি-তেও লেখা আছে, সে কি পাগল নয়?) অথবা এটি বিটকোডে অনুবাদ করা যেতে পারে। এবং এলএলভিএম সংকলক কাঠামো ( clangএবং কো) ব্যবহার করে , এই বিটকোডটি কোনও প্ল্যাটফর্মের জন্য একটি স্থানীয় বাইনারিতে সংকলন করা যেতে পারে যা এলএলভিএম সমর্থন করে (বেশিরভাগ প্ল্যাটফর্ম যা আজ গুরুত্বপূর্ণ)। কোডটি কার্যকর করার আগে আপনি স্থিতিশীলভাবে বা প্রতিবার এটি করতে বেছে নিতে পারেন (জেআইটি স্টাইল)। সুতরাং আপনার সিস্টেমে এই সংকলকের কাজ করার জন্য কেবলমাত্র দুটি প্রয়োজনীয়তা হ'ল একটি ইনস্টলড পিএইচপি ইন্টারপ্রেটার এবং একটি ইনস্টলড clangসংকলক।

যদি আপনাকে নেটিভ বাইনারিগুলি চালনা করার অনুমতি না দেওয়া হয় তবে আপনি উপরোক্ত সংকলককে দোভাষী হিসাবে ব্যবহার করতে পারেন এবং এটির নিজের ভিএম কোডটি ব্যাখ্যা করতে পারেন, তবুও আপনি যখন পিএইচপি ইন্টারপ্রেটার চালাচ্ছেন তখন এটি ধীর হয়ে যাবে যে কোনও পিএইচপি ইঞ্জিনে চলছে, সুতরাং আপনার একটি "দ্বিগুণ ব্যাখ্যা" রয়েছে have

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.