php
| php | CentOS7 | RockyLinux8 | RockyLinux9 | Ubuntu20.04 | Ubuntu22.04 | Ubuntu24.04 | 備考 |
| 8.x | - | - | 8.2.13 8.1.27 8.0.30 | - | 8.1 | 8.3 | 8.1は2023.11でEOL |
| 7.x | - | 7.4.33 7.3.20 7.2.24 | - | 7.4 | - | - | 7.0と7.1は 2024.06でEOL XDMoD10.5 7.2+で対応(8には未対応) |
| 5.x | 5.4.16 | - | - | - | - | - | すべてEOL XDMoD9.5/10.0/10.5 5.4+で対応 |
php/win7
php/win10
php/php7
php/Groonga
CentOS7において、/tmpにファイルを作らせるようなwebアプリをphpで作ったとする
<?php
touch("/tmp/sample");
?>その際、systemd経由で起動したhttpdだと「/tmp/sample」は作ってくれない
systemdにより「/tmp/systemd-private-XXXX/」に作られる。
回避するには
[root@c ~]# vi /lib/systemd/system/httpd.service
:
:
PrivateTmp=false
[Install]
WantedBy=multi-user.target
[root@c ~]#と「PrivateTmp」の値を「false」にする
1 2 3 4 5 6 | |
ブラウザの画面の操作で、サーバー上にプロセスを起動させ(バックグランド)、用が済んだらまたブラウザ操作でプロセスを止める。
画面側はボタンを用意して、それにajaxで非同期で別のurlを呼び出す。
1 2 3 4 5 6 7 8 | |
っで、呼び出されたstart.phpでは、入力値の整形とかを行ってphpのpcntl_fork()を使うためにCGIへ流す
pcntl_forkらはCGI/CLIでしか使えない。mod_phpからは使えないみたい
system("/usr/bin/php cgi.php ".$grid." ".$square."...);pcntl_forkを使うことで、現在使っているプロセスから子プロセスを作り出して、posix_setsidでセッションリーダーにさせる
詳しいことは良く分からないが、下記でapache httpdのプロセスとは関係なくなる....駄目でした。
cgroupで/system.slice/httpd.serviceに関連付けられているから無理みたい
pid = pcntl_fork();
if($pid == 0) {
posix_setsid();
$pid = pcntl_fork();
if($pid == 0) {
file_put_contents( "/tmp/inotify.ps" , posix_getpid() );
pcntl_exec( 'inotify' , array( $store, $run ));
}
}これでブラウザからinotifyプログラムを起動できて、そのpidは /tmp/inotify.ps に格納される。
あとはブラウザで/tmp/inotify.psを読み込んで、そのpidに対してkillを実行すればいいみたい。
CentOS7でリリースされているphpはphp5.4
ownCloud9.1を使おうとしたら、これが引っかかった。ownCloundはphp5.6が必要
ここではSoftware Collectionsを使ってphp5.6を使うことにした
[root@c ~]# yum install centos-release-scl
[root@c ~]# yum install rh-php56
[root@c ~]# scl enable rh-php56 bashこれでOK.
使い方は、sclコマンドを使ってパスを乗り換える感じでしょうか。
[illya@c ~]$ php -v
PHP 5.4.16 (cli) (built: Nov 6 2016 00:29:02)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
[illya@c ~]$
[illya@c ~]$ scl enable rh-php56 bash
[illya@c ~]$ which php
/opt/rh/rh-php56/root/usr/bin/php
[illya@c ~]$ php -v
PHP 5.6.25 (cli) (built: Oct 21 2016 18:00:07)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
[illya@c ~]$っでphp-5.6を使えるのだが、正直スマートではない気がする....
現行のhttpdにロードされているモジュール(php5_module)を差し替えるか、FastCGI系に移るかとなる。
既存のhttpdに手を加えたくないなら、FastCGI系で対処する
留意提供しているサービスが、FastCGI系に対応しているのならこれ
ここで使っているpukiwikiは、このFastCGI系を使うとユーザ認証ができなくなるみたいで、次項の方法にした
まずは、php-5.6のfpm版をインストールします
PHP-FPM (FastCGI Process Manager)
[root@c ~]# yum install rh-php56-php-fpm次に、httpdの設定ファイルを修正して、php-5.6 fpmのデーモンを稼動させ、httpdを再起動させる
[root@c ~]# diff /etc/httpd/conf.d/php.conf.orig /etc/httpd/conf.d/php.conf
5c5
< SetHandler application/x-httpd-php
---
> SetHandler "proxy:fcgi://127.0.0.1:9000"
[root@c ~]#
[root@c ~]# systemctl enable rh-php56-php-fpm
[root@c ~]# systemctl start rh-php56-php-fpm
[root@c ~]# systemctl restart httpdその後、コンテンツにphpinfoを表示させるページを儲けて閲覧して確認する

FastCGI系を利用せず、従来のモジュール形式で行いたいのなら、別のhttpdの切り替えか、httpdはそのままにphp-5.6をコンパイルする必要がある。
phpのコンパイルは簡単だが、一方でyumでモジュール管理できなくなる。
ここでは別のhttpdを入れて従来どおりyumで管理する方法を示す
[root@c ~]# yum install rh-php56-php httpd24-httpd
[root@c ~]# systemctl stop httpd.service
[root@c ~]# systemctl disable httpd.serviceこれで旧環境は停止。次に新環境の整備。
[root@c ~]# cp -i /etc/httpd/conf.d/*.conf /opt/rh/httpd24/root/etc/httpd/conf.d/
(名前が重複するファイルは移さない)
[root@c ~]# vi /opt/rh/httpd24/root/etc/httpd/conf/httpd.conf
:
<Directory "/var/www">
AllowOverride None
# Allow open access:
Require all granted
</Directory>
:
[root@c ~]#
(従来のコンテンツへのアクセスを許可させる)その後に
[root@c ~]# systemctl start httpd24-httpd.service
[root@c ~]# systemctl enable httpd24-httpd.serviceとする

sclを使う方法もいいのだが、、やっぱり面倒。httpdも標準品を使いたいなら
phpをソースからコンパイルして使えるようにするしかない。
ここではモノシリックで作ってます
シンボリックリンクの作成はldap向けで、これがないとエラーで作れない
[root@owncloud ~]# yum install httpd-devel httpd postgresql postgresql-devel libxml2-devel gd-devel openssl-devel \
bzip2-devel t1lib-devel gmp-devel pcre-devel cyrus-sasl-ldap libzip
[root@owncloud ~]# ln -s /usr/lib64/libldap.so /usr/lib/libldap.so
[root@owncloud ~]# ln -s /usr/lib64/libldap_r.so /usr/lib/libldap_r.so
[root@owncloud ~]# ln -s /usr/lib64/liblber.so /usr/lib/liblber.so[root@owncloud ~]# mkdir src && cd $_
[root@owncloud src]# (phpのソースファイルを入手)
[root@owncloud src]# bzip2 -cd php-5.6.30.tar.bz2 | tar xf - && cd php-5.6.30
[root@owncloud php-5.6.30]#
[root@owncloud php-5.6.30]# ./configure \
--prefix=/opt/php \
--disable-debug \
--with-pic \
--disable-rpath \
--without-pear \
--with-bz2 \
--with-freetype-dir=/usr \
--with-png-dir=/usr \
--with-xpm-dir=/usr \
--enable-gd-native-ttf \
--with-t1lib=/usr \
--without-gdbm \
--with-gettext \
--with-gmp \
--with-iconv \
--with-jpeg-dir=/usr \
--with-openssl \
--with-pcre-regex \
--with-zlib \
--enable-exif \
--enable-ftp \
--enable-sockets \
--with-kerberos \
--enable-shmop \
--enable-calendar \
--with-libxml-dir=/usr \
--enable-xml \
--with-mhash \
--with-apxs2 \
--enable-mbstring \
--enable-mbregex \
--with-pdo-pgsql \
--with-pgsql \
--with-gd \
--enable-zip \
--with-curl \
--with-ldap --with-ldap-sasl --enable-pcntl
[root@owncloud php-5.6.30]# make && make test && make install
[root@owncloud php-5.6.30]# cp php.ini-development /opt/php/lib/php.ini
[root@owncloud php-5.6.30]# vi /opt/php/lib/php.ini
:
date.timezone = 'Asia/Tokyo'
:
[root@owncloud php-5.6.30]#/usr/lib64/httpd/modules に「libphp5.so」がインストールされる
/etc/httpd/conf/httpd.confに
LoadModule php5_module /usr/lib64/httpd/modules/libphp5.soが追記される。その辺りに
AddType application/x-httpd-php .phpを加えてhttpdを再起動する
単にpdoをインストールすれば一緒に入るみたい。あとhttpdの再起動が必要みたい
[root@c ~]# yum install php-pdo
[root@c ~]# rpm -qali |less
:
Name : php-pdo
Version : 5.4.16
Release : 36.3.el7_2
Architecture: x86_64
Install Date: 2016年09月07日 17時18分01秒
Group : Development/Languages
Size : 196979
License : PHP
Signature : RSA/SHA256, 2016年08月12日 19時37分17秒, Key ID 24c6a8a7f4a80eb5
Source RPM : php-5.4.16-36.3.el7_2.src.rpm
Build Date : 2016年08月12日 06時33分19秒
Build Host : worker1.bsys.centos.org
Relocations : (not relocatable)
Packager : CentOS BuildSystem <http://bugs.centos.org>
Vendor : CentOS
URL : http://www.php.net/
Summary : A database access abstraction module for PHP applications
Description :
The php-pdo package contains a dynamic shared object that will add
a database access abstraction layer to PHP. This module provides
a common interface for accessing MySQL, PostgreSQL or other
databases.
/etc/php.d/pdo.ini
/etc/php.d/pdo_sqlite.ini
/etc/php.d/sqlite3.ini
/usr/lib64/php/modules/pdo.so
/usr/lib64/php/modules/pdo_sqlite.so
/usr/lib64/php/modules/sqlite3.so
:
[root@c ~]#imagickを使いたいので
[root@c ~]# yum install php-pear php-devel ImageMagick-develの後で
[root@c ~]# pecl install imagickとします。そして、php.iniに反映させるために
[root@c ~]# vi /etc/php.d/imagic.ini
extension=imagick.so
[root@c ~]#とします
確認はphp -iにて
imagick
imagick module => enabled
imagick module version => 3.4.3
imagick classes => Imagick, ImagickDraw, ImagickPixel, ImagickPixelIterator
Imagick compiled with ImageMagick version => ImageMagick 6.7.8-9 2016-06-16 Q16 http://www.imagemagick.org
Imagick using ImageMagick library version => ImageMagick 6.7.8-9 2016-06-16 Q16 http://www.imagemagick.org
ImageMagick copyright => Copyright (C) 1999-2012 ImageMagick Studio LLC
ImageMagick release date => 2016-06-16
ImageMagick number of supported formats: => 209
ImageMagick supported formats => 3FR, A, AAI, AI,(略) TIFF, TIFF64, TILE, (略