Compare commits

..

9 Commits
0.92 ... 0.93

Author SHA1 Message Date
cytopia
7f018000be Merge pull request #134 from devilbox/release-0.93
Release 0.93
2019-11-19 09:19:08 +01:00
cytopia
7f3a6f3e64 Disable imagick for 5.3, 5.4 and 5.5 due to segfaults 2019-11-18 23:48:06 +01:00
cytopia
83124e8632 Add more gd tests 2019-11-18 17:58:00 +01:00
cytopia
806b408878 Only check imagick against supported versions 2019-11-18 17:44:11 +01:00
cytopia
3d15aea68b Fix gd for PHP 7.4 and PHP 8.0 2019-11-18 16:52:55 +01:00
cytopia
db7c4e6334 Add module integration tests 2019-11-18 16:52:35 +01:00
cytopia
2c6e013fad Adding Ghostscript 2019-11-17 22:48:50 +01:00
cytopia
b35f3a822c Merge pull request #132 from fschndr/master
Fixed typo in MySQL backup example
2019-11-16 13:23:32 +01:00
Fabian
f20932ce74 Fixed typo in MySQL backup example
The container-side path of the volume had a typo in the README.md example.
2019-11-13 10:51:52 +01:00
28 changed files with 428 additions and 64 deletions

View File

@@ -26,7 +26,6 @@ RUN set -eux \
libjpeg-dev \
libkrb5-dev \
libldap2-dev \
libmagickwand-dev \
libmcrypt-dev \
libmemcached-dev \
libnghttp2-dev \
@@ -203,17 +202,6 @@ RUN set -eux \
&& true
# -------------------- Installing PHP Extension: imagick --------------------
RUN set -eux \
# Installation: Version specific
# Type: PECL extension
# Default: Pecl command
&& pecl install imagick-3.3.0 \
# Enabling
&& docker-php-ext-enable imagick \
&& true
# -------------------- Installing PHP Extension: imap --------------------
RUN set -eux \
# Generic pre-command
@@ -689,7 +677,6 @@ RUN set -eux \
libfreetype6 \
libicu52 \
libjpeg62-turbo \
libmagickwand-6.q16-2 \
libmcrypt4 \
libmemcachedutil2 \
libmysqlclient18 \
@@ -783,8 +770,6 @@ RUN set -eux \
&& php-fpm -m | grep -oiE '^iconv$' \
&& php -m | grep -oiE '^igbinary$' \
&& php-fpm -m | grep -oiE '^igbinary$' \
&& php -m | grep -oiE '^imagick$' \
&& php-fpm -m | grep -oiE '^imagick$' \
&& php -m | grep -oiE '^imap$' \
&& php-fpm -m | grep -oiE '^imap$' \
&& php -m | grep -oiE '^interbase$' \

View File

@@ -26,7 +26,6 @@ RUN set -eux \
libjpeg-dev \
libkrb5-dev \
libldap2-dev \
libmagickwand-dev \
libmcrypt-dev \
libmemcached-dev \
libnghttp2-dev \
@@ -203,17 +202,6 @@ RUN set -eux \
&& true
# -------------------- Installing PHP Extension: imagick --------------------
RUN set -eux \
# Installation: Version specific
# Type: PECL extension
# Default: Pecl command
&& pecl install imagick \
# Enabling
&& docker-php-ext-enable imagick \
&& true
# -------------------- Installing PHP Extension: imap --------------------
RUN set -eux \
# Generic pre-command
@@ -697,7 +685,6 @@ RUN set -eux \
libfreetype6 \
libicu52 \
libjpeg62-turbo \
libmagickwand-6.q16-2 \
libmcrypt4 \
libmemcachedutil2 \
libmysqlclient18 \
@@ -791,8 +778,6 @@ RUN set -eux \
&& php-fpm -m | grep -oiE '^iconv$' \
&& php -m | grep -oiE '^igbinary$' \
&& php-fpm -m | grep -oiE '^igbinary$' \
&& php -m | grep -oiE '^imagick$' \
&& php-fpm -m | grep -oiE '^imagick$' \
&& php -m | grep -oiE '^imap$' \
&& php-fpm -m | grep -oiE '^imap$' \
&& php -m | grep -oiE '^interbase$' \

View File

@@ -26,7 +26,6 @@ RUN set -eux \
libjpeg-dev \
libkrb5-dev \
libldap2-dev \
libmagickwand-dev \
libmcrypt-dev \
libmemcached-dev \
libnghttp2-dev \
@@ -194,17 +193,6 @@ RUN set -eux \
&& true
# -------------------- Installing PHP Extension: imagick --------------------
RUN set -eux \
# Installation: Version specific
# Type: PECL extension
# Default: Pecl command
&& pecl install imagick \
# Enabling
&& docker-php-ext-enable imagick \
&& true
# -------------------- Installing PHP Extension: imap --------------------
RUN set -eux \
# Generic pre-command
@@ -685,7 +673,6 @@ RUN set -eux \
libfreetype6 \
libicu52 \
libjpeg62-turbo \
libmagickwand-6.q16-2 \
libmcrypt4 \
libmemcachedutil2 \
libmysqlclient18 \
@@ -779,8 +766,6 @@ RUN set -eux \
&& php-fpm -m | grep -oiE '^iconv$' \
&& php -m | grep -oiE '^igbinary$' \
&& php-fpm -m | grep -oiE '^igbinary$' \
&& php -m | grep -oiE '^imagick$' \
&& php-fpm -m | grep -oiE '^imagick$' \
&& php -m | grep -oiE '^imap$' \
&& php-fpm -m | grep -oiE '^imap$' \
&& php -m | grep -oiE '^interbase$' \

View File

@@ -139,7 +139,7 @@ RUN set -eux \
# Installation: Version specific
# Type: Built-in extension
# Custom: configure command
&& docker-php-ext-configure gd --with-gd --with-webp-dir=/usr --with-jpeg-dir=/usr --with-png-dir=/usr --with-zlib-dir=/usr --with-xpm-dir=/usr --with-freetype-dir=/usr --enable-gd-jis-conv \
&& docker-php-ext-configure gd --enable-gd --with-webp --with-jpeg --with-xpm --with-freetype --enable-gd-jis-conv \
# Installation
&& docker-php-ext-install -j$(getconf _NPROCESSORS_ONLN) gd \
&& true

View File

@@ -104,7 +104,7 @@ RUN set -eux \
# Installation: Version specific
# Type: Built-in extension
# Custom: configure command
&& docker-php-ext-configure gd --with-gd --with-webp-dir=/usr --with-jpeg-dir=/usr --with-png-dir=/usr --with-zlib-dir=/usr --with-xpm-dir=/usr --with-freetype-dir=/usr --enable-gd-jis-conv \
&& docker-php-ext-configure gd --enable-gd --with-webp --with-jpeg --with-xpm --with-freetype --enable-gd-jis-conv \
# Installation
&& docker-php-ext-install -j$(getconf _NPROCESSORS_ONLN) gd \
&& true

View File

@@ -72,6 +72,7 @@ RUN set -eux \
git \
git-flow \
git-svn \
ghostscript \
graphviz \
hostname \
htop \

View File

@@ -72,6 +72,7 @@ RUN set -eux \
git \
git-flow \
git-svn \
ghostscript \
graphviz \
hostname \
htop \

View File

@@ -72,6 +72,7 @@ RUN set -eux \
git \
git-flow \
git-svn \
ghostscript \
graphviz \
hostname \
htop \

View File

@@ -72,6 +72,7 @@ RUN set -eux \
git \
git-flow \
git-svn \
ghostscript \
graphviz \
hostname \
htop \

View File

@@ -71,6 +71,7 @@ RUN set -eux \
git \
git-flow \
git-svn \
ghostscript \
graphviz \
hostname \
htop \

View File

@@ -71,6 +71,7 @@ RUN set -eux \
git \
git-flow \
git-svn \
ghostscript \
graphviz \
hostname \
htop \

View File

@@ -71,6 +71,7 @@ RUN set -eux \
git \
git-flow \
git-svn \
ghostscript \
graphviz \
hostname \
htop \

View File

@@ -71,6 +71,7 @@ RUN set -eux \
git \
git-flow \
git-svn \
ghostscript \
graphviz \
hostname \
htop \

View File

@@ -71,6 +71,7 @@ RUN set -eux \
git \
git-flow \
git-svn \
ghostscript \
graphviz \
hostname \
htop \

View File

@@ -71,6 +71,7 @@ RUN set -eux \
git \
git-flow \
git-svn \
ghostscript \
graphviz \
hostname \
htop \

View File

@@ -71,6 +71,7 @@ RUN set -eux \
git \
git-flow \
git-svn \
ghostscript \
graphviz \
hostname \
htop \

View File

@@ -607,17 +607,17 @@ Check out this table to see which Docker image provides what PHP modules.
<tr>
<th>5.3</th>
<td id="53-base">Core, ctype, curl, date, dom, ereg, fileinfo, filter, hash, iconv, json, libxml, mysql, mysqlnd, openssl, pcre, PDO, pdo_sqlite, Phar, posix, readline, recode, Reflection, session, SimpleXML, SPL, SQLite, sqlite3, standard, tokenizer, xml, xmlreader, xmlwriter, zlib</td>
<td id="53-mods">amqp, apc, apcu, bcmath, bz2, calendar, Core, ctype, curl, date, dba, dom, enchant, ereg, exif, fileinfo, filter, ftp, gd, gettext, gmp, hash, iconv, igbinary, imagick, imap, interbase, intl, ioncube, json, ldap, libxml, mbstring, mcrypt, memcache, memcached, mongo, mongodb, msgpack, mysql, mysqli, mysqlnd, OAuth, oci8, openssl, pcntl, pcre, PDO, pdo_dblib, PDO_Firebird, pdo_mysql, pdo_pgsql, pdo_sqlite, pgsql, phalcon, Phar, posix, pspell, rdkafka, readline, recode, redis, Reflection, session, shmop, SimpleXML, snmp, soap, sockets, SPL, SQLite, sqlite3, standard, swoole, sysvmsg, sysvsem, sysvshm, tidy, tokenizer, uploadprogress, wddx, xdebug, xml, xmlreader, xmlrpc, xmlwriter, xsl, Zend OPcache, zip, zlib</td>
<td id="53-mods">amqp, apc, apcu, bcmath, bz2, calendar, Core, ctype, curl, date, dba, dom, enchant, ereg, exif, fileinfo, filter, ftp, gd, gettext, gmp, hash, iconv, igbinary, imap, interbase, intl, ioncube, json, ldap, libxml, mbstring, mcrypt, memcache, memcached, mongo, mongodb, msgpack, mysql, mysqli, mysqlnd, OAuth, oci8, openssl, pcntl, pcre, PDO, pdo_dblib, PDO_Firebird, pdo_mysql, pdo_pgsql, pdo_sqlite, pgsql, phalcon, Phar, posix, pspell, rdkafka, readline, recode, redis, Reflection, session, shmop, SimpleXML, snmp, soap, sockets, SPL, SQLite, sqlite3, standard, swoole, sysvmsg, sysvsem, sysvshm, tidy, tokenizer, uploadprogress, wddx, xdebug, xml, xmlreader, xmlrpc, xmlwriter, xsl, Zend OPcache, zip, zlib</td>
</tr>
<tr>
<th>5.4</th>
<td id="54-base">Core, ctype, curl, date, dom, ereg, fileinfo, filter, hash, iconv, json, libxml, mysqlnd, openssl, pcre, PDO, pdo_sqlite, Phar, posix, readline, recode, Reflection, session, SimpleXML, SPL, sqlite3, standard, tokenizer, xml, xmlreader, xmlwriter, zlib</td>
<td id="54-mods">amqp, apc, apcu, bcmath, bz2, calendar, Core, ctype, curl, date, dba, dom, enchant, ereg, exif, fileinfo, filter, ftp, gd, gettext, gmp, hash, iconv, igbinary, imagick, imap, interbase, intl, ioncube, json, ldap, libxml, mbstring, mcrypt, memcache, memcached, mongo, mongodb, msgpack, mysql, mysqli, mysqlnd, OAuth, oci8, openssl, pcntl, pcre, PDO, pdo_dblib, PDO_Firebird, pdo_mysql, pdo_pgsql, pdo_sqlite, pgsql, phalcon, Phar, posix, pspell, rdkafka, readline, recode, redis, Reflection, session, shmop, SimpleXML, snmp, soap, sockets, SPL, sqlite3, standard, swoole, sysvmsg, sysvsem, sysvshm, tidy, tokenizer, uploadprogress, wddx, xdebug, xml, xmlreader, xmlrpc, xmlwriter, xsl, Zend OPcache, zip, zlib</td>
<td id="54-mods">amqp, apc, apcu, bcmath, bz2, calendar, Core, ctype, curl, date, dba, dom, enchant, ereg, exif, fileinfo, filter, ftp, gd, gettext, gmp, hash, iconv, igbinary, imap, interbase, intl, ioncube, json, ldap, libxml, mbstring, mcrypt, memcache, memcached, mongo, mongodb, msgpack, mysql, mysqli, mysqlnd, OAuth, oci8, openssl, pcntl, pcre, PDO, pdo_dblib, PDO_Firebird, pdo_mysql, pdo_pgsql, pdo_sqlite, pgsql, phalcon, Phar, posix, pspell, rdkafka, readline, recode, redis, Reflection, session, shmop, SimpleXML, snmp, soap, sockets, SPL, sqlite3, standard, swoole, sysvmsg, sysvsem, sysvshm, tidy, tokenizer, uploadprogress, wddx, xdebug, xml, xmlreader, xmlrpc, xmlwriter, xsl, Zend OPcache, zip, zlib</td>
</tr>
<tr>
<th>5.5</th>
<td id="55-base">Core, ctype, curl, date, dom, ereg, fileinfo, filter, ftp, hash, iconv, json, libxml, mbstring, mysqlnd, openssl, pcre, PDO, pdo_sqlite, Phar, posix, readline, Reflection, session, SimpleXML, SPL, sqlite3, standard, tokenizer, xml, xmlreader, xmlwriter, zlib</td>
<td id="55-mods">amqp, apc, apcu, bcmath, bz2, calendar, Core, ctype, curl, date, dba, dom, enchant, ereg, exif, fileinfo, filter, ftp, gd, gettext, gmp, hash, iconv, igbinary, imagick, imap, interbase, intl, ioncube, json, ldap, libxml, mbstring, mcrypt, memcache, memcached, mongo, mongodb, msgpack, mysql, mysqli, mysqlnd, OAuth, oci8, openssl, pcntl, pcre, PDO, pdo_dblib, PDO_Firebird, pdo_mysql, pdo_pgsql, pdo_sqlite, pgsql, phalcon, Phar, posix, pspell, rdkafka, readline, recode, redis, Reflection, session, shmop, SimpleXML, snmp, soap, sockets, SPL, sqlite3, standard, swoole, sysvmsg, sysvsem, sysvshm, tidy, tokenizer, uploadprogress, wddx, xdebug, xml, xmlreader, xmlrpc, xmlwriter, xsl, Zend OPcache, zip, zlib</td>
<td id="55-mods">amqp, apc, apcu, bcmath, bz2, calendar, Core, ctype, curl, date, dba, dom, enchant, ereg, exif, fileinfo, filter, ftp, gd, gettext, gmp, hash, iconv, igbinary, imap, interbase, intl, ioncube, json, ldap, libxml, mbstring, mcrypt, memcache, memcached, mongo, mongodb, msgpack, mysql, mysqli, mysqlnd, OAuth, oci8, openssl, pcntl, pcre, PDO, pdo_dblib, PDO_Firebird, pdo_mysql, pdo_pgsql, pdo_sqlite, pgsql, phalcon, Phar, posix, pspell, rdkafka, readline, recode, redis, Reflection, session, shmop, SimpleXML, snmp, soap, sockets, SPL, sqlite3, standard, swoole, sysvmsg, sysvsem, sysvshm, tidy, tokenizer, uploadprogress, wddx, xdebug, xml, xmlreader, xmlrpc, xmlwriter, xsl, Zend OPcache, zip, zlib</td>
</tr>
<tr>
<th>5.6</th>
@@ -1228,7 +1228,7 @@ $ docker run -d \
-e MYSQL_BACKUP_USER=root \
-e MYSQL_BACKUP_PASS=somepass \
-e MYSQL_BACKUP_HOST=mysql \
-v ~/backups:/shared/backsup \
-v ~/backups:/shared/backups \
--name php \
-t devilbox/php-fpm:7.2-work

View File

@@ -85,6 +85,7 @@ RUN set -eux \
git \
git-flow \
git-svn \
ghostscript \
graphviz \
hostname \
htop \

View File

@@ -295,11 +295,11 @@ extensions_available:
configure: --with-gd --with-webp-dir=/usr --with-jpeg-dir=/usr --with-png-dir=/usr --with-zlib-dir=/usr --with-xpm-dir=/usr --with-freetype-dir=/usr --enable-gd-jis-conv
7.4:
type: builtin
configure: --with-gd --with-webp-dir=/usr --with-jpeg-dir=/usr --with-png-dir=/usr --with-zlib-dir=/usr --with-xpm-dir=/usr --with-freetype-dir=/usr --enable-gd-jis-conv
configure: --enable-gd --with-webp --with-jpeg --with-xpm --with-freetype --enable-gd-jis-conv
run_dep: [libpng16-16, libjpeg62-turbo, libxpm4, libvpx4, libfreetype6, libwebp6]
8.0:
type: builtin
configure: --with-gd --with-webp-dir=/usr --with-jpeg-dir=/usr --with-png-dir=/usr --with-zlib-dir=/usr --with-xpm-dir=/usr --with-freetype-dir=/usr --enable-gd-jis-conv
configure: --enable-gd --with-webp --with-jpeg --with-xpm --with-freetype --enable-gd-jis-conv
run_dep: [libpng16-16, libjpeg62-turbo, libxpm4, libvpx4, libfreetype6, libwebp6]
all:
type: builtin
@@ -340,17 +340,7 @@ extensions_available:
all:
type: pecl
imagick:
disabled: [5.2, 8.0]
5.3:
type: pecl
version: 3.3.0
run_dep: [libmagickwand-6.q16-2]
5.4:
type: pecl
run_dep: [libmagickwand-6.q16-2]
5.5:
type: pecl
run_dep: [libmagickwand-6.q16-2]
disabled: [5.2, 5.3, 5.4, 5.5, 8.0] # 5.3, 5.4 and 5.5 segfaults
5.6:
type: pecl
run_dep: [libmagickwand-6.q16-3]

29
tests/mods/01-test-modules.sh Executable file
View File

@@ -0,0 +1,29 @@
#!/usr/bin/env bash
set -e
set -u
set -o pipefail
CWD="$(cd -P -- "$(dirname -- "$0")" && pwd -P)"
IMAGE="${1}"
VERSION="${2}"
FLAVOUR="${3}"
# shellcheck disable=SC1090
. "${CWD}/../.lib.sh"
# -------------------------------------------------------------------------------------------------
# Testing
# -------------------------------------------------------------------------------------------------
ERROR=0
for dir in $( ls -1 "${CWD}/modules/" ); do
if ! "${CWD}/modules.sh" "${IMAGE}" "${VERSION}" "${FLAVOUR}" "${dir}"; then
ERROR="$(( ERROR + 1 ))"
fi
done
exit "${ERROR}"

80
tests/mods/modules.sh Executable file
View File

@@ -0,0 +1,80 @@
#!/usr/bin/env bash
set -e
set -u
set -o pipefail
CWD="$(cd -P -- "$(dirname -- "$0")" && pwd -P)"
if [ "${#}" != "4" ]; then
>&2 echo "Error, requires 4 arguments: <IMAGE> <VERSION> <FLAVOUR> <MODULE>"
exit 1
fi
IMAGE="${1}"
VERSION="${2}"
FLAVOUR="${3}"
MODULE="${4}"
# shellcheck disable=SC1090
. "${CWD}/../.lib.sh"
SKIP_GD=("")
echo
echo "# ------------------------------------------------------------"
echo "# Testing: ${MODULE}"
echo "# ------------------------------------------------------------"
echo
# -------------------------------------------------------------------------------------------------
# Check skipping
# -------------------------------------------------------------------------------------------------
if [[ ${SKIP_GD[*]} =~ ${VERSION} ]]; then
echo "Skipping '${MODULE}' checks for PHP ${VERSION}"
exit 0
fi
# -------------------------------------------------------------------------------------------------
# Testing
# -------------------------------------------------------------------------------------------------
WORKDIR="/tmp/${MODULE}"
docker run \
--rm \
-e DEBUG_ENTRYPOINT=0 \
-e NEW_UID="$(id -u)" \
-e NEW_GID="$(id -g)" \
-v "${CWD}/modules/${MODULE}:${WORKDIR}" \
--entrypoint=sh \
--workdir="${WORKDIR}" \
"${IMAGE}:${VERSION}-${FLAVOUR}" \
-c 'find . -name "*.php" -type f -print0 | xargs -0 -n1 sh -c "
set -e
set -u
if [ -f \"\${1:-}\" ]; then
fail=0
printf \"[TEST] %s\" \"\${1}\"
if script -e -c \"php \${1}\" /dev/null 2>&1 | grep -Ei \"core|segmentation|fatal|except|err|warn|notice\" 2>&1 >/dev/null; then
fail=1
fi
if ! php \"\${1}\" 2>&1 | grep -E \"^OK$\" 2>&1 >/dev/null; then
fail=1
fi
if [ \"\${fail}\" != \"0\" ]; then
printf \"\\r[FAIL] %s\\n\" \"\${1}\"
php \"\${1}\" || true
exit 1
else
printf \"\\r[OK] %s\\n\" \"\${1}\"
fi
fi
" --'

View File

@@ -0,0 +1,26 @@
<?php
/**
* This page should print 'OK' if everything works,
* 'FAIL' or nothing if an error occured.
*/
ini_set('display_startup_errors', 1);
ini_set('display_errors', 1);
error_reporting(-1);
$a = '1.234';
$b = '5';
$num1 = bcadd($a, $b); // 6
$num2 = bcadd($a, $b, 4); // 6.2340
if ($num1 != 6) {
echo 'FAIL: ' . $num1;
exit(1);
}
if ($num2 != 6.2340) {
echo 'FAIL: ' . $num2;
exit(1);
}
echo 'OK';

View File

@@ -0,0 +1,20 @@
<?php
/**
* This page should print 'OK' if everything works,
* 'FAIL' or nothing if an error occured.
*/
ini_set('display_startup_errors', 1);
ini_set('display_errors', 1);
error_reporting(-1);
$arr = gd_info();
if (!isset($arr['FreeType Support'])) {
echo 'FAIL: FreeType Support array key does not exist.';
exit(1);
}
if ($arr['FreeType Support'] !== TRUE) {
echo 'FAIL: No FreeType support.';
exit(1);
}
echo 'OK';

View File

@@ -0,0 +1,67 @@
<?php
/**
* This page should print 'OK' if everything works,
* 'FAIL' or nothing if an error occured.
*/
ini_set('display_startup_errors', 1);
ini_set('display_errors', 1);
error_reporting(-1);
// Create a blank image and add some text
if ( ($im = imagecreatetruecolor(640, 480)) === FALSE ) {
echo 'FAIL: imagecreatetruecolor()';
exit(1);
}
// First we create our stamp image manually from GD
if ( ($stamp = imagecreatetruecolor(100, 70)) === FALSE ) {
echo 'FAIL: imagecreatetruecolor()';
exit(1);
}
if (!imagefilledrectangle($stamp, 0, 0, 99, 69, 0x0000FF)) {
echo 'FAIL: imagefilledrectangle()';
exit(1);
}
if (!imagefilledrectangle($stamp, 9, 9, 90, 60, 0xFFFFFF)) {
echo 'FAIL: imagefilledrectangle()';
exit(1);
}
if (!imagestring($stamp, 5, 20, 20, 'libGD', 0x0000FF)) {
echo 'FAIL: imagestring()';
exit(1);
}
if (!imagestring($stamp, 3, 20, 40, '(c) 2007-9', 0x0000FF)) {
echo 'FAIL: imagestring()';
exit(1);
}
// Set the margins for the stamp and get the height/width of the stamp image
$marge_right = 10;
$marge_bottom = 10;
$sx = imagesx($stamp);
$sy = imagesy($stamp);
// Merge the stamp onto our photo with an opacity of 50%
if (!imagecopymerge($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp), 50)) {
echo 'FAIL: imagecopymerge()';
exit(1);
}
// Save the image to file and free memory
if (!imagejpeg($im, 'image.jpg')) {
echo 'FAIL: imagejpeg()';
exit(1);
}
if (!imagedestroy($im)) {
echo 'FAIL: imagedestroy()';
unlink('image.jpg');
exit(1);
}
// Remove image after test
unlink('image.jpg');
echo 'OK';

View File

@@ -0,0 +1,67 @@
<?php
/**
* This page should print 'OK' if everything works,
* 'FAIL' or nothing if an error occured.
*/
ini_set('display_startup_errors', 1);
ini_set('display_errors', 1);
error_reporting(-1);
// Create a blank image and add some text
if ( ($im = imagecreatetruecolor(640, 480)) === FALSE ) {
echo 'FAIL: imagecreatetruecolor()';
exit(1);
}
// First we create our stamp image manually from GD
if ( ($stamp = imagecreatetruecolor(100, 70)) === FALSE ) {
echo 'FAIL: imagecreatetruecolor()';
exit(1);
}
if (!imagefilledrectangle($stamp, 0, 0, 99, 69, 0x0000FF)) {
echo 'FAIL: imagefilledrectangle()';
exit(1);
}
if (!imagefilledrectangle($stamp, 9, 9, 90, 60, 0xFFFFFF)) {
echo 'FAIL: imagefilledrectangle()';
exit(1);
}
if (!imagestring($stamp, 5, 20, 20, 'libGD', 0x0000FF)) {
echo 'FAIL: imagestring()';
exit(1);
}
if (!imagestring($stamp, 3, 20, 40, '(c) 2007-9', 0x0000FF)) {
echo 'FAIL: imagestring()';
exit(1);
}
// Set the margins for the stamp and get the height/width of the stamp image
$marge_right = 10;
$marge_bottom = 10;
$sx = imagesx($stamp);
$sy = imagesy($stamp);
// Merge the stamp onto our photo with an opacity of 50%
if (!imagecopymerge($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp), 50)) {
echo 'FAIL: imagecopymerge()';
exit(1);
}
// Save the image to file and free memory
if (!imagepng($im, 'image.png')) {
echo 'FAIL: imagepng()';
exit(1);
}
if (!imagedestroy($im)) {
echo 'FAIL: imagedestroy()';
unlink('image.png');
exit(1);
}
// Remove image after test
unlink('image.png');
echo 'OK';

View File

@@ -0,0 +1,50 @@
<?php
/**
* This page should print 'OK' if everything works,
* 'FAIL' or nothing if an error occured.
*/
ini_set('display_startup_errors', 1);
ini_set('display_errors', 1);
error_reporting(-1);
// Only available since 5.4.0
if (version_compare(PHP_VERSION, '5.4.0', '<')) {
echo 'OK';
exit(0);
}
// Create a blank image and add some text
if ( ($im = imagecreatetruecolor(120, 20)) === FALSE ) {
echo 'FAIL: imagecreatetruecolor()';
exit(1);
}
if ( ($text_color = imagecolorallocate($im, 233, 14, 91)) === FALSE ) {
echo 'FAIL: imagecolorallocate()';
exit(1);
}
if (!imagestring($im, 1, 5, 5, 'WebP with PHP', $text_color)) {
echo 'FAIL: imagestring()';
exit(1);
}
// Save the image
if (!imagewebp($im, 'image.webp')) {
echo 'FAIL: imagewebp()';
exit(1);
}
// Free up memory
if (!imagedestroy($im)) {
echo 'FAIL: imagedestroy()';
unlink('image.webp');
exit(1);
}
// Remove image after test
unlink('image.webp');
echo 'OK';

View File

@@ -0,0 +1,16 @@
<?php
/**
* This page should print 'OK' if everything works,
* 'FAIL' or nothing if an error occured.
*/
ini_set('display_startup_errors', 1);
ini_set('display_errors', 1);
error_reporting(-1);
// Check for XPM support
// https://www.php.net/manual/en/function.imagetypes.php
if (!(imagetypes() & IMG_XPM)) {
echo 'FAIL: No XMP support';
exit(1);
}
echo 'OK';

View File

@@ -0,0 +1,52 @@
<?php
/**
* This page should print 'OK' if everything works,
* 'FAIL' or nothing if an error occured.
*/
ini_set('display_startup_errors', 1);
ini_set('display_errors', 1);
error_reporting(-1);
// Only available since 5.3.0 (PHP 5.3, 5.4 and 5.5 segfaults)
if (version_compare(PHP_VERSION, '5.6.0', '<')) {
echo 'OK';
exit(0);
}
// FIXME: Currently not supported on PHP 8
if (version_compare(PHP_VERSION, '5.8.0', '>=')) {
echo 'OK';
exit(0);
}
/* Set width and height in proportion of genuine PHP logo */
$width = 400;
$height = 210;
/* Create an Imagick object with transparent canvas */
$img = new Imagick();
if ($img->newImage($width, $height, new ImagickPixel('transparent')) !== TRUE) {
echo 'FAIL: imagecreatetruecolor()';
exit(1);
}
/* New ImagickDraw instance for ellipse draw */
$draw = new ImagickDraw();
/* Set purple fill color for ellipse */
$draw->setFillColor('#777bb4');
/* Set ellipse dimensions */
$draw->ellipse($width / 2, $height / 2, $width / 2, $height / 2, 0, 360);
/* Draw ellipse onto the canvas */
$img->drawImage($draw);
/* Reset fill color from purple to black for text (note: we are reusing ImagickDraw object) */
$draw->setFillColor('black');
if ($img->setImageFormat('png') !== TRUE) {
echo 'FAIL: imagecreatetruecolor()';
exit(1);
}
echo 'OK';