Linux系统中为php添加pcntl扩展

pcntl扩展可以支持php的多线程操作(仅限linux)

原本需要重新编译PHP的后面configrue提示加上--enable-pcntl

由于我的php是采用yum安装的,所以不能采用上面的方式

下面介绍一个php动态添加扩展的方式 phpize

1、首先看下 phpize命令 所在的目录  (ps:我的目录/usr/bin/phpize)

如果没有找到的话 执行安装

yum install php53_devel  (ps:请注意自己的版本)

安装完毕后。会生成phpize命令

2、去php.net下载相应版本的php源文件

咱们以php-5.3.17 为例吧,解压后,进入相应的模块下

cd ext/pcntl
#先执行phpize
/usr/bin/phpize
./configure --with-php-config=/usr/bin/php-config  (ps:请正确的指定php-config的目录)
#编译、安装
make && make install

这时候出了一个错误

./configure编译正常,但make出错
error: ‘PHP_FE_END' undeclared here (not in a function)

解决方法:

源代码有错误,进入php-5.3.17目录

sed -i 's|PHP_FE_END|{NULL,NULL,NULL}|' ./ext/**/*.c
sed -i 's|ZEND_MOD_END|{NULL,NULL,NULL}|' ./ext/**/*.c

再重新make && make install

3、编译完毕后会生成了一个  pcntl.so的文件。在php的model目录里

编辑/etc/php.ini,加入

extension=pcntl.so

4、重启apache

service httpd restart

5、测试是否安装成功

<?php
  echo pcntl_fork();
?>

输出:23165

(0)

相关推荐

  • php pcntl_fork和pcntl_fork 的用法

    pcntl_fork()函数就是为当前的进程创建一个子进程.并且先运行父进程,返回的是子进程的PID,肯定大于零.在父进程的代码中可以用pcntl_fork(&$status)暂停父进程知道他的子进程有返回值.注意:父进程的阻塞同时会阻塞子进程.但是父进程的结束不影响子进程的运行. 父进程运行完了会接着运行子进程,这时子进程会从执行pcntl_fork()的那条语句开始执行(包括此函数),但是此时它返回的是零(代表这是一个子进程).在子进程的代码块中最好有exit语句,即执行完子进程后立即就结束

  • PHP使用pcntl_fork实现多进程下载图片的方法

    本文实例讲述了PHP使用pcntl_fork实现多进程下载图片的方法.分享给大家供大家参考.具体分析如下: PHP pcntl_fork - 在当前进程当前位置产生分支,子进程,译注:fork是创建了一个子进程,父进程和子进程 都从fork的位置开始向下继续执行,不同的是父进程执行过程中,得到的fork返回值为子进程号,而子进程得到的是0. 注意:PHP有个pcntl_fork的函数可以实现多进程,但要加载pcntl拓展,而且只有在linux下才能编译这个拓展. 1.首先在ubuntu下编译pc

  • PHP的pcntl多进程用法实例

    本文实例讲述了PHP的pcntl多进程用法.分享给大家供大家参考.具体分析如下: PHP使用PCNTL系列的函数也能做到多进程处理一个事务.比如我需要从数据库中获取80w条的数据,再做一系列后续的处理,这个时候,用单进程?你可以等到明年今天了.所以应该使用pcntl函数了. 假设我想要启动20个进程,将1-80w的数据分成20份来做,主进程等待所有子进程都结束了才退出: $max = 800000; $workers = 20; $pids = array(); for($i = 0; $i <

  • 分享PHP-pcntl 实现多进程代码

    PHP使用PCNTL系列的函数也能做到多进程处理一个事务.比如我需要从数据库中获取80w条的数据,再做一系列后续的处理,这个时候,用单进程?你可以等到明年今天了...所以应该使用pcntl函数了. 下面我们来看个实例 代码 <?php $arChildId = array(); for($i = 0; $i < 10; $i++) { $iPid = pcntl_fork(); if($iPid == -1) { die('can\'t be forked.'); } if($iPid) {

  • mac系统下为 php 添加 pcntl 扩展

    前言: pcntl 介绍 pcntl扩展可以支持 PHP 的多线程操作.(非Unix类系统不支持此模块) phpize 介绍 phpize 可以用来给 PHP 动态的添加扩展.比如编译 PHP 时忘记添加某扩展,后来想添加该扩展,即可以使用 phpize 动态的添加该扩展. 本文将介绍如何使用 phpize 给 Mac下的集成环境 MAMP 添加 PHP 的 pcntl 扩展.类 Unix 的环境都可以使用本方法安装,注意灵活变通. 安装: 下载和本地 PHP 版本对应的源码包,地址为: htt

  • PHP 使用pcntl和libevent 实现Timer功能

    PHP 使用pcntl和libevent 实现Timer功能,先看例子,pcntl(PHP线程)解释在下面. 复制代码 代码如下: <?php function newChild($func_name) {      echo "enter newChild\n";      $args = func_get_args();      unset($args[0]);      $pid =  pcntl_fork();      if ($pid == 0) {        

  • Linux系统中为php添加pcntl扩展

    pcntl扩展可以支持php的多线程操作(仅限linux) 原本需要重新编译PHP的后面configrue提示加上--enable-pcntl 由于我的php是采用yum安装的,所以不能采用上面的方式 下面介绍一个php动态添加扩展的方式 phpize 1.首先看下 phpize命令 所在的目录  (ps:我的目录/usr/bin/phpize) 如果没有找到的话 执行安装 yum install php53_devel (ps:请注意自己的版本) 安装完毕后.会生成phpize命令 2.去ph

  • 教你如何在windows与linux系统中设置MySQL数据库名、表名大小写敏感

    在 MySQL 中,数据库和表其实就是数据目录下的目录和文. 因而,操作系统的敏感性决定数据库和表命名的大小写敏感.这就意味着数据库和表名在 Windows 中是大小写不敏感的,而在大多数类型的 Unix/Linux 系统中是大小写敏感的. MySQL大小写敏感可以通过配置文件的lower_case_table_names参数来控制. WINDOWS: 编辑MySQL安装目录下的my.ini 文件,在[mysqld]节下 添加 lower_case_table_names=0 (备注:为0时大小

  • Linux系统中bash shell编程的10个基础问题讲解

    第1问:为何叫做shell? 在介绍 shell 是什么东西之前,不妨让我们重新审视使用者与电脑的关系.我们知道电脑的运作不能离开硬件,但使用者却无法直接对硬件作驱动,硬件的驱动只能透过一个称为"操作系统(Operating System)"的软件来控管,事实上,我们每天所谈的linux,严格来说只是一个操作系统,我们称之为"核心(kernel)".然而,从使用者的角度来说,使用者也没办法直接操作kernel,而是透过kernel的"外壳"程序,

  • Linux系统中sudo命令的十个技巧总结

    前言 在Linux和其他类Unix操作系统中,只有root用户可以运行所有命令并在系统上执行某些关键操作,如安装和更新,删除包,创建用户和组,修改重要的系统配置文件等. 然而,承担root用户角色的系统管理员可以允许其他正常系统用户在sudo命令和几个配置的帮助下运行某些命令以及执行包括上述的一些重要系统操作. sudo 表示 "superuser do". 它允许已验证的用户以其他用户的身份来运行命令.其他用户可以是普通用户或者超级用户.然而,大部分时候我们用它来以提升的权限来运行命

  • Linux系统中SSH服务基于key认证实践的过程

    众所周知ssh是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议,它默认工作在tcp的22号端口,具体实现的软件有:openssh(centos默认安装的),dropbear.ssh协议目前有两个版本v1和v2,v1基于CRC-32做MAC,不安全.v2基于DH算法做密钥交换,基于RSA或DSA实现身份认证.所以目前大多流行的Linux都是使用的V2版本. 简单了解了下ssh,我们再来说说它的两种用户登录认证方式,第一种基于用户名口令的方式,这种认证方式想必大家都应该知道,就是我们要想

  • 解决linux系统中运行node进程却无法杀死进程的问题

    下面先给大家介绍下linux系统中运行node进程无法杀死进程,具体内容如下所示: events.js:72 throw er; // Unhandled 'error' event ^ Error: listen EADDRINUSE at errnoException (net.js:901:11) at Server._listen2 (net.js:1039:14) at listen (net.js:1061:10) at Server.listen (net.js:1127:5) a

  • 在 Linux 系统中手动滚动日志的方法

    日志滚动log rotation在 Linux 系统上是再常见不过的一个功能了,它为系统监控和故障排查保留必要的日志内容,同时又防止过多的日志造成单个日志文件太大. 日志滚动的过程是这样的:在一组日志文件之中,编号最大的(最旧的)一个日志文件会被删除,其余的日志文件编号则依次增大并取代较旧的日志文件,而较新的文件则取代它作为当前的日志文件.这一个过程很容易就可以实现自动化,在细节上还能按需作出微调. 使用 logrotate 命令可以手动执行日志滚动的操作.本文将要介绍的就是手动进行日志滚动的方

  • Linux系统中日志详细介绍

    目录 1.日志相关服务 2.系统中常见的日志文件 1.日志相关服务 在CentOS 6.x中日志服务已经由rsyslogd取代了原先的syslogd服务.RedHat认为syslogd已经不能满足在工作中的需求,rsyslogd服务支持的功能更加丰富. rsyslogd服务相比syslogd服务具有一些新的特点: 基于TCP网络协议传输日志信息. 更安全的网络传输方式. 有日志消息的及时分析框架. 后台数据库.配置文件中可以写简单的逻辑判断. 与syslog配置文件相兼容. 2.系统中常见的日志

  • Linux系统中.bash_profile文件详解

    目录 一. 环境变量$PATH: 二. 修改环境变量: 三.bash_profile的用途 总结 一. 环境变量$PATH: Linux是一个多用户操作系统,每个用户都有自己专有的运行环境.用户所使用的环境由一系列变量所定义,这些变量被称为环境变量.系统环境变量通常都是大写的. 每个用户都可以根据需要修改自己的环境变量,以达到自己的使用要求.常见的环境变量如下表: 在Shell下通过 美元符号$来引用环境变量,使用echo命令可以查看某个具体 环境变量的值. 例如,查看PATH的值: echo

随机推荐