PHP संस्करण phpinfo () और CLI में भिन्न क्यों है?


27

मैंने महसूस किया कि ( phpinfo()और php -vCLI में) रिपोर्ट किए गए PHP संस्करण के बीच एक मिस मैचिंग है ।

phpinfo():  5.5.24
php -v: 5.6.9

मैं एक मैक ओएस एक्स 10.10 (योसेमाइट) पर काम कर रहा हूं और php-versionपीएचपी संस्करणों को प्रबंधित करने के लिए एक पुस्तकालय ( ) स्थापित किया है ।

यह मेरे लैपटॉप पर स्थापित 3 अलग-अलग संस्करणों की रिपोर्ट करता है:

  5.4.41
  5.5.25
* 5.6.9

मैं अपाचे और सीएलआई दोनों में PHP का एक ही संस्करण सेट करना चाहूंगा।

मैं अपाचे को कैसे बता सकता हूं कि PHP संस्करण किसका उपयोग करता है?

मैंने इस पंक्ति को अपने में लिखने की कोशिश की httpd.conf:

LoadModule php5_module    /usr/local/opt/php56/libexec/apache2/libphp5.so

फिर:

sudo apachectl restart

लेकिन यह सब समस्या को हल नहीं करता है ... मेरी PHP जानकारी में मेरे पास अभी भी है: 5.5.24


यह भी देखें superuser.com/questions/969861/...
bertieb

1
@bertieb प्रश्न वास्तव में उसी के समान है। मैंने अभी इसका उत्तर दिया है , लेकिन यहां कुछ विशेष मुद्दे हैं जिनका मैं उत्तर देने का प्रयास करूंगा।
जेकगॉल्ड

जवाबों:


14

यहाँ कुछ अलग मुद्दे PHP संस्करण भ्रम की अवधारणा के तहत छुपा रहे हैं, इसलिए हर एक को यथासंभव स्पष्ट रूप से संबोधित करने की कोशिश करेंगे। पहला यह:

मैंने महसूस किया कि ( phpinfo()और php -vCLI में) रिपोर्ट किए गए PHP संस्करण के बीच एक मिस मैचिंग है ।

phpinfo():  5.5.24
php -v: 5.6.9

PHP CLI PHP Apache मॉड्यूल के समान नहीं है।

जैसा कि मैं यहाँ इस अन्य प्रश्न के उत्तर में समझाता हूँ , घबराओ मत! यदि आप इस बात से चिंतित हैं कि आपका अपाचे सर्वर किस PHP संस्करण का उपयोग कर रहा है, तो आउटपुट phpinfo()हमेशा वह होता है जिस पर आपको ध्यान देना चाहिए। अपाचे PHP मॉड्यूल और PHP कमांड लाइन बाइनरी दो अलग-अलग चीजें हैं जो एक दूसरे के साथ हस्तक्षेप नहीं करती हैं।

phpinfo()यदि आप अपाचे में सही PHP मॉड्यूल संस्करण स्थापित करने के बारे में चिंतित हैं , तो बस इसके आउटपुट पर ध्यान दें।

कहा कि, आप अभी भी अपाचे में लोड सही PHP मॉड्यूल प्राप्त करने के लिए समस्या है:

मैंने इस पंक्ति को अपने में लिखने की कोशिश की httpd.conf:

LoadModule php5_module    /usr/local/opt/php56/libexec/apache2/libphp5.so

सुनिश्चित करें कि आपका Apache सर्वर सही PHP मॉड्यूल लोड कर रहा है।

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

मैं यह देखने की सलाह httpd.confदूंगा कि मैं यह मान रहा हूं कि यहां स्थित /etc/apache2/httpd.confहै- और देखें LoadModule php5_moduleकि क्या वास्तव में कोई अन्य चीज है जो आप चूक गए थे या उस फाइल को संपादित करते समय ध्यान नहीं दिया था। मैक ओएस एक्स 10.9.5 में मेरी समकक्ष फ़ाइल को देखते हुए मुझे लगता है कि लाइन पर टिप्पणी की गई है - क्योंकि मैं मैक ओएस एक्स अपाचे / पीएचपी सेटअप का उपयोग नहीं करता हूं और कुछ इस तरह से पढ़ता हूं:

#LoadModule php5_module libexec/apache2/libphp5.so

निश्चित रूप से आपके मामले में यह अनियोजित होगा। वेब विकास के लिए अपाचे और PHP को कॉन्फ़िगर करने के बारे में अधिक जानकारी इस साइट पर पाई जा सकती है

मैक ओएस एक्स अपाचे / PHP quirks के विकल्प के रूप में MAMP का उपयोग करने पर गंभीरता से विचार करें।

अब उस सब ने कहा, मुझे नहीं पता कि आप क्या करने का प्रयास कर रहे हैं, लेकिन अगर आप मैक ओएस एक्स सिस्टम पर वेब विकास कर रहे हैं, तो आपको चीजों को प्राप्त करने के लिए कोर मैक ओएस एक्स वेब स्टैक को हैक करने के बजाय MAMP का उपयोग करने पर गंभीरता से विचार करना चाहिए। चल रहा है।

MAMP का लाभ यह एक LAMP स्टैक के बराबर मैक ओएस एक्स का एक अत्यंत उत्पादन स्तर है। और चूंकि यह वास्तविक दुनिया के वेब विकास की ओर अग्रसर है, इसलिए इसमें सभी मॉड्यूल हैं और सेटअप को ठीक उसी तरह कॉन्फ़िगर करना है, जैसे किसी को सेटअप करना चाहिए।

मैक ओएस एक्स पर अपाचे और पीएचपी के साथ मुख्य समस्या यह है कि सॉफ्टवेयर आम तौर पर पुराना हो जाता है, इस तरह से सामान होने पर डिबग करने के लिए / ट्विक और प्रबंधन करने के लिए एक दर्द और सिरदर्द होता है। और क्या होगा अगर एक मैक ओएस एक्स अपडेट साथ आता है जो आपके सावधानीपूर्वक सेटअप अपाचे और पीएचपी सेटिंग्स को मिटा देता है? आप एक वर्ग में वापस आ गए हैं।


आपने डुप्लीकेट के रूप में प्रश्न को चिह्नित करने के बजाय इस डुप्लिकेट का जवाब क्यों दिया ?
मम्म

@ मैट्रिक्स क्योंकि "डुप्लिकेट" एक दूसरे के दिनों के भीतर पोस्ट किए गए एक अलग सवाल का एक समान उत्तर है। जैसा कि मैंने यहां एक ऐसी ही टिप्पणी का जवाब दिया है , “@bertieb प्रश्न वास्तव में उसी के समान है। मैंने अभी इसका उत्तर दिया है, लेकिन यहां कुछ विशेष मुद्दे हैं जिनका मैं उत्तर देने का प्रयास करूंगा। - JakeGould Sep 12 '15 पर 0:42 "एक प्रश्न कमांड लाइन से PHP के बीच अंतर के बारे में है। अन्य उस और PHP मॉड्यूल मुद्दों के बारे में है।
जेकगॉल्ड

4

मुझे अपनी समस्या का हल मिल गया। संपादन के बाद /etc/apache2/httpd.confमैंने प्रयोग करके अपाचे को पुनः आरंभ किया:

sudo apachectl restart

इस आदेश का उपयोग करने के लिए किसी कारण से अपाचे httpd.confपुराने कॉन्फ़िगरेशन को अपडेट नहीं करेगा और लोड नहीं करेगा ।

का उपयोग करते हुए:

sudo apachectl -k stop
sudo apachectl -k start

सभी सेवाओं की एक तरह की हार्ड रिस्टार्ट करें और कॉन्फिग फाइल में अपडेट्स को भी पढ़ें और अंत में इसके लिए नया पथ पढ़ें php5_module:

/usr/local/opt/php56/libexec/apache2/libphp5.so

इसके स्पष्टीकरण के लिए @JakeGould भी धन्यवाद ।


कमांड से -kध्वज को हटाने के लिए पोस्ट को तब से संपादित किया जाता है apachectlजब तक आप जांचते हैं apachectl -hकि झंडा / विकल्प वहां मौजूद नहीं है। पता नहीं आपको वह कहाँ से मिला। इसके अलावा, जब आप कर रहे हैं stopऔर startचीजों को मंजूरी दे दी है, अजीब बात यह है कि restartलिनक्स सिस्टम पर ठीक यही करता है। यदि आप इसमें स्थित स्क्रिप्ट की जाँच करते हैं /usr/sbin/apachectl(यह एक स्क्रिप्ट है तो देखने के लिए किसी भी टेक्स्ट एडिटर का उपयोग करें) ऐसा ही लगता है। शायद LaunchDaemonsमानक OS की तुलना में मैक ओएस एक्स पर अपाचे के लिए सिर्फ "अजीब" है? वैसे भी, महान आप इसे हल किया।
जेकगॉल्ड

बस आपकी जानकारी के लिए मुझे -k फ्लैग के साथ कमांड मिली: httpd.apache.org/docs/2.2/stopping.html
साल्वातोर डिबेडेनेट्टो

तुम सही हो। मैं की "सहायता" उत्पादन के माध्यम से देखा /usr/sbin/apachectlहै (किसी भी आदेश के बिना) और यह स्पष्ट रूप से, राज्यों [-k start|restart|graceful|graceful-stop|stop]। मैं लिनक्स सिस्टम पर अपाचे के काम करने के तरीके के लिए उपयोग किया जाता हूं, अब ऐसा लगता है कि मैं कमांड के -kसाथ उपयोग के लिए ध्वज के बारे में भूल गया हूं apachectl। इसलिए यह जानते हुए कि आपके पास वास्तविक समस्या यह थी कि आप इस आदेश के साथ पुनः आरंभ करने का प्रयास कर रहे थे, sudo apachectl restartजब इसे -kइस तरह से जोड़ा जाना चाहिए था sudo apachectl -k restart
जेकेगॉल्ड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.