Frage Wie sage ich Apache, welche PHP zu verwenden?


ich renne Apache2 auf einen Mac OS X (10.5). Ich habe gerade kompiliert PHP 5.2.8 und endlich bekommen pdo-mysql arbeiten (oder so denke ich).

Dieser Terminalbefehl:

php --version

zeigt 5.2.8 und ich habe die richtigen Module installiert.

Aber wenn ich a phpinfo(), Apache verschwindet PHP 5.2.6 (Meine frühere Version, ohne pdo_mysql).

Wie kann ich Apache mitteilen, welche PHP geladen werden soll? Das httpd.conf hat die Linie:

LoadModule php5_module        libexec/apache2/libphp5.so

Aber ich weiß nicht was oder wo das ist.

Muss ich das ändern?


32
2017-12-23 02:15


Ursprung


Wenn du PHP kompiliert hast, hast du make install benutzt? Wenn Sie den Pfad gefunden haben, in dem Ihr Modul installiert wurde, und ändern Sie Ihre Apache-Konfiguration, um darauf zu zeigen. Mac hat seine eigene Version von Apache und php5 bereits installiert, weshalb Sie eine andere Version sehen. - Ruggs
Sehen OSX Apache mit falscher PHP-Version - Mick
Homebrew Benutzer, siehe @Mick Kommentar - BatteryAcid
Hast du dein Problem gelöst? ALLE Antworten sind nur eine verrückte Sache - Trix


Antworten:


Ich denke, alle diese Antworten beantworten die Frage nicht wirklich. Die Root-Ebene kann durch Ausführen des Befehls bestimmt werden httpd -V. Dies zeigt Ihnen, mit welchen Optionen der Apache-Daemon zur Kompilierungszeit erstellt wurde. Dies steuert, wo httpd bestimmt, wo nach seiner Konfiguration gesucht wird. Dateien und .so-Module standardmäßig.

Zum Beispiel:

% 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 definiert, wo Apache ist ROOT Verzeichnis soll beginnen, /etc/httpd in meinem Fall, wenn Sie nach Config suchen. Dateien und Module.

HINWEIS: Diese ROOT ist nicht das Gleiche wie DocumentRoot. Diese ROOT ist spezifisch wie das httpd Daemon wurde kompiliert, die DocumentRoot gibt an, wo der httpd Der Daemon sollte anfangen, nach tatsächlichem Webinhalt (.html-Dateien und so weiter) zu suchen.

Für mein httpd.conf Datei Ich habe folgende Load-Zeilen:

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 beispielsweise:

/etc/httpd/modules/mod_auth_basic.so

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

Übrigens kann es ein wenig verwirrend sein, weil CentOS ' Falls die Dateien 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 zugänglich für den Apache-Daemon, httpd, durch diesen Weg:

% 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

Das modules Verbindung verbindet /etc/httpd -> /usr/lib/httpd/modules.


14
2018-01-17 02:02



slm Wie ich im vorherigen Post gesagt habe, ist der ServerRoot in der ServerRoot-Direktive definiert und hat überhaupt nichts mit HTTPD_ROOT zu tun, das über "httpd -V" angezeigt wird. Bitte konsultieren Sie die Webseiten von Apache, auf die ich in meinem vorherigen Beitrag Bezug genommen habe, oder wenn Sie die Anweisung ServerRoot in Ihrem ändern möchten httpd.conf Datei und sehen Sie selbst. - billynoah
ServerRoot ist eine Möglichkeit, HTTPD_ROOT zu überschreiben. HTTPD_ROOT wird zur Kompilierzeit über den --prefix configure-Schalter festgelegt. Ihr Beitrag unterschied die verschiedenen s / w ServerRoot und DocumentRoot. httpd.apache.org/docs/current/mod/core.html#serverroot. Schön, dass Sie sich mit Ihrem SF-Account einen Namen eingetragen haben! - slm
Beantwortet das wirklich die Frage: "Wie sage ich Apache, welche PHP zu verwenden?" ? - Trix
Trix der OP hat es ja akzeptiert. - slm


Sie können Dateien auf Ihrem System mit der finden locate Befehl:

# Lokalisieren libphp5.so

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


4
2017-12-23 03:14



Na und? Ist das eine Antwort auf die Frage? Oder eine Möglichkeit, eine Datei zu finden? - Trix
@Trix, der Fragesteller sagte: "Ich weiß nicht, was oder wo das ist." Ich habe gezeigt, wie man das findet. Ich nahm an, dass, sobald der Fragesteller alle anderen Orte der fraglichen Datei gesehen hat, es offensichtlich wäre, die Einstellung zu ändern, um eine andere zu verwenden. - Rob Kennedy


Das übergeordnete Verzeichnis der Module, die in httpd.conf geladen sind (zB: libexec/apache2/libphp5.so) ist definiert durch die ServerRoot Direktive, die standardmäßig auf /usr. Ich würde nicht empfehlen, dies zu ändern, aber es kann für jemanden nützlich sein, genau zu wissen, wo genau dieser Pfad definiert ist.

Die Webseite von Apache sagt folgendes ServerRoot:

Relative Pfade in anderen Konfigurationsanweisungen (z. B. Include oder   LoadModule, zum Beispiel) werden relativ zu diesem Verzeichnis genommen.

Zusätzlich lesen Sie die Standardkommandos der Datei httpd.conf:

ServerRoot: Der Anfang der Verzeichnisstruktur, unter der die Konfigurations-, Fehler- und Protokolldateien des Servers aufbewahrt werden.


4
2018-01-17 04:34



Das OP ist nicht nach einer Definition zu ServerRoot. Stattdessen hat er die Frage "Wie sage ich Apache, welche PHP zu verwenden?" Gestellt. Wenn du wirklich antworten willst, antworte ihm - Trix


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 Version 5.2.8 libphp5.so verweisen, andernfalls kopieren Sie einfach die Datei 5.2.8 libphp5.so nach "/ usr / libexec / httpd /" und starten Sie den Apache mit "sudo apachectl restart" neu. .


3
2017-12-23 03:11





Ich hatte einen Apache und PHP auf einem der Server installiert. Dies wurde vom vorherigen Systemadministrator installiert. Sowohl Apache als auch PHP wurden von der Quelle erfüllt. Zusätzlich wurde ein Standard-PHP installiert. So zu wissen, welche PHP von 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 diesem PHP verwendet wird. Der Standard-PHP gab einen Fehler, wenn 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 den von Apache verwendeten PHP herausfinden.


0
2018-03-27 22:09



Bitte nicht die gleiche Antwort zweimal posten. Verknüpfen Sie stattdessen die erste Antwort. - Sven♦