如何让您的php也支持pthreads多线程
我们常常会碰到这样一种情况,开发环境在windows下开发,而生产环境确是linux。windows下能正常运行,上传到linux后却无法好好地玩耍了。然后开始了一轮尼玛式的疯狂的查找原因,最后发现是服务器环境问题。这时只能默默地爆一句shit。最近在用php多线程开发一个小功能也碰到类似的问题,在此记录一下。
1、查找资料发现php5.3或以上,且线程安全版本,才支持多线程。于是通过phpinfo()查看,发现php版本过低且为非线程安全版本。因而首先需要升级php版本,由于采用了集成式的wdlinux,因而直接采用官网的升级方式。
http://www.wdlinux.cn/bbs/thread-8044-1-1.html
然而升级后,PHPinfo查看。Thread Safety仍为false,于是继续查找。发现PHP多线程支持,编译时需要添加配置项 --enable-maintainer-zts,这样线程才是安全的(Thread Safety)。创建线程时才不会报错。
于是修改下升级脚本,添加--enable-maintainer-zts,然后一步步编译运行。再phpinfo查看,希望的情景终于出现了。
#!/bin/bash# PHP 5.5 update scriptsif [ ! $1 ];then Ver=5.5.9else Ver=$1fiDebugfile=20121212echo "THANK YOU FOR USING UPDATE SCRIPT MADE BY HTTP://WWW.AREFLY.COM & HTTP://WWW.ITBULU.COM"echo "YOU ARE GOING TO UPDATE YOUR PHP TO ${Ver}"echo "YOU CAN JUST HAVE A REST"echo "IT MAY TAKE A LOT OF TIME"echo#read -p "PRESS ENTER IF YOU REALLY WANT TO UPDATE"read -p "DO YOU REALLY WANT TO UPDATE? (Y/N)" ynif [ "$yn" == "Y" ] || [ "$yn" == "y" ]; then echo "PHP IS NOW UPDATING!"else exitfiechoecho "-------------------------------------------------------------"echo###yumyum install -y libmcrypt-devel libjpeg-devel libpng-devel freetype-devel curl-devel openssl-devel libxml2-devel zip unzip###if [ ! -f php-${Ver}.tar.gz ];then wget -c http://us1.php.net/distributions/php-${Ver}.tar.gzfiif [ ! -f iconv_ins.sh ];then wget -c http://down.wdlinux.cn/in/iconv_ins.sh sh iconv_ins.shfi###if [ -f /www/wdlinux/mysql/lib/libmysqlclient.so.18 ];then if [ -d /usr/lib64 ];then LIBNCU="/usr/lib64" else LIBNCU="/usr/lib" fi ln -sf /www/wdlinux/mysql/lib/libmysqlclient.so.18 $LIBNCUfitar zxvf php-${Ver}.tar.gzcd php-${Ver}if [ -d /www/wdlinux/apache_php ];thenecho "START CONFIGURING PHP ON NGINX"sleep 3make clean ./configure --prefix=/www/wdlinux/apache_php-${Ver} --with-config-file-path=/www/wdlinux/apache_php-${Ver}/etc --with-iconv=/usr --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-inline-optimization --with-curl --enable-mbregex --enable-mbstring --with-mcrypt=/usr --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-ftp --enable-sockets --enable-zip --with-apxs2=/www/wdlinux/apache/bin/apxs --with-mysqli=/www/wdlinux/mysql/bin/mysql_config --with-pdo-mysql=/www/wdlinux/mysql --enable-opcache --enable-bcmath --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --enable-maintainer-zts[ $? != 0 ] && echo "NO! CONFIGURE ERROR! TRY AGAIN OR ASK IN THE BBS! :(" && exitecho "START MAKE"sleep 3make[ $? != 0 ] && echo "NO! MAKE ERROR! TRY AGAIN OR ASK IN THE BBS! :(" && exitecho "START MAKE INSTALL"sleep 3make install[ $? != 0 ] && echo "NO! MAKE INSTALL ERROR! TRY AGAIN OR ASK IN THE BBS! :(" && exitcp php.ini-production /www/wdlinux/apache_php-${Ver}/etc/php.inised -i 's/short_open_tag = Off/short_open_tag = On/g' /www/wdlinux/apache_php-${Ver}/etc/php.inirm -f /www/wdlinux/apache_phpln -sf /www/wdlinux/apache_php-${Ver} /www/wdlinux/apache_phpif [ ! -d /www/wdlinux/apache_php-${Ver}/lib/php/extensions ];then mkdir -p /www/wdlinux/apache_php-${Ver}/lib/php/extensions/no-debug-zts-${Debugfile} ln -sf /www/wdlinux/apache_php-${Ver}/lib/php/extensions/no-debug-zts-${Debugfile} /www/wdlinux/apache_php-${Ver}/lib/php/extensions/no-debug-non-zts-${Debugfile}fiservice httpd restartfiif [ -d /www/wdlinux/nginx_php ];thenecho "START CONFIGURING PHP ON APACHE"sleep 3make clean ./configure --prefix=/www/wdlinux/nginx_php-${Ver} --with-config-file-path=/www/wdlinux/nginx_php-${Ver}/etc --with-iconv=/usr --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-inline-optimization --with-curl --enable-mbregex --enable-mbstring --with-mcrypt=/usr --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-ftp --enable-sockets --enable-zip --enable-fpm --with-mysqli=/www/wdlinux/mysql/bin/mysql_config --with-pdo-mysql=/www/wdlinux/mysql --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd[ $? != 0 ] && echo "NO! CONFIGURE ERROR! TRY AGAIN OR ASK IN THE BBS! :(" && exitecho "START MAKE"sleep 3make[ $? != 0 ] && echo "NO! MAKE ERROR! TRY AGAIN OR ASK IN THE BBS! :(" && exitecho "START MAKE INSTALL"sleep 3make install[ $? != 0 ] && echo "NO! MAKE INSTALL ERROR! TRY AGAIN OR ASK IN THE BBS! :(" && exitcp php.ini-production /www/wdlinux/nginx_php-${Ver}/etc/php.inised -i 's/short_open_tag = Off/short_open_tag = On/g' /www/wdlinux/nginx_php-${Ver}/etc/php.iniservice php-fpm stoprm -f /www/wdlinux/nginx_phpln -sf /www/wdlinux/nginx_php-${Ver} /www/wdlinux/nginx_phpcp /www/wdlinux/nginx_php-${Ver}/etc/php-fpm.conf.default /www/wdlinux/nginx_php-${Ver}/etc/php-fpm.confsed -i 's/user = nobody/user = www/g' /www/wdlinux/nginx_php/etc/php-fpm.confsed -i 's/group = nobody/group = www/g' /www/wdlinux/nginx_php/etc/php-fpm.confsed -i 's/;pid =/pid =/g' /www/wdlinux/nginx_php/etc/php-fpm.confcp -f sapi/fpm/init.d.php-fpm /www/wdlinux/init.d/php-fpmchmod 755 /www/wdlinux/init.d/php-fpmif [ ! -d /www/wdlinux/nginx_php-${Ver}/lib/php/extensions ];then mkdir -p /www/wdlinux/nginx_php-${Ver}/lib/php/extensions/no-debug-zts-${Debugfile} ln -sf /www/wdlinux/nginx_php-${Ver}/lib/php/extensions/no-debug-zts-${Debugfile} /www/wdlinux/nginx_php-${Ver}/lib/php/extensions/no-debug-non-zts-${Debugfile}fificd ..rm -rf php-${Ver}/rm -rf php-${Ver}.tar.gzrm -rf iconv_ins.shechoecho "---------------------www.itbulu.com-------------------------------------"echo "PHP UPDATE FINISH! :D"echo "NOW YOUR PHP VERSION IS ${Ver}!"echo "UPDATE SCRIPT MADE BY HTTP://WWW.AREFLY.COM & HTTP://WWW.ITBULU.COM "echo "THANK YOU FOR USING"echoecho "WDCP (C) COPYRIGHT"echoecho "PS: I THINK YOU NEED RESTART SERVER AFTER UPDATE."echo "PS2: REMEMBER TO VISIT HTTP://WWW.AREFLY.COM & HTTP://WWW.ITBULU.COM! :D"echo
2、接下来是添加pthreads扩展
PHP扩展下载:https://github.com/krakjoe/pthreads
安装pthreads扩展
unzip pthreads-master.zipcd pthreads-master/usr/local/php/bin/phpize./configure ?with-php-config=/usr/local/php/bin/php-configmakemake install
3、更改php.ini配置(phpinfo Loaded Configuration File 节点)
vim /usr/local/php/etc/php.ini
添加节点:
上一步编译完成之后,会告诉你一个 pthreads.so 文件路径
extension='/usr/local/php/lib/php/extensions/no-debug-zts-20121212/pthreads.so'
以上节点是我机器路径,你们根据自己的情况更改
保存、退出
4、重启Apache
/usr/local/apache/bin/httpd -k restart
5、测试,直接写个php文件,new Thread,如果能输出类Obj,说明安装成功。
参考资料:
http://www.wdlinux.cn/bbs/thread-8044-1-1.html
------------php多线程---------------
http://www.thinkphp.cn/topic/22676.html
http://www.laozuo.org/4387.html
----------线程安全编译要求---------
http://www.45it.com/net/201503/38547.htm
http://zyan.cc/pthreads/

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Laravel memudahkan mengendalikan data sesi sementara menggunakan kaedah flash intuitifnya. Ini sesuai untuk memaparkan mesej ringkas, makluman, atau pemberitahuan dalam permohonan anda. Data hanya berterusan untuk permintaan seterusnya secara lalai: $ permintaan-

Pelanjutan URL Pelanggan PHP (CURL) adalah alat yang berkuasa untuk pemaju, membolehkan interaksi lancar dengan pelayan jauh dan API rehat. Dengan memanfaatkan libcurl, perpustakaan pemindahan fail multi-protokol yang dihormati, php curl memudahkan execu yang cekap

Alipay Php ...

Laravel menyediakan sintaks simulasi respons HTTP ringkas, memudahkan ujian interaksi HTTP. Pendekatan ini dengan ketara mengurangkan redundansi kod semasa membuat simulasi ujian anda lebih intuitif. Pelaksanaan asas menyediakan pelbagai jenis pintasan jenis tindak balas: Gunakan Illuminate \ Support \ Facades \ http; Http :: palsu ([ 'Google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

Adakah anda ingin memberikan penyelesaian segera, segera kepada masalah yang paling mendesak pelanggan anda? Sembang langsung membolehkan anda mempunyai perbualan masa nyata dengan pelanggan dan menyelesaikan masalah mereka dengan serta-merta. Ia membolehkan anda memberikan perkhidmatan yang lebih pantas kepada adat anda

Artikel membincangkan pengikatan statik lewat (LSB) dalam PHP, yang diperkenalkan dalam Php 5.3, yang membolehkan resolusi runtime kaedah statik memerlukan lebih banyak warisan yang fleksibel. Isu: LSB vs polimorfisme tradisional; Aplikasi Praktikal LSB dan Potensi Perfo

Artikel membincangkan ciri -ciri keselamatan penting dalam rangka kerja untuk melindungi daripada kelemahan, termasuk pengesahan input, pengesahan, dan kemas kini tetap.

Artikel ini membincangkan menambah fungsi khusus kepada kerangka kerja, memberi tumpuan kepada pemahaman seni bina, mengenal pasti titik lanjutan, dan amalan terbaik untuk integrasi dan debugging.
