WIP tests on Docker
[plcapi.git] / tests / ci / setup / setup_php.sh
1 #!/bin/sh
2
3 set -e
4
5 configure_php_ini() {
6     # @todo make this idempotent so that it can be run multiple times in a row
7     echo "cgi.fix_pathinfo = 1" >> "${1}"
8     echo "always_populate_raw_post_data = -1" >> "${1}"
9
10     # @todo this only disables xdebug for CLI. To do the same for the FPM config as well, should we use instead `phpdismod` ?
11     XDEBUG_INI=$(php -i | grep xdebug.ini | grep -v '=>' | head -1)
12     if [ "$XDEBUG_INI" != "" ]; then
13         XDEBUG_INI="$(echo "$XDEBUG_INI" | tr -d ',')"
14         mv "$XDEBUG_INI" "$XDEBUG_INI.bak";
15     fi
16 }
17
18 if ! which php >/dev/null; then
19
20     # install php
21     PHP_VERSION="$1"
22     DEBIAN_VERSION="$(lsb_release -s -c)"
23
24     if [ "${PHP_VERSION}" = default ]; then
25         if [ "${DEBIAN_VERSION}" = jessie -o "${DEBIAN_VERSION}" = precise -o "${DEBIAN_VERSION}" = trusty ]; then
26             PHPSUFFIX=5
27         else
28             PHPSUFFIX=
29         fi
30         # @todo check for mbstring presence in php5 (jessie) packages
31         DEBIAN_FRONTEND=noninteractive apt-get install -y \
32             php${PHPSUFFIX} \
33             php${PHPSUFFIX}-cli \
34             php${PHPSUFFIX}-dom \
35             php${PHPSUFFIX}-curl \
36             php${PHPSUFFIX}-fpm \
37             php${PHPSUFFIX}-mbstring \
38             php${PHPSUFFIX}-xdebug
39     else
40         DEBIAN_FRONTEND=noninteractive apt-get install -y language-pack-en-base software-properties-common
41         LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/php
42         apt-get update
43
44         DEBIAN_FRONTEND=noninteractive apt-get install -y \
45             php${PHP_VERSION} \
46             php${PHP_VERSION}-cli \
47             php${PHP_VERSION}-dom \
48             php${PHP_VERSION}-curl \
49             php${PHP_VERSION}-fpm \
50             php${PHP_VERSION}-mbstring \
51             php${PHP_VERSION}-xdebug
52
53         update-alternatives --set php /usr/bin/php${PHP_VERSION}
54     fi
55
56     PHPVER=$(php -r 'echo implode(".",array_slice(explode(".",PHP_VERSION),0,2));' 2>/dev/null)
57
58     configure_php_ini /etc/php/${PHPVER}/fpm/php.ini
59
60     # use a nice name for the php-fpm service, so that it does not depend on php version running
61     service "php${PHPVER}-fpm" stop
62     ln -s "/etc/init.d/php${PHPVER}-fpm" /etc/init.d/php-fpm
63
64     # @todo shall we configure php-fpm?
65
66     service php-fpm start
67
68     # configure apache
69     a2enconf php${PHPVER}-fpm
70     service apache2 restart
71 fi
72
73 if [ -n "$TRAVIS" ]; then
74
75     # php is already installed, via phpenv
76
77     PHPVER=$(phpenv version-name)
78
79     configure_php_ini ~/.phpenv/versions/${PHPVER}/etc/php.ini
80
81     # configure php-fpm
82     cp ~/.phpenv/versions/${PHPVER}/etc/php-fpm.conf.default ~/.phpenv/versions/${PHPVER}/etc/php-fpm.conf
83
84     # work around travis issue #3385
85     if [ -d ~/.phpenv/versions/${PHPVER}/etc/php-fpm.d ]; then
86         if [ "$TRAVIS_PHP_VERSION" = "7.0" -a -n "$(ls -A ~/.phpenv/versions/${PHPVER}/etc/php-fpm.d)" ]; then
87           cp ~/.phpenv/versions/${PHPVER}/etc/php-fpm.d/www.conf.default ~/.phpenv/versions/${PHPVER}/etc/php-fpm.d/www.conf
88         fi
89         if [ "$TRAVIS_PHP_VERSION" = "7.1" -a -n "$(ls -A ~/.phpenv/versions/${PHPVER}/etc/php-fpm.d)" ]; then
90           cp ~/.phpenv/versions/${PHPVER}/etc/php-fpm.d/www.conf.default ~/.phpenv/versions/${PHPVER}/etc/php-fpm.d/www.conf
91         fi
92         if [ "$TRAVIS_PHP_VERSION" = "7.2" -a -n "$(ls -A ~/.phpenv/versions/${PHPVER}/etc/php-fpm.d)" ]; then
93           cp ~/.phpenv/versions/${PHPVER}/etc/php-fpm.d/www.conf.default ~/.phpenv/versions/${PHPVER}/etc/php-fpm.d/www.conf
94         fi
95         if [ "$TRAVIS_PHP_VERSION" = "7.3" -a -n "$(ls -A ~/.phpenv/versions/${PHPVER}/etc/php-fpm.d)" ]; then
96           cp ~/.phpenv/versions/${PHPVER}/etc/php-fpm.d/www.conf.default ~/.phpenv/versions/${PHPVER}/etc/php-fpm.d/www.conf
97         fi
98     fi
99
100     ~/.phpenv/versions/${PHPVER}/sbin/php-fpm
101
102     # @todo configure apache for php-fpm via mod_proxy_fcgi
103 fi