मैं अपाचे को किस पीएचपी का उपयोग करने के लिए कहूं?


34

मैं एक मैक ओएस एक्स (10.5) पर अपाचे 2 चला रहा हूं । मैंने अभी PHP 5.2.8 संकलित किया है और अंत में काम कर रहा हूं (या इसलिए मुझे लगता है)।pdo-mysql

यह टर्मिनल कमांड:

php --version

5.2.8 दिखा रहा है और मेरे पास सही मॉड्यूल स्थापित हैं।

लेकिन, जब मैं एक कर phpinfo(), अपाची बाहर उदासीनता पीएचपी 5.2.6 (मेरे पुराने संस्करण, बिना pdo_mysql)।

मैं अपाचे को कैसे बताऊं कि कौन सा PHP लोड करने के लिए है? httpd.confलाइन है:

LoadModule php5_module        libexec/apache2/libphp5.so

लेकिन, मुझे नहीं पता कि वह क्या है या कहां है।

क्या मुझे जो बदलना है?


जब आप संकलित php का उपयोग करते हैं तो क्या आप स्थापित करते हैं? यदि आपको वह रास्ता मिल गया है जो उसने आपके मॉड्यूल को स्थापित किया है और इसे इंगित करने के लिए अपने अपाचे कॉन्फिगर को बदल दिया है। मैक के पास अपाचे का अपना संस्करण है और php5 पहले से स्थापित है यही कारण है कि आप एक अलग संस्करण देख रहे हैं।
रग्ग्स डेस


Homebrew उपयोगकर्ता, @Mick टिप्पणी देखें
BatteryAcid

1
क्या आपने अपनी समस्या का समाधान किया? सभी जवाब सिर्फ पागल बात है
Pmpr

इनमें से कोई भी जवाब सवाल का जवाब नहीं देता है। यह विचित्र है ...
मात्रा

जवाबों:


14

मुझे लगता है कि ये सभी जवाब वास्तव में सवाल का जवाब नहीं दे रहे हैं। रूट स्तर को कमांड चलाकर निर्धारित किया जा सकता है httpd -V। यह आपको दिखाएगा कि अपाचे डेमॉन को संकलन के समय किन विकल्पों के साथ बनाया गया था। यह वह नियंत्रण है जहां httpdयह निर्धारित करता है कि यह कहां से कॉन्फ़िगर होना चाहिए। फ़ाइलें और .so मॉड्यूल डिफ़ॉल्ट रूप से।

उदाहरण के लिए:

% httpd -V
Server version: Apache/2.2.17 (Unix)
Server built:   Dec 17 2010 11:58:24
Server's Module Magic Number: 20051115:25
Server loaded:  APR 1.3.12, APR-Util 1.3.9
Compiled using: APR 1.3.12, APR-Util 1.3.9
Architecture:   32-bit
Server MPM:     Prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APACHE_MPM_DIR="server/mpm/prefork"
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=128
 -D HTTPD_ROOT="/etc/httpd"
 -D SUEXEC_BIN="/usr/sbin/suexec"
 -D DEFAULT_PIDLOG="logs/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_LOCKFILE="logs/accept.lock"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="conf/mime.types"
 -D SERVER_CONFIG_FILE="conf/httpd.conf"

कि उत्पादन में महत्वपूर्ण रेखा है HTTPD_ROOT। यह परिभाषित करता है कि अपाचे की ROOTनिर्देशिका कहां शुरू होनी है, /etc/httpdमेरे मामले में, जब विन्यास की तलाश में है। फ़ाइलें और मॉड्यूल।

नोट: यह ROOTएक ही बात के रूप में नहीं है DocumentRoot। यह ROOTविशिष्ट है कि httpdडेमन को कैसे संकलित किया गया था, यह DocumentRootनिर्दिष्ट करने के लिए है कि httpdडेमॉन को वास्तविक वेब सामग्री (.html फाइलें और ऐसी) की तलाश शुरू करनी चाहिए।

मेरी httpd.confफ़ाइल के लिए मेरे पास निम्न लोड लाइनें हैं:

LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_file_module modules/mod_authn_file.so

उदाहरण के लिए, आपके मॉड्यूल के लिए यह पूर्ण पथ होगा:

/etc/httpd/modules/mod_auth_basic.so

यह एक CentOS 5.x प्रणाली से है लेकिन तकनीक अभी भी उपयुक्त है।

BTW, यह थोड़ा भ्रमित हो सकता है क्योंकि CentOS के मामले में फाइलें यहां शारीरिक रूप से व्यवस्थित होती हैं:

% ls /usr/lib/httpd/modules/
libphp5.so            mod_authnz_ldap.so      mod_dav_fs.so      mod_headers.so       mod_perl.so            mod_speling.so

... और फिर अपाचे डेमॉन के लिए सुलभ httpd, इस रास्ते से:

% ls -l /etc/httpd/
total 12
drwxr-xr-x 2 root root 4096 Apr 26  2011 conf
drwxr-xr-x 3 root root 4096 Apr 26  2011 conf.d
-rw-r--r-- 1 root root   18 Feb 24  2009 htpasswd
lrwxrwxrwx 1 root root   19 Apr 26  2011 logs -> ../../var/log/httpd
lrwxrwxrwx 1 root root   27 Apr 26  2011 modules -> ../../usr/lib/httpd/modules
lrwxrwxrwx 1 root root   13 Apr 26  2011 run -> ../../var/run

modulesलिंक जोड़ता है /etc/httpd-> /usr/lib/httpd/modules


slm जैसा कि मैंने पिछले पोस्ट में बताया है, ServerRoot को ServerRoot के निर्देश में परिभाषित किया गया है और HTTPD_ROOT के साथ कुछ भी नहीं करना है जो "httpd -V" के माध्यम से प्रदर्शित होता है। कृपया मेरी पिछली पोस्ट में संदर्भित अपाचे के वेब पृष्ठों से परामर्श करें, या यदि आप अपनी httpd.conf फ़ाइलमें ServerRoot निर्देश को बदलना चाहते हैंऔर अपने लिए देखें।
बिलिन्हौ

ServerRoot HTTPD_ROOT को ओवरराइड करने का एक तरीका है। HTTPD_ROOT को संकलन समय पर --prefix कॉन्फ़िगर स्विच के माध्यम से सेट किया गया है। आपकी पोस्ट अलग-अलग b / w ServerRoot और DocumentRoot को अलग कर रही थी। httpd.apache.org/docs/current/mod/core.html#serverroot । आप अपने SF खाते के साथ एक नाम पंजीकृत देखने के लिए अच्छा है!
slm

क्या यह वास्तव में इस सवाल का जवाब देता है: "मैं अपाचे को कैसे बताऊं जो PHP का उपयोग करना है?" ?
पाम

Trix OP ने इसे हां स्वीकार कर लिया।
SLM

@ एसएलएम इस सवाल का जवाब नहीं देता है।
मात्रा

4

आप अपने सिस्टम पर locateकमांड के साथ फाइल पा सकते हैं :

# libphp5.so का पता लगाएं

यह उस नाम के साथ सभी फाइलों का पूरा पथ प्रिंट करेगा। मेरे पास एक है /usr/libexec/apache2/libphp5.so


1
तो क्या? क्या यह सवाल का जवाब है? या फाइल खोजने का तरीका?
पाम

1
@ मैट्रिक्स, पूछने वाले ने कहा, "मुझे नहीं पता कि वह क्या है या कहाँ है।" मैंने दिखाया है कि कैसे कहाँ है। मैंने मान लिया कि एक बार पूछने वाले ने नामांकित फ़ाइल के सभी अन्य स्थानों को प्रश्न में देखा, तो यह स्पष्ट होगा कि किसी भिन्न का उपयोग करने के लिए सेटिंग को कैसे बदलना है।
रोब कैनेडी

4

Httpd.conf (जैसे:) में लोड किए गए मॉड्यूल की मूल निर्देशिका libexec/apache2/libphp5.soउस ServerRootनिर्देश द्वारा परिभाषित की गई है, जो डिफ़ॉल्ट रूप से आमतौर पर सेट किया जाता है /usr। मैं इसे बदलने की अनुशंसा नहीं करूंगा लेकिन किसी के लिए यह जानना उपयोगी हो सकता है कि वास्तव में वह मार्ग कहाँ परिभाषित है।

अपाचे की वेबसाइट ServerRoot के बारे में निम्नलिखित कहती है :

अन्य कॉन्फ़िगरेशन निर्देशों (जैसे कि शामिल करें या लोडमॉड्यूल, उदाहरण के लिए) में सापेक्ष पथ इस निर्देशिका के सापेक्ष लिया जाता है।

इसके अलावा डिफ़ॉल्ट httpd.conf फ़ाइल टिप्पणियाँ पढ़ें:

ServerRoot: डायरेक्टरी ट्री का शीर्ष जिसके नीचे सर्वर का कॉन्फ़िगरेशन, त्रुटि और लॉग फाइलें रखी जाती हैं।


2
ServerRoot की परिभाषा के बाद OP नहीं है। इसके बजाय उन्होंने सवाल पूछा है "मैं अपाचे को कैसे बताऊं जो PHP का उपयोग करना है?"। यदि आप वास्तव में इसका उत्तर देना चाहते हैं, तो इसका उत्तर दें
Pmpr

3

अपाचे "/ usr / libexec / httpd /" में मॉड्यूल की तलाश में होना चाहिए। वहां आपको "libphp5.so" नामक एक फ़ाइल या सिमिलिंक मिलेगी। यदि यह एक सिमलिंक है, तो आपको नए 5.2.8 libphp5.so पर रिंकल करना होगा, अन्यथा केवल 5.2.8 libphp5.so को "/ usr / libexec / httpd" पर कॉपी करें और "sudache apachectl पुनरारंभ" के साथ अपाचे को पुनरारंभ करें। ।


0

मेरे पास एक अपाचे और PHP एक सर्वर पर स्थापित था। यह पिछले sys व्यवस्थापक द्वारा स्थापित किया गया था। अपाचे और PHP दोनों को स्रोत से अनुपालन किया गया था। इसके अतिरिक्त एक डिफ़ॉल्ट PHP स्थापित था। तो यह जानने के लिए कि अपाचे द्वारा किस PHP का उपयोग किया जाता है। मैं नीचे कमांड चलाता हूं

   <Install Dir of PHP>/bin/php -i | grep apxs

इससे मुझे अपाचे लोगों को रास्ता मिला

  APACHE_HOME/bin/apxs

इसने मुझे जानकारी दी जिस पर अपाचे का उपयोग इस php द्वारा किया जा रहा है। जब मैंने टाइप किया तो डिफ़ॉल्ट php ने त्रुटि दी

#php -i | grep apxs 

 Failed loading opcache.so:  opcache.so: cannot open shared object file: No    such file or directory PHP Warning:  PHP Startup: Unable to load dynamic library     '<PHP_HOME>/lib/php/extensions/debug-non-zts-20121212/memcached.so' - <PHP_HOME>/lib/php/extensions/debug-non-zts-20121212/memcached.so: undefined symbol: OnUpdateLongGEZero in Unknown on line 0

तो इस तरह से मैं अपाचे द्वारा इस्तेमाल किए गए php का पता लगाने में सक्षम था।


1
कृपया एक ही उत्तर दो बार पोस्ट न करें। इसके बजाय, पहले उत्तर से लिंक करें।
स्वेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.