2012-03-27 21 views
5

मुझे विंडोज सर्वर 2008 आर 2 पर PHP के साथ वास्तव में परेशान समस्या है। आईआईएस और अपाचे एक ही मशीन पर चल रहे हैं (अपाचे किसी अन्य उत्पाद के साथ एम्बेडेड है और यह मेरी पसंद नहीं है)।अपाचे PHP MySQL एक्सटेंशन लोड नहीं करता है लेकिन आईआईएस

आईआईएस PHP के कई संस्करणों का उपयोग करने में सक्षम होने के लिए कॉन्फ़िगर किया गया है, और वहां पर कोई भी PHP संस्करण विंडोज इंस्टालर के साथ स्थापित नहीं किया गया था (इसलिए php.exe पथ में मौजूद नहीं है)।

अपाचे PHP के एक विशेष संस्करण का उपयोग करता है (5.2.5 थ्रेड-सुरक्षित - फिर मैं इसे किसी तृतीय-पक्ष एप्लिकेशन के रूप में नहीं बदल सकता, इस संस्करण के विरुद्ध संकलित PHP एक्सटेंशन हैं)।

अगर मैं अपने अपाचे साइट में phpinfo() की जांच करता हूं तो इसमें MySQL के लिए कोई प्रविष्टि नहीं है, भले ही php_mysql.dll php.ini में सक्षम है और यह \ ext निर्देशिका में मौजूद है। यदि मैं (अस्थायी रूप से) PHP के इस संस्करण को जोड़ता हूं (समान निर्देशिका, एक ही php.ini) IIS को और phpinfo() के साथ एक परीक्षण साइट सेट करता है, तो यह सही ढंग से MySQL सूचीबद्ध करता है। मैं जानता हूँ कि इस phpinfo साथ बस कुछ अजीब मुद्दा है क्योंकि मैं एक MySQL आधारित PHP साइट अपाचे में चल रहा है नहीं है और यह Call to undefined function mysql_connect()

यह सुझाव दिया गया है कि मैं सेल्सियस तक पीएचपी निर्देशिका से libmysql.dll कॉपी के साथ विफल: \ Windows \ System32 लेकिन इससे कोई फर्क नहीं पड़ता। चूंकि सर्वर पर PHP के कई संस्करण हैं, मुझे लगता है कि यह संभव है कि libmysql.dll का गलत संस्करण लोड हो रहा है, लेकिन PATH में libmysql.dll वाली कोई निर्देशिका शामिल नहीं है।

आईआईएस और अपाचे बिल्कुल वही PHP स्थापना, php.ini, और ext निर्देशिका पर देख रहे हैं, लेकिन केवल आईआईएस MySQL एक्सटेंशन लोड कर सकता है। अपाचे डिफ़ॉल्ट सिस्टम खाते पर है क्योंकि ऐसा लगता है कि सिस्टम के पास सभी डीएलएल तक पहुंच है।

अपाचे लॉग लोड करने में असफल किसी भी डीएलएल के बारे में कुछ नहीं कहता है। मैं इवेंट लॉग में PHP त्रुटियों को लॉग कर रहा हूं लेकिन उन एक्सटेंशन के बारे में कुछ भी नहीं बताया गया है।

इस मुद्दे के आसपास गुगल करने के बाद मुझे विंडोज सर्वर पर PHP में अचानक अचानक होने वाले मुद्दों को मिला, लेकिन सामान्य संकल्प - php.ini का पुनर्निर्माण, आईआईएस को पुनरारंभ करना, सर्वर को पुनरारंभ करना - मदद नहीं की है।

अगला कहां देखने के लिए कोई सुझाव बहुत सराहना की है!

+0

क्या आपने जांच की है कि c: \% php_5.2.5_install_path $ \ से DLLs को C: \ Windows \ System32 पर कॉपी किया गया है? उदाहरण के लिए 'libmysql.dll' या 'libmhash.dll'। मुझे पता है कि यह अपाचे + PHP के लिए जरूरी है, आईआईएस + PHP – JScoobyCed

+0

@JScoobyCed के लिए यह सुनिश्चित नहीं है कि यह वादा करता है, लेकिन मेरे पास आईआईएस में PHP 5.3.10 भी काम कर रहा है और इसमें वर्तमान में MySQL से कनेक्ट करने में कोई समस्या नहीं है। क्या कोई जोखिम है कि 5.2.5 डीएलएल को सिस्टम 32 पर कॉपी करने से 5.3.10 पर प्रतिकूल प्रभाव पड़ेगा? – tomfumb

+0

यदि सिस्टम 32 में पहले से ही 5.3.10 डीएलएल हैं, तो PHP 5.3.10 – JScoobyCed

उत्तर

1

आखिरकार यह समस्या एक अनुपलब्ध पथ संदर्भ में आई। हालांकि आईआईएस को पथ में मौजूद PHP या PHP मॉड्यूल की आवश्यकता नहीं लगती है, ऐसा लगता है कि अपाचे (या शायद PHP का मेरा संस्करण) करता है। मैं भाग्यशाली हूं कि मुझे केवल आईआईएस के बाहर PHP का एक संस्करण चलाने की आवश्यकता है, क्योंकि मुझे नहीं पता कि क्या होगा यदि मेरे पास PHP के विभिन्न संस्करणों और पथ में एकाधिक PHP निर्देशिकाओं का संदर्भ देने वाले कई अपाचे उदाहरण थे - संभवतः कोई हमेशा असफल रहता।

अब तक ऐसा लगता है कि पथ के PHP के अपाचे के संस्करण को PHP के आईआईएस संस्करणों को प्रभावित नहीं किया है, लेकिन अगर अचानक यह होता है तो मैं जोर से कसम खाता हूं।

3

मुझे पता है कि यह अंततः आपके प्रश्न का उत्तर नहीं दे सकता है, लेकिन क्या आपने फास्टसीजीआई (mod_fcgid) के माध्यम से PHP निष्पादित करने के लिए अपाचे को कॉन्फ़िगर करने का प्रयास किया और आईआईएस के समान बाइनरी का उपयोग किया?

मुझे पता है कि आप mod_php का उपयोग कर रहे हैं, लेकिन इसे फास्टसीजीआई के माध्यम से कॉल करना वेबसर्वर प्रक्रिया से अमूर्त PHP होगा। यदि एक्सटेंशन फास्टसीजीआई के माध्यम से PHP के तहत ठीक से लोड हो रहे हैं, तो ऐसा कोई कारण नहीं है कि यह किसी भिन्न वेब सर्वर पर काम नहीं करेगा।

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

अद्यतन

ऐसा करने के लिए, आप http://httpd.apache.org/mod_fcgid/ से mod_fcgid डाउनलोड करने के लिए, इस तरह से अपने अपाचे विन्यास में मॉड्यूल लोड की जरूरत है,

LoadModule fcgid_module modules/mod_fcgid.so 

और फिर, क्या द्विआधारी आप करना चाहते हैं निर्दिष्ट कॉल करें जब PHP पृष्ठों का अनुरोध किया जाता है:

AddHandler fcgid-script .php 
FcgidWrapper "c:/php/php-cgi.exe" .php 

फिर, .php एक्सटेंशन वाली फ़ाइलें अब ई होंगी PHP फास्टसीजीआई रैपर द्वारा सताया गया। आईआईएस का उपयोग कर रहा है, बस एक ही php-cgi.exe बाइनरी निर्दिष्ट करना सुनिश्चित करें।

आईआईएस में पहले उपलब्ध सभी एक्सटेंशन अब अपाचे में उपलब्ध होना चाहिए क्योंकि PHP स्थापना के पीछे दोनों वातावरण में समान है।

मुझे अपडेट रखें।

+0

इसके लिए धन्यवाद - क्या आप सीजीआई का उपयोग करने के लिए अपाचे को कॉन्फ़िगर कैसे करेंगे इस पर कोई संकेत दे सकते हैं? – tomfumb

+0

मैंने अपना जवाब संपादित कर लिया है। –

+0

अद्यतन के लिए बहुत अच्छा धन्यवाद। मैं कार्यालय के घंटों (पीएसटी) के भीतर इस परिवर्तन का परीक्षण नहीं कर सकता, इसलिए मैं इसे सप्ताहांत – tomfumb

1

1.- phpinfo में php.ini पथ की जांच करें।

2.- खिड़कियों पथ के लिए php फ़ोल्डर जोड़ने

http://www.computerhope.com/issues/ch000549.htm

3.- अपाचे conf को निर्देश PHPINIDir जोड़ने

http://php.net/manual/en/install.windows.apache2.php

4.- टिप्पणी हटाएं mysql संबंधित php में विस्तार .ini

5.- पुनः लोड अपाचे

phpinfo

में

6.- जांच mysql विस्तार और system32

1

के लिए किसी भी फ़ाइलों की प्रतिलिपि नहीं करते कृपया आप आम तौर पर आप चल रहे हैं पीएचपी के विभिन्न संस्करणों के लिए अलग पुस्तकालय DLLs की आवश्यकता होगी। इन्हें अपनी निर्देशिका में रखना सबसे अच्छा है।

वहाँ कुछ अलग चीजें हैं जो PHP संस्करण आप एक धागा सुरक्षित है या नहीं धागा सुरक्षित संस्करण चल रहा है और यह भी जाता है कि आप भी शामिल है, लोड करने के लिए नहीं है, तो बाइनरी VC6 या VC9 और चाकू के रूप में संकलित किया गया एक मॉड्यूल का कारण बन सकता है ;। आम तौर पर यदि आप कोई मॉड्यूल लोडिंग त्रुटियां प्राप्त कर रहे हैं तो डीबग करने का सबसे आसान तरीका कमांड लाइन से php.exe चला रहा है क्योंकि यह किसी स्टार्टअप त्रुटियों को थका देगा (यह भी सुनिश्चित करें कि ये आपके php.ini में सक्षम हैं और आप सही php लोड कर रहे हैं। आईएनआई फ़ाइल जब आप ऐसा करते हैं)।

और डैगर; आईआईआरसी वीसी 6/वीसी 9 करना है कि विजुअल स्टूडियो PHP के किस संस्करण के साथ संकलित किया गया था।

+0

सुझाव के लिए धन्यवाद, अगर मैंने पहले इस बारे में सोचा था तो शायद यह मददगार होगा क्योंकि मुझे यह कहने में एक त्रुटि दिखाई देनी चाहिए कि php_mysql.dll नहीं मिला – tomfumb

+0

कोई समस्या नहीं है, आपके अनुवर्ती उत्तर से मैं 'extension_dir को सेट करने का सुझाव दे सकता हूं '(या तो बस अपने पीएचपी फ़ोल्डर से बंद करें या फ़ोल्डर में पूर्ण सी: \ पथ) 'पाथ' का उपयोग करने के बजाय अपनी 'php.ini' फ़ाइल में)। ये प्रत्येक PHP उदाहरण के लिए विशिष्ट होना चाहिए और उस PHP के लिए DLL युक्त निर्देशिका को इंगित करना चाहिए। एफडब्ल्यूआईडब्ल्यू 'पथ' पदानुक्रमित है इसलिए विंडोज उस सूची में पहले फ़ोल्डर का उपयोग करेगा जिसमें वह फ़ाइल है, जिसे आप ढूंढ रहे हैं, जैसा कि आप कहते हैं, संभवतः PHP के कई संस्करणों को चलाने के दौरान आपको समस्याएं आती हैं। भविष्य में संदर्भ के लिए – George

+0

भी यहां और सहायता है: http://php.net/manual/en/install.windows.extensions.php – George

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