local devstack

H

heinetz

Aktives Mitglied
Thread Starter
Dabei seit
07.09.2007
Beiträge
695
Reaktionspunkte
13
Hallo Forum,

alle Jahre wieder muss ich hier mal um Hilfe fragen. Immer dann wenn mein lokalen Entwicklungssystem rumzickt. Das passiert nur alle Jubeljahre ... glücklicherweise.e

Also ...

Ich habe den apache, der mit OS X kommt deaktiviert und einen über homebrew installiert. Ausserdem dnsmasq, mysql und php. Zwischen mehreren PHP-Versionen schalte ich um mit diesem Script. Das funktioniert grundsätzlich wieder. Nun stecke ich aber gerade so tief in dem Thema und habe ausserdem die Zeit, um mich um die Dinge zu kümmern, die m.E. noch nicht ganz sauber sind. Vielleicht hat jemand Lust, mir zu helfen.

Ich Ändere die php-Version nach php@7.4, mit folgendem Konsolenbefehl:

Bash:
$ sphp 7.4

Das Script ändert ein paar Links, kommentiert in der httpd.conf Direktiven zum php_module ein und aus, und startet den Prozess httpd neu.
Es quittiert die Eingabe mit folgender Ausgabe:

Bash:
==> Successfully stopped `httpd` (label: homebrew.mxcl.httpd)
==> Successfully started `httpd` (label: homebrew.mxcl.httpd)

PHP 7.3.32 (cli) (built: Nov 16 2021 19:01:46) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.32, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.3.32, Copyright (c) 1999-2018, by Zend Technologies

Was auffällt ist, die ausgegebene PHP-Version (PHP 7.3.32). Es sieht erstmal so aus, als würde das Script nicht funktionieren. Wenn ich mir aber unter localhost phpinfo() ausgeben lasse, steht da PHP Version 7.4.25.

Das kann ja so nicht richtig sein, oder?

Ich habe nun auch noch folgendes in der Konsole ausprobiert:

Code:
php -v
PHP 7.3.32 (cli) (built: Nov 16 2021 19:01:46) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.32, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.3.32, Copyright (c) 1999-2018, by Zend Technologies

... und mit folgendem verglichen:

Code:
php-fpm -v
PHP 7.4.25 (fpm-fcgi) (built: Nov 11 2021 20:12:44)
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.25, Copyright (c), by Zend Technologies

Das dürfte die Erklärung sein. Ich finde ausserdem drei Prozesse php-fpm in meiner Aktivitätsanzeige. Aber was das mit dem php-fpm auf sich hat und ob das so richtig ist, kann ich nicht sagen. Irgendwie steht das wohl mit nginx im Zusammenhang. Aber nginx habe ich nie installiert.

beste gruesse,
heinetz
 
Mein Problem ist, ich sitze hier vor Ubuntu Rechnern - die Config ist also sicher anders.

Zu dem Grundsätzlichen kann ich Dir aber etwas erzählen:

Es gibt 3 Arten PHP zu verwenden:

- direkter Aufruf in der Shell (php-cli)
- Integration als Modul im Apache ( etwas langsamer, dafür stabiler)
- PHP separat vom Apache aufrufen lassen per CGI call, dass ist dann php-fpm

Dein Skript ändert offenbar die PHP Version im Apache und eben auch nur die!

Mit 'which php' müßtest Du heraus bekommen, welches binary da beim Aufruf von PHP in der shell gestartet wird. Vermutlich führt Dich das dann auch zu den anderen PHP Versionen.

Bei Ubuntu/Debian ist es so, dass man mit einem Befehl komplett alle drei Versionen austauscht. Vielleicht gibt es das bei Homebrew auch!?

EDIT: php-fpm zusammen mit nginx ist eine der schnelleren Varianten und daher verbreitet. Leider ist diese Variante aber nicht immer stabil und es können Laufzeitbedingt HTTP 500er auftreten ( https://www.php.net/manual/de/install.fpm.php ).

Üblicherweise haben alle drei Versionen von PHP eigene config Dateien (php.ini,...) damit man alle drei Bereich unabhäng voneinander betreiben kann. Bei mir unter Ubuntu sieht das dann so aus:


Code:
karsten@bilbo:~/Projekte/PhpstormProjects/real-digital/real/shop/shop$ ls /etc/php/
7.2  7.4  8.0  8.1
karsten@bilbo:~/Projekte/PhpstormProjects/real-digital/real/shop/shop$ ls /etc/php/8.0/
apache2  cli  mods-available
karsten@bilbo:~/Projekte/PhpstormProjects/real-digital/real/shop/shop$

Unterhalb von /etc/php sieht man also die installierten PHP Versionen und in jedem davon die config für Apache und CLI ( ich habe kein php-fpm in Verwendung).

Schaut man dann nach, wo die Befehle herkommen ergibt sich dieses hier:

Code:
karsten@bilbo:~/Projekte/PhpstormProjects/real-digital/real/shop/shop$ ls -la /usr/bin/php
lrwxrwxrwx 1 root root 21 Jul  7  2018 /usr/bin/php -> /etc/alternatives/php
karsten@bilbo:~/Projekte/PhpstormProjects/real-digital/real/shop/shop$ ls -la /etc/alternatives/php
lrwxrwxrwx 1 root root 15 Sep 28 18:37 /etc/alternatives/php -> /usr/bin/php7.4
karsten@bilbo:~/Projekte/PhpstormProjects/real-digital/real/shop/shop$

also der Befehl selbst wird auf den alternatives Mechanismus von Debian/Ubuntu gelinkt und von dort weiter auf die gerade verwendete Version. Ich gehe fest davon aus, dass das unter OS X nicht viel anders sein wird und das Dein Skript da auch nicht sehr viel anders arbeitet.
 
Zuletzt bearbeitet:
Dein Skript ändert offenbar die PHP Version im Apache und eben auch nur die!
Genauso scheint es zu sein.

Das andere, was das Script macht ist die Ausführung dieses Kommandozeilenebefehls:

Bash:
$ brew unlink php && brew link --overwrite --force php@7.4

Hab mal gegoogelt und es geht ganz offenbar völlig ohne Skripte ( die in dem verlinkten Artikel ohnehin als "fancy" bezeichnet werden). Probier einfach mal das hier aus:

https://snippets.khromov.se/switch-between-different-php-versions-on-mac-osx-using-homebrew/

Hier wird der selbe Kommendozeilenbefehl ohne --overwrite --force vorgeschlagen.

Egal ob ich das Script ausführe oder das Kommondo direkt im Terminal eingebe. Es führte zum selben falschen Ergebnis.

Bash:
which php

... hat geholfen. Eine Anpassung in der .bash_profile war's. Damit ist der Fehler behoben. Vielleicht probiere ich das mal mit nginx aus.

Danke und
gruss,
heinetz
 
  • Gefällt mir
Reaktionen: wegus
Für sowas böte sich auch die nix-shell an. Dann muß man nicht mit der Keule Docker, die auf macOS ja nochmal extra dick daher kommt, schwingen. Die nix-shell ist so etwas wie virtual-env, nur für alles im System, über alle Sprachen und Libs hinweg und ohne Abhängigkeitsprobleme. Netter Nebeneffekt: du kannst jemandem deine shell.nix-Datei geben und der bekommt garantiert exakt das gleiche Ergebnis. Kein "bei mir läuft es aber".

Einfach auf nixos.org runterscrollen zu den Examples. Das sollte in kürzester Zeit zeigen, ob es für einen interessant sein könnte.
 
Zurück
Oben Unten