linux下安装php7或php8以及编译时各种故障bug排除

写爬虫的时候不想用和nginx已配置好的环境用php来跑命令行脚本,需要安装一个和nginxapache之类的中间件没有瓜葛的独立php引擎,专门用来跑脚本的。

自动安装的依赖根据系统类型不同,命令也不同。

centos下

yum-yinstalllibxml2libxml2-developensslopenssl-develcurl-devellibjpeglibjpeg-devellibpnglibpng-develfreetypefreetype-devellibmcrypt-develpcre-develdebian/ubuntu的环境下,你需要用到apt-get命令处理一下

当然如果有人自己经常用ldapshmop,那这是个人才,小弟佩服。

运行configure搞糊涂时需

configure--help看一下。有些--with的语法已经不管用了,统统要变成--enable

./configure--prefix=/usr/local/php--with-config-file-path=/usr/local/php/etc\--with-bz2--enable-ctype--enable-filter--with-gmp--with-libxml--with-pdo-sqlite--enable-phar\--enable-exif--enable-session--enable-opcache--with-xsl\--disable-debug\--disable-rpath\--enable-mysqlnd\--with-mysqli=mysqlnd\--with-pdo-mysql=mysqlnd\--with-iconv=/usr/local\--with-zlib\--enable-xml\--enable-bcmath\--with-curl\--enable-mbregex\--enable-mbstring\--enable-intl\--enable-gd\--with-openssl\--with-mhash\--enable-pcntl\--enable-sockets\--with-zip如果报找不到iconv错误:

checkingforiconvsupport...yesconfigure:error:Pleasereinstalltheiconvlibrary.需要将--with-iconv=/usr/local改为--with-iconv

./configure--prefix=/usr/local/php--with-config-file-path=/usr/local/php/etc\--with-bz2--enable-ctype--enable-filter--with-gmp--with-libxml--enable-phar\--enable-exif--enable-session--enable-opcache--with-xsl\--disable-debug\--disable-rpath\--enable-xml\--enable-bcmath\--enable-mbregex\--enable-mbstring\--enable-intl\--enable-gd\--enable-pcntl\--enable-sockets\--enable-mysqlnd\--with-mysqli=mysqlnd\--with-pdo-mysql=mysqlnd\--with-iconv\--with-zlib\--with-curl\--with-openssl\--with-mhash\--with-zip小编把openssl改成libressl了,在libressl手动编译时,小编通过./configure--prefix=/usr/local/libressl的参数安装到了/usr/local/libressl,那么就要指定openssl的新目录

将--with-openssl改为--with-openssl=/usr/local/libressl

./configure--prefix=/usr/local/php--with-config-file-path=/usr/local/php/etc\--disable-debug\--disable-rpath\--enable-ctype\--enable-filter\--enable-phar\--enable-exif\--enable-session\--enable-opcache\--enable-mysqlnd\--enable-mbregex\--enable-mbstring\--enable-intl\--enable-gd\--enable-xml\--enable-bcmath\--enable-pcntl\--enable-sockets\--enable-soap\--with-bz2\--with-gmp\--with-libxml\--with-xsl\--with-mysqli=mysqlnd\--with-pdo-mysql=mysqlnd\--with-iconv=/usr/local\--with-zlib\--with-curl\--with-openssl=/usr/local/libressl\--with-mhash\--with-zip如果想多搞几个php.ini配置文件拆成几块,可把这一段参数--with-config-file-path=/usr/local/php/etc换成类似如下的命令

如果你不是想要单搞命令行的,想把fpm搞进去,请加一段fpm配置进去,但别忘了事先把用户建立好:

#建立用户groupaddwwwuseradd-gwww-s/sbin/nologinwww#测试用户是否正常idwww#下面是在配置php-fpm编译项的时候追加的参数--enable-fpm--with-fpm-user=www--with-fpm-group=www上述fpmuser和group自己创建的。

还是那句话,如果编译过程中libiconv报错,需要将配置参数中的--with-iconv=/usr/local改为--with-iconv

或者,在makeinstall之前添加一行试试

make&&makeinstallphp配置文件处理接下来把php.ini的推荐配置文件(你可以在php安装包里面找),拷贝到php配置目录下

cpphp.ini-production/usr/local/php/etc/php.ini如果你已经启用了fpmcd/usr/local/php/etccpphp-fpm.conf.defaultphp-fpm.confcp./php-fpm.d/www.conf.default./php-fpm.d/www.conf做个软连接假设你把php安装到了默认的位置/usr/local/php/

ln-s/usr/local/php/bin/php/usr/bin/phpfpm服务配置创建一个文件,还是假设你的php被安装到了默认的路径/usr/local/php/

vim/lib/systemd/system/php-fpm.service我们假设fpm的进程文件放在/var/run/目录下,把配置放到/usr/local/php/etc/php-fpm.conf文件里

文件内容:

[Unit]Description=ThePHP8.0FastCGIProcessManagerDocumentation=man:php-fpm8.0(8)After=network.target[Service]Type=simplePIDFile=/var/run/php-fpm.pidExecStart=/usr/local/php/sbin/php-fpm--nodaemonize--fpm-config/usr/local/php/etc/php-fpm.confExecReload=/bin/kill-USR2$MAINPID[Install]WantedBy=multi-user.targetPDO的配置默认来讲,官方包默认安装进来的php是没有pdo_mysql功能的,如果使用针对mysql的pdo一定会报错,怎么办呢

首先回到安装源目录,例如安装源你将其解压到了/root/php-7.0.29目录下,那么pdo_mysql插件会搁置在/root/php-7.0.29/ext/pdo_mysql这个路径下

再回想你安装的php7路径在哪里例如安装到了/usr/local/php7这个路径下,那么进入到/root/php-7.0.29/ext/pdo_mysql下面:

cd/root/php-7.0.29/ext/pdo_mysql/usr/local/php7/bin/phpize./configure--with-php-config=/usr/local/php7/bin/php-config--with-pdo-mysql=share当然如果你当前系统里面安装了mysql服务,你可以把上面的share改成mysql的安装路径,注意,不是说要你指向mysql的bin目录,而是安装路径,例如/usr/local/mysql这样子。

接下来,需要修改php7下面的php.ini文件,找到下面这一行:

[Pdo_mysql]在其下方增加一段:

啥玩意,编译个php还能编译出bug没错,现实就是如此,既然你选择了php,不去折腾,又如何

论头秃,php还是蛮保护同行的发量的,不要怕,上去一把梭哈!

前提条件,请你在编译前,把该准备的库都准备好,不然可能会报各种奇奇怪怪的错误,见本文开篇依赖安装

先用libiconv1.14版本打比方(本文顶部是1.17版的)

找到698行代码:

_GL_WARN_ON_USE(gets,"getsisasecurityhole-usefgetsinstead");将之改为:

#ifdefined(__GLIBC__)&&!defined(__UCLIBC__)&&!__GLIBC_PREREQ(2,16)_GL_WARN_ON_USE(gets,"getsisasecurityhole-usefgetsinstead");#endif已经安了libiconv还报错error:pleasereinstalliconv那就是检测不到libiconv了。何解头秃的事情来了。如果有人问小编这个问题,小编建议:注意编译选项当中的--with-iconv,考虑换着用以下三种参数挨个尝试:

1、--with-iconv后面什么路径都不指定

2、--with-iconv=/usr/local

3、--with-iconv=/usr/local/libiconv或者你安装过的自定义位置

因为根据上文的记述,你应该已经把libiconv库安装到了/usr/local/libiconv这个路径下了,编译器逻辑一定会找得到的。如果还是不行,据洋鬼子说,要在执行configure命令之前先输入命令:

[2021-03-0922:47UTC]guillaume-phpatouttersdoteuTomas,couldyoupleasetelluswhaterrorisloggedintheconfig.logAssuggestedbycmg,thisisaproblemofdetection;butinmycase(FreeBSD10.2,with"hand"-compiledGNUiconv1.16withoutpkgconfig),thedetectionprogramhadnoproblem,ratheritwasitscompileenvthatlackeda-liconv.Sothiscouldbecircumventedbyrunningan:exportLDFLAGS="$LDFLAGS-liconv"beforetheconfigure.I_think_that,likeyou,IhadnoproblemcompilingaPHP7inthesameenvironment(sothisdetectfailurewouldbeaconfigureregression);butIcannotbecertain.w

我测试过,有时候行,有的环境就不行。为了避免不使用容器的兄弟被恶心到,小编通过以下的写法是可以通过配置检查的

#find/-name"libssl.so"#如果找到路径为/usr/lib/x86_64-linux-gnu/libssl.so则输入以下命令ln-s/usr/lib/x86_64-linux-gnu/libssl.so/usr/liberror:off_tundefined;checkyourlibraryconfigurationvim/etc/ld.so.conf添加如下几行

/usr/local/lib64/usr/local/lib/usr/lib/usr/lib64保存退出:wq

使之生效

ldconfig-v提示configure:error:Cannotfindldaplibrariesin/usr/lib解决办法:

在网上下载一个gmp的库,下载:

apt-getinstalllibfreetype-dev然后在配置php环境的时候指定参数:

--with-freetypeOK,接着搞就ok了。这你都不会那你可就要学了,兄弟。

一般开发的时候发现是报以下错误

Calltoundefinedfunctionimagecreatefromjpeg()使用php--rigd命令发现gd是已经启用的,但gd里面没有支持jpeg的说法。怎么办?首先这种情况下,你需要重新编译php

请在debian/ubuntu系统命令里输入(有可能需要sudo)

apt-getupdate&&apt-getinstalllibjpeg-devcentos系统里

yuminstalllibjpeg-devel重启fpm

通过增加swap分区文件的方式解决1G内存小主机无法通过编译的问题:

1、检查当前的分区情况(使用free-m或cat/proc/swaps):

[root@db2root]#free-mtotalusedfreesharedbufferscachedMem:10068492201138-/+buffers/cache:35971Swap:0002、增加交换分区文件及大小:

检查没有swap,下面就需要增加:

判定新交换文件的大小,将大小乘以1024来判定块的大小。例如,大小为64MB的交换文件的块大小为65536,在shell提示下以根用户身份键入以下命令,其中的count等于想要的块大小。

[root@db2root]#ddif=/dev/zeroof=/home/swapbs=1024count=10240001024000+0recordsin1024000+0recordsout使用以下命令来设置交换文件:

[root@db2root]#mkswap/home/swapSettingupswapspaceversion1,size=1023996KiB[root@db2root]#3、启用交换分区文件:

要立即启用交换文件而不是在引导时自动启用,使用以下命令:

[root@db2root]#swapon/home/swap检查增加后的交换情况:

[root@db2root]#free-mtotalusedfreesharedbufferscachedMem:10069941204929-/+buffers/cache:60946Swap:9990999[root@db2root]#要在引导时启用,编辑/etc/fstab文件来包含以下行

(/home/swapswapswapdefaults00):

[root@db2root]#vi/etc/fstabLABEL=//ext3defaults11LABEL=/boot/bootext2defaults12/home/swapswapswapdefaults00none/dev/ptsdevptsgid=5,mode=62000none/procprocdefaults00none/dev/shmtmpfsdefaults00LABEL=/usr/usrext3defaults12/dev/sda5swapswapdefaults00/dev/cdrom/mnt/cdromiso9660noauto,owner,kudzu,ro00/dev/fd0/mnt/floppyautonoauto,owner,kudzu00/home/swapswapswapdefaults00系统下次引导时,它就会启用新建的交换文件

再次检查添加后的情况:

[root@db2oracledb]#free-mtotalusedfreesharedbufferscachedMem:10069792706917-/+buffers/cache:54952Swap:9990999[root@db2oracledb]#关于减少docker镜像体积之编译后清理无用库目前韩天峰发布的swoole-cli,本人还是处于观望状态。

如果是把如此大规模的编译成果,连同关联的lib都塞进容器里显然是很大的,这就涉及到了容器编排,说来话长,如果只是想简单粗暴本地交付一下单镜像呢这里拿debian/ubuntu的镜像举例:

aptautoremovepkg-configmakecmakeg++gccwgetmanpagesm4ca-certificatesaptclean以上命令只是粗暴地删除,有一些成对出现的同名库,名字后面多一个-dev/-devel的是开发库,可以删掉,只保留一个。个别插件的开发库没办法删除。删了php就会报错。

另外把/usr/share/doc和/var/log下的日志和文档删干净

节约点硬盘,php小版本升级需要重新编译的时候再拉。

小编发现明明在配置文件php.ini里已经写好了

enable.opache=1但实际检查没有启用opcache呢?

原来是少了个配置

zend_extension="opache.so"另外建议加上opcache的jit配置

opcache.jit=1255opcache.jit_buffer_size=256M如果已经在用swoole代替php-fpm了还需要用opcache吗?答案是不用。

网上有公子哥说opcache+jit生命周期300秒的php-fpm和swoole性能差不多。可能这位小哥没实现到数据库连接池,或者没开swoole协程特性。

THE END
1.RationalROSE的基本操作rationalrose怎么创建用例图(1)熟悉Rose的系统界面,掌握其基本使用方法 (2)熟悉模型图标元素。 (3)掌握用例图,活动图的绘制方法 二、实验内容与方法 (1)练习Rose的基本使用。 (2)熟悉UML模型元素及表示方法。 (3)绘制读书会书籍共享平台的用例图。 (4)绘制读书会书籍共享平台的顺序图 https://blog.csdn.net/xuezha_liang/article/details/144326214
2.assembly怎么指定lib只包含某一个环境下的lib这里面要说一点,假如有一个类是在另外的一个类里面的话,比如在上面的程序中,Program类中还有一个MM类的话,那么我们用“Reflection.Program.MM”去使用方法的话是不可行的,这样方法会返回null,如果哪位大牛知道这种情况应该怎么写,请不吝赐教~ :) 上面的程序有一个缺点就是如果我们想要生成另外的一个类的对象的https://blog.51cto.com/u_14120/12793077
3.pycharm怎么导入压缩包Python教程pycharm怎么导入压缩包 在pycharm 中导入压缩包的方法有:使用“external libraries”文件夹。使用“file | settings”菜单。使用 pip 工具(如果压缩包可在 pypi 存储库中获取)。从本地导入(如果压缩包文件已存在于项目目录中)。 如何在 PyCharm 中导入压缩包https://m.php.cn/faq/763065.html
4.NoteExpress软件,下载安装好,已经使用过一点时间,可不知怎么回事(*.nel)中,其默认保存位置为 C:\Documents and Settings\您的用户名\My Documents\NoteExpress2\Libraries\Sample.nel,我们建议您新建一个数据库文件在非系统盘(打开ne,文件-新建数据库-选择保存的位置(最新版本中已经增加附件的操作)),更换电脑使用时只需要将nel文件拷贝过来,通过文件-打开数据库-选择您的nelhttps://lib.shnu.edu.cn/bc/8e/c26372a703630/page.htm
5.教你用Mac共享,轻松打造自己团队的SketchLibraries!前段时间发现蓝湖的同步盘从官网下线了,问了客服,说是维护中,具体开放日期不明(目前已正常)。当时我们的设计团队要用这个同步盘来维护 Sketch 的设计组件 Libraries,看来现在要换个思路来解决。网上有 Dropbox 和 GitHub 解决方案,但是对于设计师来说还是难以理解,https://www.uisdc.com/mac-sharing-creating-sketch-libraries/
6.InDesign中的CreativeCloudLibraries在Creative Cloud Libraries 中存储、同步和共享您最喜欢的 InDesign 资源。随时随地根据您的需要,访问、管理、协作并使用您的创意元素(颜色、文本样式或图形)。也可以和其他用户共享库,从而在项目中相互协作。通过 Creative Cloud Libraries,无论是在 InDesign CC 中https://helpx.adobe.com/cn/indesign/using/creative-cloud-libraries-sync-share-assets.chromeless.html
7.SeleniumSelenium automates browsers. That's it!http://www.seleniumhq.org/
8.[服务应用]出现errorwhileloadingsharedlibraries的处理方法[服务应用]出现error while loading shared libraries的处理方法 默认情况下,系统只会使用/lib和/usr/lib这两个目录下的库文件,通常通过源码包进行安装时,如果没有指定,会将库安装在/usr/local/lib目录下当运行程序需要链接动态库时,提示找不到相关的.so库,会提示报错。那么就需要将不在默认库目录中的目录添加到https://www.bilibili.com/read/cv13201495/
9.在动态库和静态库中使用模板(dynamiclibraries,staticlibraries)给大家介绍一下在动态库(dynamic libraries)和静态库(static libraries)使用模板(template)的用法和解决方案。GPT4.0+Midjourney绘画+国内大模型 会员永久免费使用!【 如果你想靠AI翻身,你先需要一个靠谱的工具!】动态导入库和静态库: 他们实质是不一样的东西。静态库本身就包含了实际执行代码、符号表等等 ,而对于https://www.jb51.net/article/128575.htm
10.SketchLibraries功能图文详解Mac教程因此要注意:如果在团队范围内使用Libraries,那么在编辑源文件当中的Symbols时要保持小心。高阶人员可能要对普通团队成员的访问权限进行把控,例如设置为“只读”(具体设置方式需要参考你所使用的同步工具的相关说明)。 将Library Symbols本地化 如果你希望在不影响Library源文件的情况下对Symbols进行修改,那么在上文的对话https://mac.wmzhe.com/article/10085.html
11.使用ChromeWebView构建移动应用Chrome,WebDevLibraries使用Chrome WebView 构建移动应用 我们都知道,开发者在过去为 WebView 构建时遇到过的问题:HTML5 功能有限、无调试工具、构建工具。随着 Android 4.4 (KitKat) 中引入由 Chromium 提供支持的 WebView,开发者现在可以使用大量新工具,以便使用 WebView 构建出色的原生应用。https://developers.google.cn/web/shows/cds/2013/build-mobile-apps-with-chrome-webview?hl=zh-cn
12.VSCode中进行Java开发(3):maven项目管理–就是这个范儿Include libraries 使用glob 模式描述要引用的库。 例如: "java.project.referencedLibraries": [ "library/**/*.jar", "/home/username/lib/foo.jar" ] 上述设置将添加工作区库文件夹中的所有 .jar 文件以及 foo.jar,从指定的绝对路径添加到项目的外部依赖项。 http://www.thisfaner.com/p/vs-code-maven/
13.FFmpegconfigure now fails if autodetect-libraries are requested but not found We strongly recommend users, distributors, and system integrators to upgrade unless they use current git master. October 30th, 2016, Results: Summer Of Code 2016. This has been a long time coming but we wanted to give ahttp://ffmpeg.org/
14.香港大学图书馆High Contrast AAA MyAccount @HKULBook A Spacee-Forms Good Evening! Find@HKULAuthor / TitleElectronic ResourcesReading ListSite SearchAdvanced Search Books & Articles+Books+Articles+Beyond HKU (HKALL + Interlibrary Loan) Pause 1of6 Tools Find@HKUL https://lib.hku.hk/
15.从诺奖到维C神话:一位天才科学家的荣与辱(上)澎湃号·湃客2. OSU Libraries. Linus Pauling Online. http://scarc.library.oregonstate.edu/digitalresources/pauling/. 版权说明:欢迎个人转发,任何形式的媒体或机构未经授权,不得转载和摘编。转载授权请在「返朴」微信公众号内联系后台。https://www.thepaper.cn/newsDetail_forward_5312529
16.pandaspandas pandasis a fast, powerful, flexible and easy to use open source data analysis and manipulation tool, built on top of thePythonprogramming language. Install pandas now! Getting started Install pandas Getting started Documentation User guidehttp://pandas.pydata.org/
17.VueDevTools使用指南Vue Devtools 整个界面和基本操作非常简单,与 Chrome 的开发这工具操作逻辑基本一致,下一节,我们来学习如何使用 Vue Devtools 对组件进行测试和修改。 扩展阅读:《https://kalacloud.com/blog/best-vue-ui-component-libraries/》 第4 步:使用 Devtools 测试对组件的更改 https://cloud.tencent.com/developer/article/1971126
18.夜雨玩转Sketch番外篇5:Libraries使用详解Sketch47版本,更新了重要的团队协作新功能——Libraries,可以说是共享版本的“Symbol”,它具备了所有symbol的特性,并在symbol的基础上支持团队编辑、调用,一起来看看怎么使用吧。 1.Libraries(图书馆)介绍 Libraries是sketch47版本推出的重要协作功能,它其实在一些sketch插件例如“Craft”中,已经出现过,Libraries支持把本https://www.jianshu.com/p/237759b640f7
19.效率用英语怎么说效率是指在给定投入和技术等条件下、最有效地使用资源以满足设定的愿望和需要的评价方式。那么效率用英语怎么说呢?一起来了解下吧: 【效率用英语怎么说】 productiveness; efficiency; productivity; workpiece ratio 例句: Her work is riddled with inefficiencies . https://www.qinxue365.com/yyxx/Spoken_English/520376.html
20.图文详解如何配置KeilMDK使用GCC编译代码Keil 默认使用的是 ARMCC 编译 MCU 工程代码。因此设置为 GCC 编译需要进行以下配置。 下载步骤 ARM GCC 编译器下载地址(复制链接到浏览器打开): https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads https://www.eet-china.com/mp/a209511.html
21.kubernetes多网卡方案之MultusCNI部署和基本使用Kubernetes文件中 delegates 的意义在于 Multus 会调用其 delegates 指定的插件来执行,这里还有一点需要说明下,如果/etc/cni/net.d/ 目录下有多个网络定义文件,CRI 只会加载按字典顺序排在第一位的文件(即插件),即默认情况下创建 Pod 时使用的是 Calico 插件配置网络。https://xie.infoq.cn/article/e1d6c58939f6b1973221083fd
22.package/library如何实现TreeShakeableHow To Make Tree Shakeable Libraries?blog.theodo.com/2021/04/library-tree-shaking/ 在Theodo,我们的目标是为用户创建可靠、快捷的应用程序。我们的一些计划就包括了:提高现有应用程序的性能。其中一项任务就是:通过Tree-Shaking技术优化公司内部的library,成功将所有的页面的打包文件,经gzip压缩后,降低500KB。https://zhuanlan.zhihu.com/p/405562576