Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 590|回复: 0

debian 安装 php 遇到的问题解决

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-6 11:05
  • 签到天数: 748 天

    [LV.9]以坛为家II

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    705612
    发表于 2021-4-20 10:09:43 | 显示全部楼层 |阅读模式

    项目中要用到zend Optimizer,但是目前只支持php5.2,Ubuntu默认安装的php版本为5.3,找了好多方法,终于借助下面这篇文章的方法成功的安装了5.2及5.3两个版本的php

    文章地址:http://zgadzaj.com/how-to-install-php-53-and-52-together-on-ubuntu-1204

     

    Although Drupals 7+ run smoothly on PHP 5.3, Drupal 6 still feels much better with PHP 5.2. Even though D6 core is compatible with PHP 5.3 for quite some time now, a lot of contributes modules still get nasty hiccup when asked to run on the newer version. Therefore developing for both D7 and D6 at the same time becomes much less painful when running both versions of PHP in parallel.

    One way of doing it is using mod_php5 Apache module to serve PHP 5.3 applications, while running PHP 5.2 applications using fastcgimodule. Under Ubuntu 12.04 this can be achieved by installing PHP 5.3 from the repositories and manually compiling and installing PHP 5.2 afterwards.

    Installing PHP 5.3 from repositories is fairly easy process, which you most probably already have under your belt, so let's just say that it looks more or less like this:

    sudo apt-get install php5 php5-common php5-cli php5-dev php5-mysql phpmyadmin php5-pgsql phppgadmin php5-gd php5-mcrypt php5-curl php-pear libapache2-mod-php5 php5-xdebug php5-codesniffer

    What is much more interesting though, and what this post will focus on, is how to add PHP 5.2 to the whole picture and make both those versions work nicely together.

    Please note that this tutorial is for Apache's  name-based virtual hosts, and essentially leaves PHP 5.3 enabled globally while allowing to use PHP 5.2 on specific, selected virtual hosts only.

    Download PHP sources

    Let's then start with downloading PHP 5.2 sources from Unsupported Historical Releases list.

    I have originally started with version 5.2.10 (as it is the same version that we have on our production servers), but then was stopped short by OpenSSL error during configuration stage:

    /usr/include/openssl/conf.h:132:7: note: expected 'struct lhash_st_CONF_VALUE *' but argument is of type 'int *'
    make: *** [ext/openssl/openssl.lo] Error 1

    to which I was not able to find any good fix (relatively easy to apply anyway), so finally ended up with the most recent version from 5.2 branch - 5.2.17, where those errors haven't occured anymore.

    Let's then download and uncompress PHP sources into ~/Downloads/php-5.2.17 directory:

    mkdir -p ~/Downloads/php-5.2.17
    cd ~/Downloads/php-5.2.17
    wget http://museum.php.net/php5/php-5.2.17.tar.gz
    tar
     zxf php-5.2.17.tar.gz

    Configure

    Time to configure the package. Example ./configure call could look as follows:

    sudo ./configure \
      --prefix=/usr/share/php52 \
      --datadir=/usr/share/php52 \
      --mandir=/usr/share/man \
      --bindir=/usr/bin/php52 \
      --with-libdir=lib64 \
      --includedir=/usr/include \
      --sysconfdir=/etc/php52/apache2 \
      --with-config-file-path=/etc/php52/cli \
      --with-config-file-scan-dir=/etc/php52/conf.d \
      --localstatedir=/var \
      --disable-debug \
      --with-regex=php \
      --disable-rpath \
      --disable-static \
      --disable-posix \
      --with-pic \
      --with-layout=GNU \
      --with-pear=/usr/share/php \
      --enable-calendar \
      --enable-sysvsem \
      --enable-sysvshm \
      --enable-sysvmsg \
      --enable-bcmath \
      --with-bz2 \
      --enable-ctype \
      --with-db4 \
      --without-gdbm \
      --with-iconv \
      --enable-exif \
      --enable-ftp \
      --enable-cli \
      --with-gettext \
      --enable-mbstring \
      --with-pcre-regex=/usr \
      --enable-shmop \
      --enable-sockets \
      --enable-wddx \
      --with-libxml-dir=/usr \
      --with-zlib \
      --with-kerberos=/usr \
      --with-openssl=/usr \
      --enable-soap \
      --enable-zip \
      --with-mhash \
      --with-exec-dir=/usr/lib/php5/libexec \
      --without-mm \
      --with-curl=shared,/usr \
      --with-zlib-dir=/usr \
      --with-gd=shared,/usr \
      --enable-gd-native-ttf \
      --with-gmp=shared,/usr \
      --with-jpeg-dir=shared,/usr \
      --with-xpm-dir=shared,/usr/X11R6 \
      --with-png-dir=shared,/usr \
      --with-freetype-dir=shared,/usr \
      --with-ttf=shared,/usr \
      --with-t1lib=shared,/usr \
      --with-ldap=shared,/usr \
      --with-mysql=shared,/usr \
      --with-mysqli=shared,/usr/bin/mysql_config \
      --with-pgsql=shared,/usr \
      --with-pspell=shared,/usr \
      --with-unixODBC=shared,/usr \
      --with-xsl=shared,/usr \
      --with-snmp=shared,/usr \
      --with-sqlite=shared,/usr \
      --with-tidy=shared,/usr \
      --with-xmlrpc=shared \
      --enable-pdo=shared \
      --without-pdo-dblib \
      --with-pdo-mysql=shared,/usr \
      --with-pdo-pgsql=shared,/usr \
      --with-pdo-odbc=shared,unixODBC,/usr \
      --with-pdo-dblib=shared,/usr \
      --enable-force-cgi-redirect  --enable-fastcgi \
      --with-libdir=/lib/x86_64-linux-gnu \
      --with-pdo-sqlite=shared \
      --with-sqlite=shared \
      --enable-ipv6 \
      --with-mcrypt \
      --with-imap-ssl

    Obviously you need to adapt it to yur specific needs by adding and/or removing relevant options. You can read more about options you want (or don't want) to include in PHP core configure options documentation.

    Configure errors

    Now, that probably didn't work out of the box, did it?

    In most cases quite a lot of dependencies will be missing. You can try to take care of them in one shot, if you don't care too much about installing a little too much compared to what is really needed:

    sudo apt-get install libxml2-dev libpcre3-dev libbz2-dev libcurl4-openssl-dev libdb4.8-dev libjpeg-dev libpng12-dev libxpm-dev libfreetype6-dev libmysqlclient-dev postgresql-server-dev-9.1 libt1-dev libgd2-xpm-dev libgmp-dev libsasl2-dev libmhash-dev unixodbc-dev freetds-dev libpspell-dev libsnmp-dev libtidy-dev libxslt1-dev libmcrypt-dev

    You can also remedy missing dependencies one by one, and install only those packages that are really needed.

    Let's go through some of the possible errors then (you can skip to the next section if your ./configure finished without any errors and displayed nice Thank you for using PHP at the end of its execution):

    • configure: error: xml2-config not found. Please check your libxml2 installation.

      This error message suggests you don't have libxml2 installed. What it really means though is that you don't have its developmentversion installed!

      Let's then search what we can find in available packages, what could help us resolve this issue:

      $ apt-cache search libxml2 | grep dev
      libcroco3-dev - Cascading Style Sheet (CSS) parsing and manipulation toolkit
      libxml++2.6-dev - C++ interface to the GNOME XML library (libxml2)
      libxml2-dev - Development files for the GNOME XML library
      libgdome2-cpp-smart-dev - C++ bindings for GDome2 DOM implementation
      libgdome2-dev - Development files for libgdome2
      libgdome2-ocaml-dev - OCaml bindings for GDome2 DOM implementation
      libgtkmathview-dev - rendering engine for MathML documents
      libsp-gxmlcpp-dev - S+P C++ wrapper for Gnome libxml2/libxslt

      What we are interested in here is libxml2-dev, let's install it then:

      sudo apt-get install libxml2-dev

      The same procedure applies to all other missing libraries as well, so I will include only final install calls from now on.
    • configure: error: Could not find pcre.h in /usr

      sudo apt-get install libpcre3-dev
    • configure: error: Please reinstall the BZip2 distribution

      sudo apt-get install libbz2-dev
    • configure: error: Please reinstall the libcurl distribution - easy.h should be in /include/curl/

      sudo apt-get install libcurl4-openssl-dev
    • configure: error: DBA: Could not find necessary header file(s).
      checking for db4 major version... configure: error: Header contains different version

      sudo apt-get install libdb4.8-dev
    • configure: error: libjpeg.(a|so) not found.

      sudo apt-get install libjpeg-dev
    • configure: error: libpng.(a|so) not found.

      sudo apt-get install libpng12-dev
    • configure: error: libXpm.(a|so) not found.

      sudo apt-get install libxpm-dev
    • configure: error: freetype.h not found.

      sudo apt-get install libfreetype6-dev
    • You need to install postgresql-server-dev-X.Y for building a server-side extension or libpq-dev for building a client-side application.
      configure: error: Cannot find libpq-fe.h. Please specify correct PostgreSQL installation path

      sudo apt-get install postgresql-server-dev-9.1

      Make sure you check result of apt-cache search especially in case of this error, as there could be later version of PostgreSQL available.
    • checking for FreeType 1 support... no - FreeType 2.x is to be used instead
      configure: error: Your t1lib distribution is not installed correctly. Please reinstall it.

      sudo apt-get install libt1-dev
    • configure: error: Unable to find gd.h anywhere under /usr

      sudo apt-get install libgd2-xpm-dev
    • configure: error: Unable to locate gmp.h

      sudo apt-get install libgmp-dev
    • configure: error: Cannot find MySQL header files under /usr.
      Note that the MySQL client library is not bundled anymore!

      sudo apt-get install libmysqlclient-dev
    • configure: error: sasl.h not found!

      sudo apt-get install libsasl2-dev
    • configure: error: Please reinstall libmhash - I cannot find mhash.h

      sudo apt-get install libmhash-dev
    • checking for unixODBC support... configure: error: ODBC header file '/usr/include/sqlext.h' not found!

      sudo apt-get install unixodbc-dev
    • configure: error: Directory /usr is not a FreeTDS installation directory

      sudo apt-get install freetds-dev
    • configure: error: Cannot find pspell

      sudo apt-get install libpspell-dev
    • configure: error: SNMP sanity check failed. Please check config.log for more information.

      sudo apt-get install libsnmp-dev
    • configure: error: Cannot find libtidy

      sudo apt-get install libtidy-dev
    • configure: error: xslt-config not found. Please reinstall the libxslt >= 1.1.0 distribution

      sudo apt-get install libxslt1-dev
    • configure: error: mcrypt.h not found. Please reinstall libmcrypt.

      sudo apt-get install libmcrypt-dev
    • configure: error: Cannot find OpenSSL's libraries

      Add following switch to your ./configure options (optionally updating the path to reflect your system):

      --with-libdir=/lib/x86_64-linux-gnu
    • configure: error: You've configured extension pdo_sqlite to build statically, but it depends on extension pdo, which you've configured to build shared. You either need to build pdo_sqlite shared or build pdo statically for the build to be successful.

      Add following switches to your ./configure options:

        --with-pdo-sqlite=shared
        --with-sqlite=shared

    Make

    Everything configured properly and without errors? Then it is time to compile (and go for a coffee while it is running):

    sudo make

    Now sipping your coffee wait for approaching errors...

    Make errors

    Yes, things can go awry here too. And most probably will.

    There are two make errors and one warning you are most probably going to experience:

    • ext/openssl/.libs/xp_ssl.o: In function `php_openssl_setup_crypto':
      ext/openssl/xp_ssl.c:357: undefined reference to `SSLv2_server_method'
      ext/openssl/xp_ssl.c:337: undefined reference to `SSLv2_client_method'

      This is due to PHP bug #54736, which could be easily resolved using patch debian_patches_disable_SSLv2_for_openssl_1_0_0.patchattached to that bug report.

      Download this patch to your ~/Downloads/php-5.2.17 directory, and execute:

      patch -p1 < debian_patches_disable_SSLv2_for_openssl_1_0_0.patch.patch

      You should see friendly success messages like these:

      patching file ext/openssl/xp_ssl.c
      Hunk #1 succeeded at 332 (offset 4 lines).
      Hunk #2 succeeded at 354 (offset 4 lines).
      Hunk #3 succeeded at 583 (offset -50 lines).
      Hunk #4 succeeded at 819 (offset -98 lines).
    • ext/gmp/gmp.c: In function ‘zif_gmp_random’:
      ext/gmp/gmp.c:1399:69: error: ‘__GMP_BITS_PER_MP_LIMB’ undeclared (first use in this function)
      ext/gmp/gmp.c:1399:69: note: each undeclared identifier is reported only once for each function it appears in

      This time it's PHP bug #50990. In one of comments there susan dot smith dot dev at gmail dot com suggested solution which works and does its magic:

      I solved replacing the outdated __GMP_BITS_PER_MP_LIMB defined constant with GMP_LIMB_BITS. The latter is present in all previous versions, and MPIR define it too.

      You have to edit file ext/gmp/gmp.c and replace one occurence of __GMP_BITS_PER_MP_LIMB with GMP_LIMB_BITS, in my case it was in line 1399.

    • ext/zip/lib/.libs/zip_dirent.o: In function `memset':
      /usr/include/x86_64-linux-gnu/bits/string3.h:82: warning: memset used with constant zero length parameter; this could be due to transposed parameters

      Finally PHP bug #53568, with a pretty easy fix: edit file ext/zip/lib/zip_dirent.c and in line 478 replace:

      memset(&tm, sizeof(tm), 0);

      with
      memset(&tm, 0, sizeof(tm));

    There, no more errors!

    Install

    The simplest way of installing your new shiny PHP 5.2 now is:

    sudo make install

    Alternatively, if you plan to repeat the same installation again on other machines, or just want to keep the installation package file for the future, you can run:

    sudo checkinstall

    which, together with installing new PHP, would also create  .debpackage file in your current directory.

    Whichever way you choose, now you have PHP 5.2 installed in /usr/bin/php52

    Apache conf files

    The /etc/php52/apache2/ configuration directory for PHP 5.2 should have already been created during the installation process (create it now if it is not the case). Now you need to let PHP 5.2 use the same extensions as your version 5.3 is using:

    sudo ln -s /etc/php5/conf.d /etc/php52
    sudo ln -s /etc/php5/cli /etc/php52

    Copy example php.ini-recommended file provided with PHP installation into its new directory (which will be defined in the next step):

    sudo cp php.ini-recommended /etc/php52/apache2/php.ini

    and make required amends to it if need be.

    Apache and FastCGI

    Next thing to do is to set up Apache to run PHP 5.2 using FastCGI. Start with installing fastcgi module:

    sudo apt-get install libapache2-mod-fastcgi

    Make sure all required modules are enabled and restart Apache:

    sudo a2enmod cgi fastcgi actions
    sudo service apache2 restart

    Create a wrapper script called php52-cgi to run the fastcgi enabled version of PHP and place it under /usr/lib/cgi-bin/, with the following content:

    #!/bin/sh
    PHPRC="/etc/php52/apache2/"
    export PHPRC
    PHP_FCGI_CHILDREN=4
    export PHP_FCGI_CHILDREN
    PHP_FCGI_MAX_REQUESTS=5000
    export PHP_FCGI_MAX_REQUESTS
    exec /usr/bin/php52/php-cgi

    The PHPRC parameter tells PHP 5.2 where to look for a php.ini.
    The PHP_FCGI_CHILDREN pre-forks threads with the FastCGI process manager.
    The PHP_FCGI_MAX_REQUESTS limits the requests.
    Finally the exec executes php. You can read more about this on FastCGI site.

    Make sure the file is executable:

    sudo chmod +x /usr/lib/cgi-bin/php52-cgi

    Finally create new include file /etc/apache2/php52.conf, which will be used by those virtual hosts that need to run off PHP 5.2. Add the following content to it:

    # Include file for virtual hosts that need to run PHP 5.2

    <FilesMatch "\.php">
       SetHandler application/x-httpd-php5
    </FilesMatch>

    ScriptAlias /php52-cgi /usr/lib/cgi-bin/php52-cgi
    Action application/x-httpd-php5 /php52-cgi
    AddHandler application/x-httpd-php5 .php

    The FilesMatch forces the handler to execute files with the suffix .php. This must be set, because if mod_php with PHP 5.3 is installed, the module interprets the php file and not the cgi script.
    The ScriptAlias sets the path to the cgi script.
    The AddHandler registers a new handler.
    The Action activates the cgi script for the files passed from the handler.

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-17 07:58 , Processed in 0.071600 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表