溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

第四十九天:php-7.0編譯模塊的出錯

發(fā)布時間:2020-06-08 14:13:47 來源:網絡 閱讀:792 作者:Ohimma 欄目:web開發(fā)

小Q:雄關漫道真如鐵,而今邁步從頭越。從頭越,蒼山如海,殘陽如血。             ——***

目前php最新版本7.0,因為需要,所以我嘗試安裝了一下,期間也遇到了好多問題,其中一些問題和老的版本差不多,我就不一 一細說了,有問題的朋友可以給我留言,一塊探討;

-------------------------------------------------------------------------------------------------

第一:安裝完成之后找不到php-fpm.conf配置文件,其實好多關于fpm的配置文件都沒有,只是我的水平不高,只能意識到php-fpm.conf;當時我沒注意直接在解壓的源碼包里復制了一個大致類似的www.conf作為主配置文件,拷貝了一個啟動文件,稍微配置了一下倒也是能啟動成功,沒什么大問題。

直到我在給php加擴展模塊的時候出現了make編譯時一直提示少目錄文件報錯的問題;

【我在想是不是/usr/local/php/bin/phpizen生成./configure時也會生成一些make時需要的目錄文件,如果是這樣那么我的錯就出在php安裝的過程,是不是因為編譯php時漏掉了一些選項而導致phpize“生成”的不完全(其實我也感覺不是這的問題,不過不試試怎么知道呢),網上說也許是--enable-fpm的作用是開啟php的fastcgi功能即開啟php-fpm功能】

于是我又到了解壓php的目錄下,再次./configure --enable-fpm >> make >> make install;

完成之后意外的發(fā)現有了php-fpm.conf等文件,但是再次編譯模塊還是不成功,但也不是無功而返。

第二:(這是重點要說的)

一般下載php模塊去PECL,里邊的模塊都是可用的,都沒問題;

于是我下載好之后,開始編譯,首先用phpizen生成configure文件,然后./confoigure先預編譯一下,很成功沒什么問題;

之后make

[root@bogon memcache-3.0.8]# make
/bin/sh /usr/local/src/memcache-3.0.8/libtool --mode=compile cc -I/usr/local/include/php -I. -I/usr/local/src/memcache-3.0.8 -DPHP_ATOM_INC -I/usr/local/src/memcache-3.0.8/include -I/usr/local/src/memcache-3.0.8/main -I/usr/local/src/memcache-3.0.8 -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib  -DHAVE_CONFIG_H  -g -O2   -c /usr/local/src/memcache-3.0.8/memcache.c -o memcache.lo 
mkdir .libs
 cc -I/usr/local/include/php -I. -I/usr/local/src/memcache-3.0.8 -DPHP_ATOM_INC -I/usr/local/src/memcache-3.0.8/include -I/usr/local/src/memcache-3.0.8/main -I/usr/local/src/memcache-3.0.8 -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -DHAVE_CONFIG_H -g -O2 -c /usr/local/src/memcache-3.0.8/memcache.c  -fPIC -DPIC -o .libs/memcache.o
In file included from /usr/local/src/memcache-3.0.8/php_memcache.h:34:0,
                 from /usr/local/src/memcache-3.0.8/memcache.c:30:
/usr/local/src/memcache-3.0.8/memcache_pool.h:45:47: 致命錯誤:ext/standard/php_smart_str_public.h:沒有那個文件或目錄
 #include "ext/standard/php_smart_str_public.h"
                                               ^
編譯中斷。
make: *** [memcache.lo] 錯誤 1

出現這種錯誤,缺少這個文件,剛開始沒多想,去網上找了一個這個文件的模板,添加了進來,

之后再make出現這種情況

第四十九天:php-7.0編譯模塊的出錯

這就游戲有些棘手了,因為不可能一個文件一個文件去改配置啊,所以錯誤不是在這;

在此之前我用低版本的L N M P編譯過memcache,一樣的源碼包,很正常,于是我又開了一個低版本的php測試,其他的配置都同高版本一樣(只有系統版本和php版本不一樣),memcache包也用的相同的;每一把都很正常的就ok了;

于是版本出的問題占百分之八十了。

我用make出的錯誤,去比較兩個模塊內的文件

第四十九天:php-7.0編譯模塊的出錯

第四十九天:php-7.0編譯模塊的出錯

左邊是正常版本,右邊是最新版本php的文件列表,很清楚地知道m(xù)ake調用的php_smart_str_public.h跟老版本中的文件對應,而新版本中也有這個文件,只不過名字變了,所以找不到;

當我把新版的文件改成對應的名字之后,文件便存在了,只不過他又會去報各種配置參數的錯(如上),所以在此我就確定是因為php版本太高,已經和PECL內的模塊編譯對應的文件和參數不再匹配,而導致了這一系列的錯誤。

不過幸好的是,php7.0本身就自帶Zend模塊,只需在配置文件php.ini中打開選項即可

第四十九天:php-7.0編譯模塊的出錯

問題就到這了。。。。。。。。。。






向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI