Letztes Mal hat Apache httpd 2.4.46 auf Raspberry Pi durch Quellkompilierung erstellt. Dieses Mal ist es jedoch das Rückgrat des Webanwendungsservers in Apache. Führen Sie PHP 7.4 durch Quellenkompilierung ein (⑅ • ᴗ • ⑅)
--Webserverprogramm: Apache 2.4.46 + PHP 7.4.10 (Quellkompilierung) --Client: Windows10 Pro
--Benutzer als root installiert (bei meiner Überprüfung handelt es sich um ein Administratorkonto namens admin, das von sudo von dort aus verarbeitet wird)
Andere erforderliche Pakete werden mit den Standardpaketbefehlen der Distribution (dnf, apt usw.) installiert und müssen nicht einzeln heruntergeladen werden.
Zum Herunterladen können Sie auf die offizielle Website zugreifen, von dort herunterladen und per FTP übertragen oder mit wget abrufen, wenn Sie die URL der Download-Datei kennen, die Erfassungsmethode jedoch weggelassen wurde.
openSUSE15.1(RaspberryPi)
# zypper -n install libxml2-tools libxml2-devel sqlite3-devel oniguruma-devel
RaspberryPiOS(2020.08)
# apt-get -y install libxml2 libxml2-dev libsqlite3-dev libonig-dev
Bis zu PHP7.3 war es möglich, Multi-Byte-Zeichenfolgen ohne Verwendung von SQLite und der Demon-Car-Bibliothek zu installieren. In PHP7.4 wurde dies jedoch für die Quellkompilierung obligatorisch.
Das Kompilieren dauert ca. 30-40 Minuten. Da es größer als Apache ist, ist es möglicherweise besser, während der Kompilierung eine Pause mit einer Tasse Kaffee einzulegen (\ * ˘︶˘ \ *) ...: \ * ♡
# cd [php-7.4.10.tar.Verzeichnis, in dem sich gz befindet]
# tar xvzf php-7.4.10.tar.gz
# cd php-7.4.10/
# ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysqli --with-pdo-mysql --enable-mbregex --enable-mbstring
# make
# make test
--MySQL aktiviert PDO
"Make" und "make test" sind zeitaufwändige Befehle. Wenn unterwegs keine Fehler auftreten, ist die Kompilierung abgeschlossen, aber ** es liegt ein Problem mit dem Raspberry Pi-Betriebssystem vor. ** ** **
RaspberryPiOS(2020.08)
# make
/bin/bash /home/admin/php-7.4.10/libtool --silent --preserve-dup-deps --mode=compile cc -I/home/admin/php-7.4.10/ext/fileinfo/libmagic -Iext/fileinfo/ -I/home/admin/php-7.4.10/ext/fileinfo/ -DPHP_ATOM_INC -I/home/admin/php-7.4.10/include -I/home/admin/php-7.4.10/main -I/home/admin/php-7.4.10 -I/home/admin/php-7.4.10/ext/date/lib -I/usr/include/libxml2 -I/home/admin/php-7.4.10/ext/mbstring/libmbfl -I/home/admin/php-7.4.10/ext/mbstring/libmbfl/mbfl -I/usr/local/include -I/home/admin/php-7.4.10/TSRM -I/home/admin/php-7.4.10/Zend -D_REENTRANT -pthread -I/usr/include -g -O2 -fvisibility=hidden -pthread -Wall -Wno-strict-aliasing -DZTS -DZEND_SIGNALS -c /home/admin/php-7.4.10/ext/fileinfo/libmagic/apprentice.c -o ext/fileinfo/libmagic/apprentice.lo
cc: fatal error:Erzwungenes Beendigungssignal beendet Programm cc1
compilation terminated.
make: *** [Makefile:738: ext/fileinfo/libmagic/apprentice.lo]Fehler 1
Es wurde während der Erstellung wie folgt gewaltsam beendet (´ • ω • ̥`) PHP wird mit viel Verarbeitung erstellt, daher habe ich mich gefragt, warum nur Raspberry Pi OS ... und den freien Speicherplatz überprüft ...
RaspberryPiOS(2020.08)
# free
total used free shared buff/cache available
Mem: 948072 389256 367752 99504 191064 394740
Swap: 102396 102256 140
Ich habe festgestellt, dass in Raspberry Pi OS nur 100 MB Swap-Speicher und in Raspberry Pi nur 1 MB freier Speicherplatz vorhanden sind ... (openSUSE hatte 400 MB in Raspberry Pi)
Deshalb habe ich beschlossen, den Auslagerungsbereich zu vergrößern, um den virtuellen Speicher zu vergrößern. ** In Raspberry Pi OS wird Swap in dphys-swapfile anstelle von partition definiert **
RaspberryPiOS(2020.08)
# vi /etc/dphys-swapfile
CONF_SWAPSIZE=100 ← erhöhen
CONF_SWAPFACTOR=2 ← Stellen Sie die Vergrößerung ein
# reboot
In meinem Fall habe ich es auf 200 MB erhöht und die Vergrößerung auf 2 eingestellt. Ich habe neu gestartet und neu aufgebaut, und diesmal war es ein Erfolg! !! [Aber es scheint, dass der Build durch einen Neustart gut gelaufen ist]
Aber ** weitere Probleme sind aufgetreten **. Dieses Mal ist ein Ereignis aufgetreten, das einen Segmentierungsfehler in "make test" verursacht. Der Build sollte erfolgreich gewesen sein, aber der Test stürzte aufgrund einer Segmentierungsverletzung ab (in Windows als Anwendungsfehler bezeichnet). .. ..
Ich werde vorerst PHP ausführen, um herauszufinden, ob es ein Problem mit dem Testtool oder dem erstellten Modul gibt, also werde ich den Test aussetzen.
Installieren Sie, wenn die Kompilierung abgeschlossen ist.
# make install
Installing PHP SAPI module: apache2handler
/usr/local/apache2/build/instdso.sh SH_LIBTOOL='/opt/apr-1.7.0/build-1/libtool' libphp7.la /usr/local/apache2/modules
/opt/apr-1.7.0/build-1/libtool --mode=install install libphp7.la /usr/local/apache2/modules/
libtool: install: install .libs/libphp7.so /usr/local/apache2/modules/libphp7.so
libtool: install: install .libs/libphp7.lai /usr/local/apache2/modules/libphp7.la
libtool: warning: remember to run 'libtool --finish /home/admin/php-7.4.6/libs'
chmod 755 /usr/local/apache2/modules/libphp7.so
[activating module `php7' in /usr/local/apache2/conf/httpd.conf]
Installing shared extensions: /usr/local/lib/php/extensions/no-debug-zts-20190902/
Installing PHP CLI binary: /usr/local/bin/
Installing PHP CLI man page: /usr/local/php/man/man1/
Installing phpdbg binary: /usr/local/bin/
Installing phpdbg man page: /usr/local/php/man/man1/
Installing PHP CGI binary: /usr/local/bin/
Installing PHP CGI man page: /usr/local/php/man/man1/
Installing build environment: /usr/local/lib/php/build/
Installing header files: /usr/local/include/php/
Installing helper programs: /usr/local/bin/
program: phpize
program: php-config
Installing man pages: /usr/local/php/man/man1/
page: phpize.1
page: php-config.1
/home/admin/php-7.4.6/build/shtool install -c ext/phar/phar.phar /usr/local/bin
ln -s -f phar.phar /usr/local/bin/phar
Installing PDO headers: /usr/local/include/php/ext/pdo/
Einige der PHP-Bibliotheken befinden sich je nach Zweck an mehreren Orten, z. B. "/ usr / local / include / php /" und "/ usr / local / lib / php /". Außerdem befindet sich PHP 7.4.10 dieses Mal nicht in "/ usr / local / lib64 / php /", auch nicht in Raspeyes openSUSE, sondern an derselben Stelle wie andere Distributionen **. Ich weiß nicht warum, aber als ich PHP 7.4.10 + openSUSE 15.1 mit Raspeye implementierte, stellte ich vorerst fest, dass es nicht in lib64, sondern im lib-Verzeichnis abgelegt war.
Zu diesem Zeitpunkt werden ** PHP-DLLs (Dynamic Link Libraries, die externen Erweiterungsanwendungen entsprechen) automatisch im Apache-Ordner bereitgestellt **.
Erstellen Sie als Nächstes eine Kopie der PHP-Einstellungsdatei. Kopieren Sie zunächst die Datei php.ini in den PHP-Bibliotheksordner / usr / local / lib (einschließlich openSUSE) /.
# cp php.ini-development /usr/local/lib/php.ini
# ls -l /usr/local/lib
Insgesamt 328
-rw-r--r--1 Wurzel Wurzel 144402 24. Juni 12:34 libz.a
lrwxrwxrwx 1 Wurzel Wurzel 14 Juni 24 12:34 libz.so -> libz.so.1.2.11
lrwxrwxrwx 1 Wurzel Wurzel 14 Juni 24 12:34 libz.so.1 -> libz.so.1.2.11
-rwxr-xr-x 1 Wurzel Wurzel 113656 24. Juni 12:34 libz.so.1.2.11
drwxr-xr-x 4 Wurzel Wurzel 37 24. Juni 16:19 php
-rw-r--r--1 Wurzel Wurzel 72278 24. Juni 16:21 php.ini
drwxr-xr-x 2 Wurzel Wurzel 21 Juni 24 12:34 pkgconfig
Ich muss die PHP-Datei für Apache erkennbar machen, also bearbeite sie. Die PHP-DLL wird bei der Installation von PHP automatisch in httpd.conf geschrieben, sodass sie nicht hinzugefügt werden muss. Alles, was Sie auf der Seite httpd.conf tun müssen, ist, dass Apache den PHP-MIME-Typ erkennt.
# vi /usr/local/apache2/conf/httpd.conf
/usr/local/apache2/conf/httpd.conf
…
<IfModule dir_module>
DirectoryIndex index.html ← 「index.Fügen Sie "php" hinzu
</IfModule>
…
<IfModule mime_module>
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
…
AddType application/x-httpd-php .php ← Diese Zeile hinzufügen
</IfModule>
…
Ändern Sie die Einstellungen für den PHP-Zeichencode und die Referenzbibliothek.
# vi /usr/local/lib/php.ini
php.ini
#Da der Inhalt lang ist, werden nur diejenigen aufgelistet, die teilweise geändert wurden, und diejenigen, die geändert wurden. Semikolon";"Ist entfernt. "";Es wird beschrieben, einschließlich der Zeile, die Sie gerade entfernen
output_buffering = On
default_charset = "UTF-8"
include_path = ".:/usr/local/include/php:/usr/local/lib/php"
extension_dir = "/usr/local/include/php/ext"
date.timezone = Asia/Tokyo
mbstring.language = Japanese
mbstring.encoding_translation = Off
mbstring.detect_order = UTF-8, SJIS, EUC-JP, JIS, ASCII
mbstring.substitute_character = none
Erstellen Sie zunächst eine PHP-Seite zur Bestätigung.
# vi /usr/local/apache2/htdocs/phpi.php
phpi.php
<?php phpinfo(); ?>
Warum PHP-Dateien in / usr / local / apache2 / htdocs / ablegen? ?? Wenn Apache jedoch durch Quellkompilierung installiert wird, lautet der Standardspeicherordner für Webseitendaten "/ usr / local / apache2 / htdocs /". Nun, Sie können den Speicherort in httpd.conf ändern, aber dieses Mal werde ich ihn weglassen.
# systemctl stop httpd
# systemctl start httpd
# systemctl status httpd
Wenn Sie nicht neu starten, funktioniert Apache nicht mit dem geladenen PHP-Modul. Beenden Sie es also und starten Sie es neu. Stellen Sie danach sicher, dass es mit dem Status gestartet wird.
Das Bild oben stammt von einer virtuellen Maschine, aber Raspberry Pi zeigte eine ähnliche PHP-Info, sodass PHP einsatzbereit ist (\ * ˘ᗜ˘ \ *). ... Ich habe es einfach nicht getan, weil es mühsam ist, Bilder vorzubereiten. .. ..
Stellen Sie eine Verbindung zu MySQL her und stellen Sie den PHP-Web-App-Server der Datenbank zur Verfügung. ** MySQL wird in Raspeye nicht unterstützt **, daher kann es nicht einfach direkt aus dem Repository installiert werden, und selbst wenn es installiert ist, verkürzt es nur die Schreiblebensdauer der microSD, sodass ich beim nächsten Mal eine Verbindung zum MySQL-Server herstellen kann * Validieren *.