PHP में EXE एप्लीकेशन बनाना

परिचय

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

काला वर्ग

एप्लिकेशन को कंसोल और विंडो में विभाजित किया गया है। आइए सबसे पहले बनाकर शुरू करें, क्योंकि यह आसान है। इसलिए, शुरुआत के लिए, आपको यह तय करने की आवश्यकता है कि हम क्या लिखेंगे ... मेरा सुझाव है कि एक सरल एमडी 5 और बेस 64 एनकोडर लिखना - घर में बात आवश्यक और उपयोगी है, खासकर जब से सब कुछ काफी सरल है। कमांड लाइन से एक PHP स्क्रिप्ट चलाने के लिए और इसके लिए आवश्यक पैरामीटर पास करें, निम्न निर्माण का उपयोग करें:
php.exe [विकल्प] [-f] <हमारी स्क्रिप्ट> [विकल्प]

स्क्रिप्ट की सामग्री के लिए के रूप में, पारित मापदंडों की संख्या $ argc चर में संग्रहीत किया जाता है, और पैरामीटर खुद को $ argv सरणी में संग्रहीत किया जाता है। यह कंसोल अनुप्रयोगों पर संक्षिप्त ब्रीफिंग का समापन करता है और कार्रवाई करने का समय है।

स्क्रिप्ट लिखने के साथ आपको परेशान न करने के लिए, मैंने इसे आपके लिए लिखने का फैसला किया। मेरे पास यही है
यह पता चला:

<? php
अगर ($ argc! = 3) {गूंज ”
+ -------------------------------------- +
| MD5 हैश बनाएँ: enc md5 स्ट्रिंग |
| Base64 हैश बनाएँ: enc b64 string |
+ -------------------------------------- + \ n ";
} {
गूंज "\ n";
if ($ argv [1] == 'md5') {// MD5 एनकोड
इको md5 ($ argv [2])। "\ n \ n"; मरो ();
}
if ($ argv [1] == 'b64') {// Base64 एनकोड
echo base64_encode ($ argv [2])। "\ n \ n"; मरो ();
} और {प्रतिध्वनि "अज्ञात कमांड। सहायता के लिए \ "एन्को \" टाइप करें। \ N \ n "; }
}
?>

<img src = " habrastorage.org/getpro/habr/olpictures/cf6/1d1/61b/cf61d161b4a795fc4c658d661s96fdae.gif " चौड़ाई = 450 ऊँचाई = 186 सीमा = 0 alt = स्क्रिप्ट का स्थान "डेमोंस्ट्रेशन ऑफ़ दी स्क्रिप्ट 10"।

स्क्रिप्ट लिखी गई है और अब सबसे दिलचस्प बात एक EXE एप्लिकेशन में संकलन है। कंसोल एप्लिकेशन को संकलित करने के लिए, मैं रोडसेंड कंपाइलर स्टूडियो का उपयोग करता हूं। इसे नि: शुल्क पंजीकरण के बाद www.roadsend.com पर डाउनलोड किया जा सकता है। क्या आपने डाउनलोड किया है? अब रोडसेंड आईडीई खोलें, एक नया प्रोजेक्ट बनाएं (प्रोजेक्ट -> नया), आवश्यक मापदंडों को लिखें (मैं हमारी स्क्रिप्ट को प्रोजेक्ट डायरेक्टरी में फेंकने की सलाह देता हूं), ठीक क्लिक करें और अंत में पोषित प्रोजेक्ट -> बिल्ड दें। अब हम प्रोजेक्ट फ़ोल्डर में जा रहे हैं और यदि आपने सब कुछ सही ढंग से किया है, तो आपको इसमें तैयार EXE मिलेगा। क्या वह सब है? हां। यह सरल है, अगर आप कुछ बारीकियों को जानते हैं। केवल एक चीज जो मैं सुझाऊंगा वह कभी-कभी प्लग-इन पुस्तकालयों के साथ खेलने के लिए उपयोगी होती है, और आप हमारे EXE UPX को भी पैक कर सकते हैं, हालाँकि मैं इस विषय को थोड़ा कम करूँगा। अब विंडो एप्लिकेशन पर चलते हैं ...

खिड़कियां

जैसा कि आप शायद पहले ही अनुमान लगा चुके हैं, नियमित रूप से PHP टूल्स का उपयोग करके विंडो एप्लिकेशन बनाते समय, आप नहीं कर सकते, इसलिए सबसे पहले आपको हमारी विंडो को विकसित करने के लिए एक टूल का चयन करना होगा। सभी साधनों के बीच, दो सबसे बाहर खड़े हैं - एक काफी अच्छी तरह से विकसित PHP-GTK (www.gtk.php.net) और एक कम अच्छी तरह से विकसित, लेकिन कोई कम कार्यात्मक WinBlider (www.winbinder.org) नहीं है। यहां सिर्फ यही मामला है जब अधिक लोकप्रिय और अच्छी तरह से जाना जाता है इतना अच्छा नहीं है (यह मेरा आईएमएचओ है), इसलिए हम PHP में हमारे पहले विंडो पत्ती को विकसित करने के लिए WinBlinder का उपयोग करेंगे। सबसे पहले आपको इसे डाउनलोड करने की आवश्यकता है। हो गया ना? ठीक है, आगे बढ़ें ...

Winbinder का अपना डेटा प्रारूप है - phpw, जिसे आप तुरंत अपने पसंदीदा कोड संपादक में साहसपूर्वक बाँध सकते हैं। डिफ़ॉल्ट रूप से, जब phpw फ़ाइल लॉन्च की जाती है, तो इसमें मौजूद PHP लिपि खुलती है और इंटरप्रेटर के माध्यम से चलती है, जिसमें पहले से ही जुड़े ब्लिंडर लाइब्रेरी के साथ होती है। जैसा कि आप शायद समझ गए हैं, आपको स्वयं इस बालिका पर कार्यक्रम करना सीखना होगा, लेकिन इसमें कुछ भी जटिल नहीं है, विशेषकर ऐसे व्यक्ति के लिए जो पीएचपी में ओओपी से कम से कम परिचित हो। हालांकि, यहां तक ​​कि एक अजनबी भी इस पर कोड करने में सक्षम होगा, क्योंकि सार में ब्लेंडर (PHP-GTK के विपरीत) प्रक्रियात्मक प्रोग्रामिंग का भी समर्थन करता है। इसके अलावा, WinBlinder बहुत अच्छी तरह से प्रलेखित है, और इंस्टॉलेशन आर्काइव में पहले से ही कुछ बहुत ही रोचक उदाहरण हैं (कृपया प्रपत्र संपादक पर विशेष ध्यान दें)। ब्लिंडर में अभी भी चिप्स, सुविधाओं और दिलचस्प चीजों का एक गुच्छा है, लेकिन इस लेख का दायरा मुझे उन पर ध्यान केंद्रित करने की अनुमति नहीं देता है। अब, शायद हमारे एनकोडर को वापस बुलाने का सबसे उपयुक्त समय है। कोड के साथ सब कुछ अधिभार नहीं करने के लिए, मैंने केवल एमडी 5 एनकोडर लिखने का फैसला किया:

<? php
// मुख्य पुस्तकालय कनेक्ट करें
"शामिल करें / winbinder.php" शामिल करें;

// खिड़कियों को संपादित करने के लिए लेबल दें
परिभाषित ('IDC_EDITBOX1002', 1002);
परिभाषित ('IDC_EDITBOX1003', 1003);

// एक खिड़की ड्रा
$ वाइनमाइन = wb_create_window (शून्य,
AppWindow,
'S5B [SBT] द्वारा एमडी 5 हैश जेनरेटर,'
WBC_CENTER, WBC_CENTER, 315, 134,
0x00000000, 0);

// बटन के साथ विंडो भरें

# एक फ्रेम बनाएं
wb_create_control ($ winmain, Frame, '', 10, 10, 290, 85, 0, 0x00000000, 0, 0);
# शिलालेख (लेबल)
wb_create_control ($ winmain, Label, 'Text:', 23, 35, 45, 15, 0, 0x00000000, 0, 0);
wb_create_control ($ winmain, Label, 'Hash:', 23, 65, 45, 15, 0, 0x00000000, 0, 0);
# हम संपादन विंडो (नीचे निष्क्रिय होगा) खींचते हैं, और उनके डेटा को चर में चलाते हैं
$ पाठ = wb_create_control ($ winmain, EditBox, '', 78, 30, 210, 20, IDC_EDITBOX1002, 0x00000000, 0, 0);
$ हैश = wb_create_control ($ winmain, EditBox, '', 78, 60, 210, 20, IDC_EDITBOX1003, 0x00000040, 0, 0);

// दो आवश्यक शिलालेख =)
wb_set_handler ($ winmain, "process_main");
wb_main_loop ();

समारोह process_main ($ विंडो, $ id) {
# डेटा संपादन विंडो को वैश्विक घोषित करें
वैश्विक $ पाठ, $ हैश;
स्विच ($ आईडी) {
मामला IDC_EDITBOX1002:
wb_set_text ($ हैश, md5 (wb_get_text ($ text)));
तोड़;
मामला IDCLOSE:
wb_destroy_window ($ विंडो);
तोड़;
}
}
?>

कोड काफी सरल है और मुझे लगता है कि 1-2 घंटे के दस्तावेज के साथ बैठने के बाद आप इसे उसी तरह समझना शुरू करेंगे जैसे मैं करता हूं। खैर, अब चरमोत्कर्ष एक खिड़की इकट्ठा कर रहा है ... इसके लिए, मैं एक अलग निर्देशिका बनाने और हमारी स्क्रिप्ट को वहां स्थानांतरित करने का प्रस्ताव करता हूं। आपको विंडबाइंडर की phpcode निर्देशिका से वहां शामिल फ़ोल्डर को स्थानांतरित करने की भी आवश्यकता है। हो गया ना? अब संकलित करें! उह ... रोडसेंड IDE पर हड़पने की कोई जरूरत नहीं है। कैसे? और इसलिए! यह ब्लिंडर का समर्थन नहीं करता है, लेकिन केवल GTK का समर्थन करता है, और उनके फोरम पर रोडसेंड डेवलपर्स के अस्पष्ट जवाबों को देखते हुए, ब्लिंडर के समर्थन के लिए आने वाले लंबे समय की उम्मीद की जा सकती है। हालांकि, स्नॉट को पोंछें, और हम अन्य तरीकों की तलाश करेंगे, और इन रास्तों का नाम है बामकपिल (www.bambalam.se/bamcompile/)। हालांकि, किसी कारण के लिए, संस्करण 1.21 हमेशा सही ढंग से काम नहीं करता है और कभी-कभी एक गैर-कार्यशील एप्लिकेशन में सब कुछ संकलित करता है, हालांकि संस्करण 1.1 इस तरह के ग्लिट्स से पीड़ित नहीं है, इसलिए मैं इसका उपयोग करने की सलाह देता हूं। अब उदारता से हमारे संकलक के लिए एक अलग फ़ोल्डर चुनें, कमांड लाइन पर जाएं और गर्व से कमांड करें:
bambalam -w -c C: \ PHP_Projects \ MD5_Hash_Generator \ md5.phpw md5.exe

संकलन की प्रक्रिया

यदि सब कुछ सही ढंग से किया जाता है, तो संकलक के साथ निर्देशिका में एक ताज़ा गैंग विंडो एप्लिकेशन होगा। वह सब है। मैं सिर्फ इतना जोड़ना चाहूंगा कि मैं UPX के साथ सभी अनुप्रयोगों को पैक करने की सिफारिश करूंगा (जो कि Bamcompile के साथ तुरंत आता है)।

हमारा ऐप

मैजिक कास्केट

उपरोक्त सभी निश्चित रूप से बहुत दिलचस्प और जानकारीपूर्ण हैं, लेकिन कई बार सही उपकरण हाथ में नहीं होते हैं ... तब क्या करना है? विशेष रूप से इस मामले के लिए, WinRAR संग्रह के SFX विकल्पों में शर्मिंदगी के माध्यम से EXE प्राप्त करने का एक बहुत ही दिलचस्प तरीका है। एक उदाहरण के रूप में, मैं हमारी पहली कंसोल स्क्रिप्ट का उपयोग करूंगा। शुरू करने के लिए, हम अपनी स्क्रिप्ट को एक अलग फ़ोल्डर में रखते हैं, php.exe और php * ts.dll को कॉपी करें। इसके बाद, एक ही run.bat फ़ोल्डर में निम्नलिखित सामग्री बनाएँ:

@ जरा हटके
php.exe -q कंसोल.php% 1% 2


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



दिखाई देने वाली विंडो में, आरएआर संग्रह का प्रारूप चुनें, अधिकतम संपीड़न सेट करें और "एसएफएक्स संग्रह बनाएं" बॉक्स की जांच करें।



उसके बाद, "उन्नत -> एसएफएक्स ऑप्शंस" फोल्ड पर जाएं, स्विच को "क्यूरेंट फोल्डर में बनाएं" पर सेट करें और "रन.बीएट" को "एक्सट्रैक्शन के बाद रन करें" पर सेट करें, और "मोड" टैब में "अनपैक" पर भी टिक करें। अस्थायी फ़ोल्डर ", और" सभी छुपाएं "और" सभी फ़ाइलों को अधिलेखित करें "स्विच भी सेट करें।



स्वाद के लिए, आप अपने आइकन को उपयुक्त टैब में चिपका सकते हैं। अब हम आर्काइव के निर्माण की पुष्टि करते हैं और आउटपुट पर हमें बिना किसी कंपाइलर के EXE मिलता है।

Outro

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

Source: https://habr.com/ru/post/In19705/


All Articles