Wie kann ich Apache mitteilen, welches PHP verwendet werden soll?

34

Ich verwende Apache2 unter Mac OS X (10.5) . Ich habe gerade PHP 5.2.8 kompiliert und endlich pdo-mysqlfunktioniert (glaube ich).

Dieser Terminalbefehl:

php --version

zeigt 5.2.8 und ich habe die richtigen Module installiert.

Aber, wenn ich ein tun phpinfo(), Apache - Dumps aus PHP 5.2.6 (meiner früheren Version, ohne pdo_mysql).

Wie kann ich Apache mitteilen, welches PHP geladen werden soll? Der httpd.confhat die Zeile:

LoadModule php5_module        libexec/apache2/libphp5.so

Aber ich weiß nicht, was oder wo das ist.

Muss ich das ändern?

Sam McAfee
quelle
Als Sie PHP kompiliert haben, haben Sie make install verwendet? Wenn Sie den Pfad gefunden haben, auf den das Modul installiert wurde, und Ihre Apache-Konfiguration so geändert haben, dass sie darauf verweist. Auf dem Mac ist bereits eine eigene Version von Apache und Php5 installiert, weshalb Sie eine andere Version sehen.
Ruggs
Homebrew-Benutzer, siehe @ Mick Kommentar
BatteryAcid
1
Hast du dein Problem gelöst? ALLE Antworten sind einfach toll
Pmpr
Keine dieser Antworten beantwortet die Frage. Das ist bizarr ...
quant

Antworten:

14

Ich denke, all diese Antworten beantworten die Frage nicht wirklich. Die Root-Ebene kann durch Ausführen des Befehls festgelegt werden httpd -V. Hier sehen Sie, mit welchen Optionen der Apache-Daemon zur Kompilierungszeit erstellt wurde. Hier wird httpdfestgelegt, wo nach der Konfiguration gesucht werden soll. Dateien und .so-Module standardmäßig.

Beispielsweise:

% 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"

Die Schlüsselzeile in dieser Ausgabe ist die HTTPD_ROOT. Das legt fest, wo das ROOTVerzeichnis von Apache /etc/httpdbei der Suche nach config beginnen soll. Dateien und Module.

HINWEIS: Dies ROOTist nicht dasselbe wie DocumentRoot. Dies ROOTist spezifisch für die Art und Weise, wie der httpdDämon kompiliert wurde. Hier DocumentRootwird angegeben, wo der httpdDämon nach tatsächlichen Webinhalten (.html-Dateien usw.) suchen soll.

Für meine httpd.confDatei habe ich folgende Ladezeilen:

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

In diesem Fall wäre der vollständige Pfad zu Ihren Modulen zum Beispiel:

/etc/httpd/modules/mod_auth_basic.so

Dies ist von einem CentOS 5.x- System, aber die Technik ist immer noch geeignet.

Übrigens kann es etwas verwirrend werden, da die Dateien in CentOS hier physisch organisiert sind:

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

... und dann httpdüber diesen Pfad für den Apache-Daemon zugänglich :

% 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

Der modulesLink verbindet /etc/httpd-> /usr/lib/httpd/modules.

slm
quelle
slm wie im vorigen post angegeben, ist der server-root in der server-root-richtlinie definiert und hat überhaupt nichts mit httpd_root zu tun, das über "httpd-v" angezeigt wird. Besuchen Sie die Webseiten von Apache, auf die in meinem vorherigen Beitrag verwiesen wurde, oder sehen Sie selbst, ob Sie die ServerRoot-Direktive in Ihrer httpd.conf- Dateiändern möchten.
Billynoah
ServerRoot ist eine Möglichkeit, HTTPD_ROOT zu überschreiben. HTTPD_ROOT wird zur Kompilierungszeit über den Schalter --prefix configure festgelegt. Ihr Beitrag hat die verschiedenen s / w ServerRoot und DocumentRoot unterschieden. httpd.apache.org/docs/current/mod/core.html#serverroot . Schön, dass Sie einen Namen in Ihrem SF-Konto registriert haben!
SLM
Beantwortet dies wirklich die Frage: "Wie kann ich Apache mitteilen, welches PHP verwendet werden soll?" ?
Pmpr
Trix das OP hat es also ja angenommen.
Slm
@slm Dies beantwortet die Frage nicht.
Quant
4

Sie können Dateien auf Ihrem System mit dem folgenden locateBefehl finden:

# libphp5.so lokalisieren

Es werden die vollständigen Pfade aller Dateien mit diesem Namen gedruckt. Ich habe einen bei /usr/libexec/apache2/libphp5.so.

Rob Kennedy
quelle
1
Na und? Ist das eine Antwort auf die Frage? Oder eine Möglichkeit, eine Datei zu finden?
Pmpr
1
@Trix, sagte der Fragesteller, "Ich weiß nicht, was oder wo das ist." Ich habe gezeigt, wie man findet, wo das ist. Ich ging davon aus, dass, sobald der Fragesteller alle anderen Speicherorte der fraglichen Datei gesehen hat, es offensichtlich ist, wie die Einstellung geändert werden kann, um eine andere zu verwenden.
Rob Kennedy
4

Das übergeordnete Verzeichnis der in httpd.conf geladenen Module (z. B.:) libexec/apache2/libphp5.sowird durch die ServerRootDirektive definiert, die standardmäßig auf festgelegt ist /usr. Ich würde nicht empfehlen, dies zu ändern, aber es kann nützlich sein, zu wissen, wo genau dieser Pfad definiert ist.

Die Website von Apache sagt Folgendes über ServerRoot aus :

Relative Pfade in anderen Konfigurationsanweisungen (wie beispielsweise Include oder LoadModule) werden als relativ zu diesem Verzeichnis betrachtet.

Zusätzlich lauten die Standardkommentare der httpd.conf-Datei:

ServerRoot: Der Anfang der Verzeichnisstruktur, in der die Konfigurations-, Fehler- und Protokolldateien des Servers gespeichert sind.

billynoah
quelle
2
Das OP ist nicht nach einer Definition zu ServerRoot. Stattdessen hat er die Frage "Wie kann ich Apache mitteilen, welches PHP verwendet werden soll?" Gestellt. Wenn du es wirklich beantworten willst, dann beantworte es
Pmpr
3

Apache sollte nach Modulen in "/ usr / libexec / httpd /" suchen. Dort finden Sie entweder eine Datei oder einen Symlink namens "libphp5.so". Wenn es sich um einen Symlink handelt, müssen Sie erneut auf die neue 5.2.8 libphp5.so verlinken, andernfalls kopieren Sie die 5.2.8 libphp5.so nach "/ usr / libexec / httpd /" und starten Sie Apache mit "sudo apachectl restart" neu. .


quelle
0

Ich hatte einen Apache und PHP auf einem der Server installiert. Dies wurde vom vorherigen Sys-Administrator installiert. Sowohl der Apache als auch PHP wurden von der Quelle erfüllt. Zusätzlich wurde ein Standard-PHP installiert. So wissen Sie, welches PHP vom Apache verwendet wird. Ich führe den folgenden Befehl aus

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

Dies gab mir den Weg zu Apache Apxs

  APACHE_HOME/bin/apxs

Dies gab mir Informationen darüber, welcher Apache von dieser PHP verwendet wird. Die Standard-PHP gab Fehler, als ich tippte

#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

Auf diese Weise konnte ich herausfinden, welches PHP von Apache verwendet wird.

user2935688
quelle
1
Bitte posten Sie die gleiche Antwort nicht zweimal. Verlinken Sie stattdessen auf die erste Antwort.
Sven