我需要帮助完整安装PHP7(ZTS)+ Pthreads.我尝试了以下安装,但无法使其正常工作.
sudo -i
apt-get update
apt-get install -y git bison autoconf build-essential pkg-config gitcore libltdl-dev libbz2-dev libxml2-dev libxslt1-dev libssl-dev libicu-dev libpspell-dev libenchant-dev libmcrypt-dev libpng-dev libjpeg8-dev libfreetype6-dev libmysqlclient-dev libreadline-dev libcurl4-openssl-dev
mkdir /etc/php7
mkdir /etc/php7/cli
cd /usr/local/src
git clone https://github.com/php/php-src.git --depth=1
cd php-src/ext
git clone https://github.com/krakjoe/pthreads -b master pthreads
cd ..
./buildconf --force
php_configure_args="--prefix=/etc/php7 --with-config-file-path=/etc/php7/cli --with-config-file-scan-dir=/etc/php7/cli/conf.d --with-bz2 --with-zlib --enable-zip --with-mcrypt --with-openssl --with-curl --enable-ftp --with-mysqli --enable-sockets --enable-pcntl --with-pspell --with-enchant --with-gettext --with-gd --enable-exif --with-jpeg-dir --with-png-dir --with-freetype-dir --with-xsl --enable-bcmath --enable-mbstring --enable-calendar --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-maintainer-zts --enable-debug --enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data --enable-cli --enable-pthreads=shared --with-tsrm-pthreads"
./configure $php_configure_args
make && make install
cd /usr/local/src/php-src/ext/intl*
chmod a+x /etc/php7/bin/php-config
chmod a+x /etc/php7/bin/phpize
/etc/php7/bin/phpize
./configure --enable-intl --with-icu-dir=/usr --prefix='/etc/php7' --with-libdir='/lib/x86_64-linux-gnu' --with-php-config='/etc/php7/bin/php-config'
make && make install
cp /usr/local/src/php-src/php.ini-production /etc/php7/cli/php.ini
ln --symbolic /etc/php7/bin/php /usr/bin/php
ln --symbolic /etc/php7/sbin/php-fpm /usr/sbin/php7-fpm
echo 'zend_extension=opcache.so' >> /etc/php7/cli/php.ini
echo 'extension=pthreads.so' >> /etc/php7/cli/php-cli.ini
echo "extension=intl.so" >> /etc/php7/cli/php.ini
Run Code Online (Sandbox Code Playgroud)
FPM配置.1)/etc/init.d/php7-fpm
#!/bin/sh
### BEGIN INIT INFO
# Provides: php-fpm php7-fpm
# Required-Start: $remote_fs $network
# Required-Stop: $remote_fs $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts php7-fpm
# Description: Starts The PHP FastCGI Process Manager Daemon
### END INIT INFO
# Author: Ondrej Sury <ondrej@debian.org>
# Adapted to php7-fpm by @bjornjohansen
PATH=/usr/sbin
DESC="PHP7 FastCGI Process Manager"
NAME=php7-fpm
DAEMON=/usr/sbin/$NAME
DAEMON_ARGS="--daemonize --fpm-config /etc/php7/etc/php-fpm.conf"
PIDFILE=/var/run/php7-fpm.pid
TIMEOUT=30
SCRIPTNAME=/etc/init.d/$NAME
# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0
# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh
# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions
# Don't run if we are running upstart
if init_is_upstart; then
exit 1
fi
#
# Function to check the correctness of the config file
#
do_check()
{
/usr/local/lib/php7-fpm-checkconf || return 1
return 0
}
#
# Function that starts the daemon/service
#
do_start()
{
# Return
# 0 if daemon has been started
# 1 if daemon was already running
# 2 if daemon could not be started
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
|| return 1
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
$DAEMON_ARGS 2>/dev/null \
|| return 2
# Add code here, if necessary, that waits for the process to be ready
# to handle requests from services started subsequently which depend
# on this one. As a last resort, sleep for some time.
}
#
# Function that stops the daemon/service
#
do_stop()
{
# Return
# 0 if daemon has been stopped
# 1 if daemon was already stopped
# 2 if daemon could not be stopped
# other if a failure occurred
start-stop-daemon --stop --quiet --retry=QUIT/$TIMEOUT/TERM/5/KILL/5 --pidfile $PIDFILE --name $NAME
RETVAL="$?"
[ "$RETVAL" = 2 ] && return 2
# Wait for children to finish too if this is a daemon that forks
# and if the daemon is only ever run from this initscript.
# If the above conditions are not satisfied then add some other code
# that waits for the process to drop all resources that could be
# needed by services started subsequently. A last resort is to
# sleep for some time.
start-stop-daemon --stop --quiet --oknodo -- retry=0/30/TERM/5/KILL/5 --exec $DAEMON
[ "$?" = 2 ] && return 2
# Many daemons don't delete their pidfiles when they exit.
rm -f $PIDFILE
return "$RETVAL"
}
#
# Function that sends a SIGHUP to the daemon/service
#
do_reload() {
#
# If the daemon can reload its configuration without
# restarting (for example, when it is sent a SIGHUP),
# then implement that here.
#
start-stop-daemon --stop --signal USR2 --quiet --pidfile $PIDFILE --name $NAME
return 0
}
case "$1" in
start)
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
do_check $VERBOSE
case "$?" in
0)
do_start
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
1) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
stop)
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
do_stop
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
status)
status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
;;
check)
do_check yes
;;
reload|force-reload)
log_daemon_msg "Reloading $DESC" "$NAME"
do_reload
log_end_msg $?
;;
reopen-logs)
log_daemon_msg "Reopening $DESC logs" $NAME
if start-stop-daemon --stop --signal USR1 --oknodo --quiet \
--pidfile $PIDFILE --exec $DAEMON
then
log_end_msg 0
else
log_end_msg 1
fi
;;
restart)
log_daemon_msg "Restarting $DESC" "$NAME"
do_stop
case "$?" in
0|1)
do_start
case "$?" in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|status|restart|reload|force- reload}" >&2
exit 1
;;
esac
Run Code Online (Sandbox Code Playgroud)
chmod a + x /etc/init.d/php7-fpm
2)/etc/init/php7-fpm.conf
# php7-fpm - The PHP FastCGI Process Manager
# Original script by Ond?ej Surý. Adapted to php7-fpm by @bjornjohansen
description "The PHP FastCGI Process Manager"
author "Ond?ej Surý <ondrej@debian.org>"
start on runlevel [2345]
stop on runlevel [016]
# Precise upstart does not support reload signal, and thus rejects the
# job. We'd rather start the daemon, instead of forcing users to
# reboot https://bugs.launchpad.net/ubuntu/+source/php5/+bug/1272788
#
# reload signal USR2
pre-start exec /usr/local/lib/php7-fpm-checkconf
respawn
exec /usr/sbin/php7-fpm --nodaemonize --fpm-config /etc/php7/etc/php-fpm.conf
Run Code Online (Sandbox Code Playgroud)
3)/ usr/local/lib/php7 -fpm-checkconf
#!/bin/sh
set -e
errors=$(/usr/sbin/php7-fpm --fpm-config /etc/php7/etc/php-fpm.conf -t 2>&1 | grep "\[ERROR\]" || $
if [ -n "$errors" ]; then
echo "Please fix your configuration file..."
echo $errors
exit 1
fi
exit 0
Run Code Online (Sandbox Code Playgroud)
chmod a + x/usr/local/lib/php7 -fpm-checkconf
cp /etc/php7/etc/php-fpm.conf.default /etc/php7/etc/php-fpm.conf
cp /etc/php7/etc/php-fpm.d/www.conf.default /etc/php7/etc/php-fpm.d/www.conf
update-rc.d -f php7-fpm defaults
Run Code Online (Sandbox Code Playgroud)
当我运行以下内容时收到错误消息"作业无法启动"
service php7-fpm start
Run Code Online (Sandbox Code Playgroud)
如果有人可以纠正我的错误或提供PHP7(ZTS)+ Pthreads的完整安装,我将很高兴.
ama*_*emi 10
更新和安装依赖项
apt-get update
apt-get install -y bison autoconf build-essential pkg-config git-core libltdl-dev libbz2-dev libxml2-dev libxslt1-dev libssl-dev libicu-dev libpspell-dev libenchant-dev libmcrypt-dev libpng-dev libjpeg8-dev libfreetype6-dev libmysqlclient-dev libreadline-dev libcurl4-openssl-dev
Run Code Online (Sandbox Code Playgroud)
删除任何现有的php7并重新创建php7和其他子目录
rm -rf /etc/php7
mkdir -p /etc/php7
mkdir -p /etc/php7/cli
mkdir -p /etc/php7/etc
Run Code Online (Sandbox Code Playgroud)
删除当前工作目录中的所有php-src文件夹,然后从git branch重新安装
rm -rf php-src
git clone https://github.com/php/php-src.git --depth=1
Run Code Online (Sandbox Code Playgroud)
将目录更改为ext以从git下载pthreads
cd php-src/ext
git clone https://github.com/krakjoe/pthreads -b master pthreads
Run Code Online (Sandbox Code Playgroud)
回到php-src作为当前的工作目录
cd ..
Run Code Online (Sandbox Code Playgroud)
构建php-src
./buildconf --force
Run Code Online (Sandbox Code Playgroud)
设置适用于您自己案例的配置选项,启用zts,fpm和其他扩展
CONFIGURE_STRING="--prefix=/etc/php7 --with-bz2 --with-zlib --enable-zip --disable-cgi \
--enable-soap --enable-intl --with-mcrypt --with-openssl --with-readline --with-curl \
--enable-ftp --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd \
--enable-sockets --enable-pcntl --with-pspell --with-enchant --with-gettext \
--with-gd --enable-exif --with-jpeg-dir --with-png-dir --with-freetype-dir --with-xsl \
--enable-bcmath --enable-mbstring --enable-calendar --enable-simplexml --enable-json \
--enable-hash --enable-session --enable-xml --enable-wddx --enable-opcache \
--with-pcre-regex --with-config-file-path=/etc/php7/cli \
--with-config-file-scan-dir=/etc/php7/etc --enable-cli --enable-maintainer-zts \
--with-tsrm-pthreads --enable-debug --enable-fpm \
--with-fpm-user=www-data --with-fpm-group=www-data"
Run Code Online (Sandbox Code Playgroud)
运行configure脚本并安装
./configure $CONFIGURE_STRING
make && make install
Run Code Online (Sandbox Code Playgroud)
使以下帮助程序可执行
chmod o+x /etc/php7/bin/phpize
chmod o+x /etc/php7/bin/php-config
Run Code Online (Sandbox Code Playgroud)
现在将目录更改为pthreads并运行phpize
cd ext/pthreads*
/etc/php7/bin/phpize
Run Code Online (Sandbox Code Playgroud)
设置pthreads的配置选项,但要确保enable-pthreads = shared,这是配置的主要方面
./configure --prefix='/etc/php7' --with-libdir='/lib/x86_64-linux-gnu' \
--enable-pthreads=shared --with-php-config='/etc/php7/bin/php-config'
make && make install
Run Code Online (Sandbox Code Playgroud)
FPM安装涉及将配置文件复制到适当的位置,并在必要时进行更改.
#back to current working directory php-src
cd ../../
#php.ini to be used by fpm-fcgi
cp -r php.ini-production /etc/php7/cli/php.ini
sed -i 's/;date.timezone =.*/date.timezone = Africa\/Lagos/' /etc/php7/cli/php.ini
cp /etc/php7/etc/php-fpm.conf.default /etc/php7/etc/php-fpm.conf
cp /etc/php7/etc/php-fpm.d/www.conf.default /etc/php7/etc/php-fpm.d/www.conf
cp sapi/fpm/init.d.php-fpm /etc/init.d/php7-fpm
sed -i 's/Provides: php-fpm/Provides: php7-fpm/' /etc/init.d/php7-fpm
sed -i 's#^php_fpm_BIN=.*#php_fpm_BIN=/usr/sbin/php7-fpm#' /etc/init.d/php7-fpm
sed -i 's#^php_fpm_CONF=.*#php_fpm_CONF=/etc/php7/etc/php-fpm.conf#' /etc/init.d/php7-fpm
sed -i 's#^php_fpm_PID=.*#php_fpm_PID=/var/run/php7-fpm.pid#' /etc/init.d/php7-fpm
Run Code Online (Sandbox Code Playgroud)
将pthreads.so添加到php-cli.ini,这将由命令行界面(CLI)使用
cp php.ini-production /etc/php7/cli/php-cli.ini
echo "extension=pthreads.so" > /etc/php7/cli/php-cli.ini
Run Code Online (Sandbox Code Playgroud)
添加其他扩展和链接二进制文件
echo "zend_extension=opcache.so" >> /etc/php7/cli/php.ini
ln --symbolic /etc/php7/bin/php /usr/bin/php
ln --symbolic /etc/php7/sbin/php-fpm /usr/sbin/php7-fpm
chmod +x /etc/init.d/php7-fpm
update-rc.d php7-fpm defaults
service php7-fpm start
Run Code Online (Sandbox Code Playgroud)
确保以下内容与/etc/php7/etc/php-fpm.conf中的相同
pid = /var/run/php7-fpm.pid
error_log = /var/log/php7-fpm.log
include=/etc/php7/etc/php-fpm.d/*.conf
Run Code Online (Sandbox Code Playgroud)
确保以下内容与/etc/php7/etc/php-fpm.d/www.conf中的相同
user = www-data
group = www-data
listen = /var/run/php7-fpm.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
listen.allowed_clients = 127.0.0.1
security.limit_extensions = .php .php3 .php4 .php5 .php7
Run Code Online (Sandbox Code Playgroud)
确保以下内容与/etc/php7/cli/php.ini中的相同
cgi.fix_pathinfo=1
Run Code Online (Sandbox Code Playgroud)
要与Nginx一起使用,请在nginx/sites-available/default中执行以下操作
upstream php7-fpm {
server unix:/var/run/php7-fpm.sock;
}
server {
listen 80 default_server;
listen [::]:80 default_server;
root /usr/share/nginx/html;
# Add index.php to the list if you are using PHP
index index.html index.htm;
server_name localhost;
location / {
try_files $uri $uri/ =404;
}
location ~ [^/]\.php(/|$) {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php7-fpm;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
service nginx restart
Run Code Online (Sandbox Code Playgroud)
要使用pthread,请记住它通过命令行界面工作.假设thread.php是你的并行编程代码,你不能通过在浏览器中使用localhost/path/to/thread.php在sapi/fpm模式下运行它
<?php
//thread.php
class Part extends Threaded{ public function run(){} }
$parts = new Part();
for($i=0;$i<4;$i++) $parts[] = $i;
?>
Run Code Online (Sandbox Code Playgroud)
而是通过命令行方法(如"system")创建一个文件来执行代码thread.php
<?php
system("php /path/to/thread.php");
?>
Run Code Online (Sandbox Code Playgroud)