Search code examples
phplaraveldockertidyphpdocx

Why won't Docker load Tidy?


I'm trying to use phpdocx in order to create a docx file from HTML in a laravel api application.

In order to use this conversion tool, it is necessary to have Tidy installed.

I've included tidy in dockerfile like so

FROM php:7.2-fpm-stretch

RUN apt-get update && \
    apt-get install -y --no-install-recommends \
     libicu-dev \
    openssh-client\
    git \
     curl \
     libmemcached-dev \
     libz-dev \
     libpq-dev \
     libjpeg-dev \
     libpng-dev \
     tidy \
     libfreetype6-dev \
     libssl-dev \
     libmcrypt-dev \
     gnupg \
     && rm -rf /var/lib/apt/lists/*

but when I add a phpinfo(); to my code, tidy is no where to be found.

What is strange is that when I access the bash of docker, I can tidy -v and i get HTML Tidy for Linux version 5.2.0

I have uncommented extension=php_tidy.dll in all the php.ini files associated with the project, and have rebuilt the image numerous times.

When I run check.php included in phpdocx I can find this error in the result Warning You must install Tidy for PHP if you want to use embedHTML in your Word documents.

I've tried docker pull imega/tidy to no avail.

I've been stuck on this for over a day now, if anyone has any idea where I'm going wrong I would appreciate the help.

root@c790d433727a:/var/www/vendor/phpdocx# php check.php

OK PHP version is 7.2.22
OK Zip support is enabled.
OK DOM support is enabled.
OK XML support is enabled.
Warning You must install Tidy for PHP if you want to use embedHTML in your Word documents.
OK mbstring is enabled.

root@c790d433727a:/var/www/vendor/phpdocx# tidy -v

HTML Tidy for Linux version 5.2.0


Solution

  • See an example Docker file:

    FROM php:7.2-fpm-stretch
    RUN apt-get -y update && apt-get -y upgrade
    RUN apt-get install -y libtidy-dev 
    RUN docker-php-ext-install -j$(nproc) tidy
    

    if you build it this way:

    docker build --tag stackoverflow .
    

    and run this way:

    docker run --rm -it --entrypoint="" stackoverflow /bin/sh
    

    you will be logged into CLI and may check installed extensions this way:

    php -m
    

    that gives list:

    [PHP Modules]
    Core
    ctype
    curl
    date
    dom
    fileinfo
    filter
    ftp
    hash
    iconv
    json
    libxml
    mbstring
    mysqlnd
    openssl
    pcre
    PDO
    pdo_sqlite
    Phar
    posix
    readline
    Reflection
    session
    SimpleXML
    sodium
    SPL
    sqlite3
    standard
    tidy
    tokenizer
    xml
    xmlreader
    xmlwriter
    zlib
    
    [Zend Modules]
    

    with:

    tidy
    

    under:

    [PHP Modules]
    

    Have fun with it :)