मैं चाहता हूं कि PHP स्क्रिप्ट्स कमांड लाइन और वेबसाइट दोनों पर चलें (मैं अपाचे और एनजिनक्स का उपयोग करता हूं) इसलिए मैंने अपनी स्क्रिप्ट की पहली पंक्ति में #!/Usr/bin/php डाल दिया लेकिन यह वेबसाइट पर दिखाई देता है ...मैं PHP पर "#!/Usr/bin/php" दिखाने से कैसे बच सकता हूं?
उत्तर
कॉल स्क्रिप्ट php
आदेश
कैसे किया जा सकता है? आप Nginx के लिए मतलब है? मैं डेबियन – brainsqueezer
पर php-fpm का उपयोग करता हूं यह सच है कि आप 'php' कमांड का उपयोग करके स्क्रिप्ट चला सकते हैं। हालांकि, अगर आप निष्पादन योग्य स्क्रिप्ट ('chmod + x yourscript.php') बनाना चाहते हैं तो आपको हैशबैंग (#!) को अपनी स्क्रिप्ट की पहली पंक्ति में जोड़ना होगा। –
अपने कोड में #!/usr/bin/php
के लिए कोई जरूरत नहीं है का उपयोग करते हुए, बस, php
का उपयोग कर उदाहरण php /path/to/file.php
या /usr/bin/php /path/to/file.php
के लिए CLI स्क्रिप्ट चलाने।
लेकिन यदि आप एक निष्पादन योग्य स्क्रिप्ट बनाना चाहते हैं जो खोल से चल सकता है, तो आपको इस समस्या को हल करने की आवश्यकता है। तर्क के अलगाव के लिए –
मुझे आमतौर पर प्रस्तुति से तर्क को अलग करने का अच्छा विचार मिलता है। जब मैं ऐसा कुछ करता हूं, तो मैंने पुस्तकालय में जितना संभव हो उतना रखा है, और फिर इसके लिए अलग क्ली और वेब इंटरफेस लिखें।
उसने कहा, इसे php कमांड के साथ बुलाकर शायद एक आसान फिक्स है।
+1। आम तौर पर सीएलआई और वेब को अलग-अलग इंटरफेस की आवश्यकता होगी (उदाहरण के लिए '$ _GET' के बजाय' $ argv' के साथ बातचीत करना)। तो दोनों से एक ही * फ़ाइल * के लिए कोई वास्तविक आवश्यकता नहीं है। – ircmaxell
मैंने आउटपुट बफरिंग का उपयोग कर समस्या हल की। मेरे स्क्रिप्ट अब इस तरह दिखता है:
#!/usr/bin/php
<?php
@ob_end_clean();
...
नोट: फ़ाइल के अंत में कोई ?>
है। PHP स्क्रिप्ट लिखते समय यह वास्तव में एक अच्छा अभ्यास है। यह किसी भी कचरा पाठ को गलती से मुद्रित करने से रोकता है।
नोट:ob_end_clean()
के लिए पीएचपी प्रलेखन का कहना है कि:
उत्पादन बफर PHP_OUTPUT_HANDLER_CLEANABLE और PHP_OUTPUT_HANDLER_REMOVABLE झंडे के साथ ob_start() द्वारा शुरू किया जाना चाहिए। अन्यथा ob_end_clean() काम नहीं करेगा।
ऐसा लगता है कि जब PHP कमांड लाइन से चलता है तो यह स्वचालित रूप से किया जाता है।
उपरोक्त आउटपुट बफरिंग समाधान एक हैक है। ऐसा मत करो।
पहली बात, आप वास्तव में बेहतर env आदेश का उपयोग कर रहे हैं यह निर्धारित करने के लिए php किया जा रहा है: तो बजाय
chmod +x myfile
:
#!/usr/bin/env php
तो यह अनुमति देते हैं अपने आप में निष्पादित किया जाना है बुला 'php myFile', अब आप केवल चलाएँ:
./myfile
उस फ़ोल्डर से। उम्मीद है की यह मदद करेगा!
यदि आप पहले ही PHP की सेवा के लिए अपाचे का उपयोग करते हैं, तो अपाचे के लिए nginx को रिवर्स प्रॉक्सी के रूप में कॉन्फ़िगर करें। – Qwerty