PHP

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page PHP and the translation is 100% complete.
Resources
#php (webchat)(registration required)

A PHP egy általános célú, szerveroldali szkriptnyelv dinamikus weboldalak készítéséhez. Fejlesztése 1993-ban kezdődött, és hivatalosan 1995-ben került elsőként kiadásra. Az ezredfordulóra a PHP elkezdte kiszorítani a Perl nyelvet mint a LAMP stack preferált "P" betűjét, mielőtt a Python felmerült volna kihívóként. Ennek ellenére a PHP továbbra is népszerű szerveroldali szkriptnyelv dinamikus weboldalak és webalkalmazások számára, nem utolsósorban a WordPress blogplatform népszerűségének köszönhetően.

Telepítés

USE jelölőzászlók

A PHP szoftvercsomag legfontosabb USE jelölőzászlói, a SAPI (Server API) USE jelölőzászlók, amelyek a következők: apache2, cgi és fpm. Ezen jelölőzászlók mellett létezik egy részletes lista a jelölőzászlókról, amelyek lehetővé teszik a PHP értelmező különféle tulajdonságait:

USE flags for dev-lang/php The PHP language runtime engine

+cli Enable the Command-Line Interface (CLI) SAPI
+ctype Enable the Character type checking (ctype) extension
+fileinfo Enable the File Information extension
+filter Enable the Data Filtering extension
+flatfile Add dbm support for flat files
+iconv Enable support for the iconv character set conversion library
+jit Enable PCRE JIT support
+opcache Enables built-in opcode cache, replacing pecl-apc et al.
+opcache-jit Enable Just In Time (JIT) compilation within the opcache extension
+phar Enables the phar extension to provide phar archive support
+posix Add support for POSIX-compatible functions
+session Add persistent session support
+simplexml Enable the SimpleXML extension
+tokenizer Add support for the PHP file parser
+xml Add support for XML files
acl Add support for Access Control Lists
apache2 Add Apache2 support
apparmor Support FPM application confinement through sys-libs/libapparmor
argon2 Enable password hashing algorithm from app-crypt/argon2
avif Add AV1 Image Format (AVIF) support
bcmath Enable the BCMath Arbitrary Precision Mathematics extension
berkdb Add support for sys-libs/db (Berkeley DB for MySQL)
bzip2 Enable bzip2 compression support
calendar Add support for calendars (not using mcal!)
capstone Support opcache JIT disassembly through dev-libs/capstone
cdb Add support for the CDB database engine from the author of qmail
cgi Add CGI script support
cjk Add support for Multi-byte character languages (Chinese, Japanese, Korean)
curl Add support for client-side URL transfer library
debug Enable extra debug codepaths, like asserts and extra output. If you want to get meaningful backtraces see https://wiki.gentoo.org/wiki/Project:Quality_Assurance/Backtraces
embed Enable embed SAPI
enchant Enable the Enchant spelling library extension using app-text/enchant
exif Add support for reading EXIF headers from JPEG and TIFF images
ffi Enable the Foreign Function Interface (FFI) extension using dev-libs/libffi
firebird Add support for the Firebird relational database
fpm Enable the FastCGI Process Manager SAPI
ftp Add FTP (File Transfer Protocol) support
gd Enable the Image Processing and GD extension (requires media-libs/libjpeg-turbo and media-libs/libpng)
gdbm Add support for sys-libs/gdbm (GNU database libraries)
gmp Add support for dev-libs/gmp (GNU MP library)
imap Add support for IMAP (Internet Mail Application Protocol)
inifile Add dbm support for .ini files
intl Enables the intl extension for extended internalization support
iodbc Add support for iODBC library
ipv6 Support IPv6 connectivity in fopen and friends, and v6 address conversions in functions like inet_pton and inet_ntop.
jpeg Add JPEG image support
kerberos Add kerberos support
ldap Add LDAP support (Lightweight Directory Access Protocol)
ldap-sasl Add SASL support for the PHP LDAP extension using dev-libs/cyrus-sasl
libedit Use the libedit library (replacement for readline)
lmdb Enable support for dev-db/lmdb db backend
mhash Add support for the mhash library
mssql Add support for Microsoft SQL Server database
mysql Add mySQL Database support
mysqli Add support for the improved mySQL libraries
nls Add Native Language Support (using gettext - GNU locale utilities)
oci8-instant-client Use dev-db/oracle-instantclient-basic as Oracle provider instead of requiring a full Oracle server install
odbc Add ODBC Support (Open DataBase Connectivity)
pcntl Enable the Process Control extension
pdo Enable the PHP Data Objects extension
phpdbg Enable the PHP Debug Command Line SAPI (like gdb for php)
png Add support for libpng (PNG images)
postgres Add support for the postgresql database
qdbm Add support for the qdbm (Quick Database Manager) library
readline Enable support for libreadline, a GNU line-editing library that almost everyone wants
selinux !!internal use only!! Security Enhanced Linux support, this must be set by the selinux profile or breakage will occur
session-mm Include dev-libs/mm support for session storage
sharedmem Enable the shmop extension
snmp Add support for the Simple Network Management Protocol if available
soap Add support for SOAP (Simple Object Access Protocol)
sockets Add support for tcp/ip sockets
sodium Enable support for crypto through dev-libs/libsodium
spell Add dictionary support
sqlite Add support for sqlite - embedded sql database
ssl Add support for SSL/TLS connections (Secure Socket Layer / Transport Layer Security)
systemd Enable use of systemd-specific libraries and features like socket activation or session tracking
sysvipc Enable the PHP System-V semaphore, shared memory and IPC extension
test Enable dependencies and/or preparations necessary to run tests (usually controlled by FEATURES=test but can be toggled independently)
threads Add threads support for various packages. Usually pthreads
tidy Add support for HTML Tidy
tokyocabinet Enable support for dev-db/tokyocabinet db backend
truetype Add support for FreeType and/or FreeType2 fonts
unicode Add support for Unicode
valgrind Enable annotations for accuracy. May slow down runtime slightly. Safe to use even if not currently using dev-debug/valgrind
webp Add support for the WebP image format
xmlreader Enable the XMLReader extension
xmlwriter Enable the XMLWriter extension
xpm Add support for XPM graphics format
xslt Build the XSL extension
zip Enable support for ZIP archives
zlib Add support for zlib compression

Az ebuild egy módosított "production" verziót telepít a php.ini fájlból, amely szigorúbb biztonsági beállításokat tartalmaz, és az alapértelmezett útvonalakat a Gentoo rendszerekhez igazítja. Mind a upstream "production", mind a "development" php.ini fájlok a /usr/share/doc/php-* könyvtárba kerülnek telepítésre.

Kiterjesztések

A kiterjesztések telepítéséhez először döntse el, hogy mely PHP verziókhoz kívánja lefordítani a kiterjesztéseket. Ezt a PHP_TARGETS változó beállításával teheti meg:

FILE /etc/portage/make.conf
PHP_TARGETS="php5-6"

Több verzió is meghatározható, csak adja hozzá a további verziókat szóközzel elválasztva. Vegye figyelembe, hogy a php slot neve "5.6", és az ennek megfelelően a PHP_TARGETS változó értéke php5-6. Ez a jelenlegi korlátozások miatt van a USE nevek esetében.

Emerge

A fentiekben említett USE jelölőzászló beállítások elvégzése után frissíteni kell a rendszert, hogy a változások érvénybe lépjenek:

root #emerge --ask --update --changed-use --deep @world

Több PHP verzió futtatása

A Gentoo PHP fejlesztéshez való használatának egyik nagy előnye a verzió helyfoglalás. Nagyon egyszerű váltani a PHP több verziója között, valamint egyszerű több verziót egyidejűleg futtatni. Ezt mind a eselect paranccsal lehet elvégezni, amelyet a app-eselect/eselect-php szoftvercsomag biztosít, amelynek automatikusan települnie kell a PHP telepítése során.

Például, a különböző PHP verziók kiválasztása lehetővé teszi a rendszer számára, hogy a cli SAPI számára a PHP 7.0 verziót futtassa, míg a rendszer webszerveréhez a PHP 5.6 verziót használja. Ez lehetővé teszi a rendszergazdák vagy az alkalmazásfejlesztők számára, hogy gyorsan teszteljék az alkalmazásokat különböző PHP verziókon.

A cli SAPI modul elérhető verzióinak listázásához használja a következő szintaxist:

root #eselect php list cli
 [1]   php5.5 
 [2]   php5.6 *   
 [3]   php7.0

A * (csillag) jelöli az aktuálisan aktív verziót a kiválasztott modulhoz. Az egyéb SAPIs ellenőrzéséhez egyszerűen cserélje ki a cli modult a fpm, cgi, vagy apache2 modulokkal.

A verziók cseréjéhez használja a következő parancsot:

root #eselect php set cli 3

A jelen példában a 3 szám megfelel a fenti list alparancs kimenetében szereplő számnak. Mostantól a PHP 7.0 verziót használjuk a parancssorhoz:

root #php -v
PHP 7.0.10-pl0-gentoo (cli) (built: Aug 23 2016 12:38:44) ( NTS )

Beállítás

A PHP beállítás a /etc/php útvonalon található, amely minden egyes szerver API (SAPI) és minden egyes PHP verzió számára egy alkönyvtárat tartalmaz. Például a PHP-5.6 apache2 SAPI beállítás fájljai a /etc/php/apache2-php5.6 könyvtárban kerülnek telepítésre.

Webszerverek

A PHP szerveroldali használatához telepíteni kell és be kell állítani egy webszervert, amely képes PHP-t futtatni. Az alábbiakban röviden áttekintjük a népszerű webszervereket.

Nginx

Az nginx telepítésesének érdekében egyszerűen csak használja az emerge parancsot:

root #emerge --ask www-servers/nginx
Important
Ha az egyéni NGINX_MODULES_HTTP értékek be vannak állítva a make.conf fájlban, akkor győződjön meg arról, hogy a fastcgi modul engedélyezve van.

Az Nginx telepítése után módosítsa a /etc/nginx/nginx.conf fájl szerver szekcióját, hogy valami ilyesmi legyen:

FILE /etc/nginx/nginx.confAz nginx beállításának egy része a PHP FastCGI használatához
server {
                listen 127.0.0.1;
                server_name localhost;
 
                access_log /var/log/nginx/localhost.access_log main;
                error_log /var/log/nginx/localhost.error_log info;
 
                root /var/www/localhost/htdocs;
 
                location ~ \.php$ {
                        try_files $uri $uri/ =404;
                        fastcgi_split_path_info ^(.+\.php)(/.+)$;
                        fastcgi_pass 127.0.0.1:9000;
                        include fastcgi.conf;
                }
        }

Most indítsa el a kapcsolódó szolgáltatásokat, hogy működő webhelyet kapjon. A php-fpm init szkript elindítja a PHP FastCGI Process Manager-t. A FastCGI lehetővé teszi a webszerverek számára, hogy a PHP számításokat erre a folyamatkezelőre terheljék át.

Amikor az OpenRC szolgáltatáskezelőként fut:

root #rc-service nginx start
root #rc-service php-fpm start

A systemd számára:

root #systemctl start nginx
root #systemctl start php-fpm@7.2
Note
A php-fpm szolgáltatás nevében lévő verziószám a PHP elérhető verziója alapján változik. Ennek megfelelően állítsa be.

lighttpd

Warning
Ne engedélyezze a php USE jelölőzászlót a www-servers/lighttpd számára. Ez ténylegesen megbonthatja a buildet.

Győződjön meg arról, hogy a lighttpd esetében a php USE jelölőzászló le van tiltva:

FILE /etc/portage/package.use
www-servers/lighttpd -php

A Lighttpd alapértelmezett FastCGI beállítás fájllal érkezik, de sajnos ez csak a régi PHP FCGI SAPI-val működik, nem pedig egy általános FCGI beállítással. Mivel a php USE jelölőzászló le lett tiltva, ezért nem lesz beépítve, és ez így helyes. Ugyanakkor jó alapot nyújt egy beállítás fájlhoz, amely használható az FPM-el.

Szerkessze a /etc/lighttpd/mod_fastcgi.conf fájlt, hogy valami ilyesmi legyen:

FILE /etc/lighttpd/mod_fastcgi.confFastCGI engedélyezése a lighttpd esetében
server.modules += ("mod_fastcgi")
fastcgi.server = ( ".php" =>
  ( "localhost" =>
    (
      "host" => "127.0.0.1",
      "port" => "9000"
    )
  )
)

Figyelje meg a host és port részeket.

Mivel a Gentoo működő php-fpm.ini fájllal érkezik, amely a /etc/php/fpm-php5/php-fpm.ini útvonalon található, valamint init szkript is elérhető, ezért csak el kell indítani a szolgáltatásokat:

root #/etc/init.d/php-fpm start
root #/etc/init.d/lighttpd start

Apache (mod_php)

Az Apache beállításához, hogy betöltse a PHP5 modult (mod_php), adja hozzá a -D PHP értéket az APACHE2_OPTS változóhoz a /etc/conf.d/apache2 fájlban. A felhasználók emlékezhetnek rá, hogy korábban a PHP verziót is hozzá kellett adni (például -D PHP5). Azonban a app-eselect/eselect-php 0.8.1 verziója óta a változó megváltozott csak -D PHP értékre, hogy a jövőbeli főbb verziók könnyen integrálhatók legyenek.

FILE /etc/conf.d/apache2Apache beállítása a mod_php betöltéséhez
## (settings for PHP5 and above)
APACHE2_OPTS="-D PHP"

Győződjön meg arról, hogy a PHP szoftvercsomag az apache2 USE jelölőzászlóval van létrehozva.

Ha valamilyen okból a rendszerből hiányzik a PHP modul integrációs fájl /etc/apache2/modules.d/70_mod_php.conf, amelyet a app-eselect/eselect-php biztosít, ha az apache2 USE jelölőzászló be van állítva, akkor manuálisan illessze azt be. Az aktuális tartalma az alábbiakban látható.

FILE /etc/apache2/modules.d/70_mod_php.conf
<IfDefine PHP>
	# The mod_php.so symlink is controlled by
	# eselect-php. However, the module name changed from
	# php5_module to php7_module so we can't blindly load whatever
	# is there. Instead we let eselect-php manage a small
	# configuration file that loads the appropriate module.
	Include "/var/lib/eselect-php/mod_php.conf"
 
	# Tell apache that mod_php should handle PHP files.
	#
	# NOTE: Avoiding AddHandler/AddType for security (bug
	# #538822). Please read the related news item!
	<FilesMatch "\.(php|php[57]|phtml)$">
		SetHandler application/x-httpd-php
	</FilesMatch>
 
	# PHP source files which are meant to be displayed as
	# syntax-highlighted source code.
	<FilesMatch "\.phps$">
		SetHandler application/x-httpd-php-source
	</FilesMatch>
 
	DirectoryIndex index.php index.phtml
</IfDefine>

Bár egy operációs rendszeren több PHP verzió is telepíthető, az Apache csak egyetlen PHP verziót tud használni a mod_php modullal. Az Apache több PHP verziójának támogatása fpm segítségével érhető el. Az eselect php parancs a használatos az aktív mod PHP verziók közötti váltáshoz.

A PHP verziójának megváltoztatásához, amelyet az Apache kezel, először listázza az elérhető verziókat az apache2 Szerver Alkalmazás Programozási Interfész (SAPI) számára:

root #eselect php list apache2
 [1]   php5.3
 [2]   php5.4 *
 [3]   php5.5

Cserélje ki a kívánt verzióra:

root #eselect php set apache2 N

Helyettesítse a fenti példában az N jelölést a korábban megjelenített eselect php list apache2 kimenetben szereplő kívánt számmal.

A PHP modul működésének ellenőrzéséhez hozzon létre egy tesztoldalt:

FILE /var/www/localhost/htdocs/index.phpPHP tesztoldal
<html>
 <body>
  <?php phpinfo(); ?>
 </body>
</html>

Most fojtsa el vagy nevezze át a /var/www/localhost/htdocs/index.html fájlt, és nyissa meg a tesztoldalt: http://localhost/

Egy táblázatnak kell megjelennie, amely leírja a PHP beállításokat.

Apache (fcgid)

Tekintse meg a PHP engedélyezése az fcgid segítségével bekezdést az Apache cikkben.

Apache (mod_proxy_fcgi)

Tekintse meg a PHP-FPM engedélyezése a mod_proxy_fcgi használatán keresztül az Apache 2.4 webszerverben részt.

További olvasnivaló a témában

  • Upgrading to PHP 5.6 - Útmutató a régebbi telepítések 5.6-ra való frissítéséhez.
  • Upgrading to PHP 7.1 - Útmutató a régebbi telepítések 7.1-re való frissítéséhez.
  • Enabling PHP support - Az Apache cikkben.
  • Perl — a general purpose interpreted programming language with a powerful regular expression engine.
  • Python — an extremely popular cross-platform object oriented programming language.

Külső források