2010-11-05 9 views
7

मैं चाहता हूं कि PHP स्क्रिप्ट्स कमांड लाइन और वेबसाइट दोनों पर चलें (मैं अपाचे और एनजिनक्स का उपयोग करता हूं) इसलिए मैंने अपनी स्क्रिप्ट की पहली पंक्ति में #!/Usr/bin/php डाल दिया लेकिन यह वेबसाइट पर दिखाई देता है ...मैं PHP पर "#!/Usr/bin/php" दिखाने से कैसे बच सकता हूं?

+0

यदि आप पहले ही PHP की सेवा के लिए अपाचे का उपयोग करते हैं, तो अपाचे के लिए nginx को रिवर्स प्रॉक्सी के रूप में कॉन्फ़िगर करें। – Qwerty

उत्तर

1

कॉल स्क्रिप्ट php आदेश

+0

कैसे किया जा सकता है? आप Nginx के लिए मतलब है? मैं डेबियन – brainsqueezer

+0

पर php-fpm का उपयोग करता हूं यह सच है कि आप 'php' कमांड का उपयोग करके स्क्रिप्ट चला सकते हैं। हालांकि, अगर आप निष्पादन योग्य स्क्रिप्ट ('chmod + x yourscript.php') बनाना चाहते हैं तो आपको हैशबैंग (#!) को अपनी स्क्रिप्ट की पहली पंक्ति में जोड़ना होगा। –

5

अपने कोड में #!/usr/bin/php के लिए कोई जरूरत नहीं है का उपयोग करते हुए, बस, php का उपयोग कर उदाहरण php /path/to/file.php या /usr/bin/php /path/to/file.php के लिए CLI स्क्रिप्ट चलाने।

+0

लेकिन यदि आप एक निष्पादन योग्य स्क्रिप्ट बनाना चाहते हैं जो खोल से चल सकता है, तो आपको इस समस्या को हल करने की आवश्यकता है। तर्क के अलगाव के लिए –

3

मुझे आमतौर पर प्रस्तुति से तर्क को अलग करने का अच्छा विचार मिलता है। जब मैं ऐसा कुछ करता हूं, तो मैंने पुस्तकालय में जितना संभव हो उतना रखा है, और फिर इसके लिए अलग क्ली और वेब इंटरफेस लिखें।

उसने कहा, इसे php कमांड के साथ बुलाकर शायद एक आसान फिक्स है।

+1

+1। आम तौर पर सीएलआई और वेब को अलग-अलग इंटरफेस की आवश्यकता होगी (उदाहरण के लिए '$ _GET' के बजाय' $ argv' के साथ बातचीत करना)। तो दोनों से एक ही * फ़ाइल * के लिए कोई वास्तविक आवश्यकता नहीं है। – ircmaxell

17

मैंने आउटपुट बफरिंग का उपयोग कर समस्या हल की। मेरे स्क्रिप्ट अब इस तरह दिखता है:

#!/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 कमांड लाइन से चलता है तो यह स्वचालित रूप से किया जाता है।

+1

बहुत अच्छा समाधान! काम करता है, धन्यवाद !!! – CDR

+1

क्या आपको 'ob_start();' की भी आवश्यकता है? शायद उल्लेखनीय लायक है। – Floris

+0

मुझे लगता है कि आप इस उत्तर को स्वीकृत (पहले से 5+ वर्ष) के रूप में चिह्नित कर सकते हैं :-) –

-1

उपरोक्त आउटपुट बफरिंग समाधान एक हैक है। ऐसा मत करो।

पहली बात, आप वास्तव में बेहतर env आदेश का उपयोग कर रहे हैं यह निर्धारित करने के लिए php किया जा रहा है: तो बजाय

chmod +x myfile 

:

#!/usr/bin/env php 

तो यह अनुमति देते हैं अपने आप में निष्पादित किया जाना है बुला 'php myFile', अब आप केवल चलाएँ:

./myfile 

उस फ़ोल्डर से। उम्मीद है की यह मदद करेगा!

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^