PHP rendered as text after Ubuntu 16.04 upgrade

43,815

Solution 1

The php command is provided by php7.0-cli package on Ubuntu 16.04. Running the CLI is orthogonal to the web server configuration.

You need to install and configure one of the web SAPIs - apache2, fpm or cgi. The most easy is to install apache2 SAPI.

  1. To install apache2 SAPI, run apt-get install libapache2-mod-php (this will pull the default PHP version, currently libapache2-mod-php7.0). The package should enable itself and switch to apache2 prefork MPM that's the only MPM supported. If not, try to run a2enmod php7.0 and look for errors. The installation should switch from event MPM to prefork MPM automatically, but if it doesn't, you can switch it manually by doing sudo a2dismod mpm_event followed by sudo a2enmod mpm_prefork.

  2. To install FPM SAPI, run apt-get install php-fpm and then enable FPM by running a2enconf php7.0-fpm. The FPM SAPI is more secure, but harder to configure correctly.

  3. To install CGI SAPI, run apt-get install php-cgi and then enable CGI by running a2enconf php7.0-cgi. Please not that CGI is not recommended way how to run PHP, but it might come handy in special deployments.

Solution 2

I made mine running again by installing libapache2-mod-php7.0. Hope this helps.

Share:
43,815

Related videos on Youtube

machadoug
Author by

machadoug

Joomla/PHP Developer Working at IdealExtensions.com

Updated on September 18, 2022

Comments

  • machadoug
    machadoug over 1 year

    Apache is rendering PHP files as text after Ubuntu 16.04 upgrade.

    Apache is installed and running. PHP7 is running. When I execute the following command I get the correct output:

    php -r 'echo "\n\nYour PHP installation is working fine.\n\n\n";'
    

    However when I access http://localhost/info.php or any other php file I get the file contents instead of the page.

    Most of the help online is for older versions of both Ubuntu and PHP, so I' m not certain they are reliable or not.

    UPDATE: Apache won't start after installing libapache2-mod-php7.0 and enabling php7.0. See output:

    douglas@douglas-acer:~$ sudo service apache2 restart
    douglas@douglas-acer:~$ sudo apt-get install libapache2-mod-php
    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    The following NEW packages will be installed:
      libapache2-mod-php
    0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
    Need to get 0 B/2.960 B of archives.
    After this operation, 15,4 kB of additional disk space will be used.
    Selecting previously unselected package libapache2-mod-php.
    (Reading database ... 263897 files and directories currently installed.)
    Preparing to unpack .../libapache2-mod-php_1%3a7.0+35ubuntu6_all.deb ...
    Unpacking libapache2-mod-php (1:7.0+35ubuntu6) ...
    Setting up libapache2-mod-php (1:7.0+35ubuntu6) ...
    douglas@douglas-acer:~$ sudo service apache2 restart
    douglas@douglas-acer:~$ sudo a2enmod php7.0
    Considering conflict php5 for php7.0:
    Enabling module php7.0.
    To activate the new configuration, you need to run:
      service apache2 restart
    douglas@douglas-acer:~$ sudo service apache2 restart
    Job for apache2.service failed because the control process exited with error code. See "systemctl status apache2.service" and "journalctl -xe" for details.
    douglas@douglas-acer:~$ sudo apt-get purge php5
    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    Package 'php5' is not installed, so not removed
    0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
    

    The output of systemctl status apache2.service :

    ● apache2.service - LSB: Apache2 web server
       Loaded: loaded (/etc/init.d/apache2; bad; vendor preset: enabled)
      Drop-In: /lib/systemd/system/apache2.service.d
               └─apache2-systemd.conf
       Active: failed (Result: exit-code) since Dom 2016-04-24 08:21:35 BRT; 14s ago
         Docs: man:systemd-sysv-generator(8)
      Process: 9216 ExecStart=/etc/init.d/apache2 start (code=exited, status=1/FAILURE)
    
    Abr 24 08:21:35 douglas-acer apache2[9216]:  * The apache2 configtest failed.
    Abr 24 08:21:35 douglas-acer apache2[9216]: Output of config test was:
    Abr 24 08:21:35 douglas-acer apache2[9216]: [Sun Apr 24 08:21:35.235583 2016] [:crit] [pid 9226:tid 140666367190912] Apache is running a threade
    Abr 24 08:21:35 douglas-acer apache2[9216]: AH00013: Pre-configuration failed
    Abr 24 08:21:35 douglas-acer apache2[9216]: Action 'configtest' failed.
    Abr 24 08:21:35 douglas-acer apache2[9216]: The Apache error log may have more information.
    Abr 24 08:21:35 douglas-acer systemd[1]: apache2.service: Control process exited, code=exited status=1
    Abr 24 08:21:35 douglas-acer systemd[1]: Failed to start LSB: Apache2 web server.
    Abr 24 08:21:35 douglas-acer systemd[1]: apache2.service: Unit entered failed state.
    Abr 24 08:21:35 douglas-acer systemd[1]: apache2.service: Failed with result 'exit-code'.
    

    The Output of journalctl -xe

    -- Defined-By: systemd
    -- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
    -- 
    -- Unit apache2.service has finished shutting down.
    Abr 24 08:37:59 douglas-acer systemd[1]: Starting LSB: Apache2 web server...
    -- Subject: Unit apache2.service has begun start-up
    -- Defined-By: systemd
    -- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
    -- 
    -- Unit apache2.service has begun starting up.
    Abr 24 08:37:59 douglas-acer apache2[10261]:  * Starting Apache httpd web server apache2
    Abr 24 08:37:59 douglas-acer apache2[10261]:  *
    Abr 24 08:37:59 douglas-acer apache2[10261]:  * The apache2 configtest failed.
    Abr 24 08:37:59 douglas-acer apache2[10261]: Output of config test was:
    Abr 24 08:37:59 douglas-acer apache2[10261]: [Sun Apr 24 08:37:59.748900 2016] [:crit] [pid 10271:tid 139911432607616] Apache is running a threa
    Abr 24 08:37:59 douglas-acer apache2[10261]: AH00013: Pre-configuration failed
    Abr 24 08:37:59 douglas-acer apache2[10261]: Action 'configtest' failed.
    Abr 24 08:37:59 douglas-acer apache2[10261]: The Apache error log may have more information.
    Abr 24 08:37:59 douglas-acer systemd[1]: apache2.service: Control process exited, code=exited status=1
    Abr 24 08:37:59 douglas-acer systemd[1]: Failed to start LSB: Apache2 web server.
    -- Subject: Unit apache2.service has failed
    -- Defined-By: systemd
    -- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
    -- 
    -- Unit apache2.service has failed.
    -- 
    -- The result is failed.
    Abr 24 08:37:59 douglas-acer systemd[1]: apache2.service: Unit entered failed state.
    Abr 24 08:37:59 douglas-acer systemd[1]: apache2.service: Failed with result 'exit-code'.
    Abr 24 08:37:59 douglas-acer sudo[10258]: pam_unix(sudo:session): session closed for user root
    Abr 24 08:38:02 douglas-acer sudo[10276]:  douglas : TTY=pts/18 ; PWD=/home/douglas ; USER=root ; COMMAND=/bin/journalctl -xe
    Abr 24 08:38:02 douglas-acer sudo[10276]: pam_unix(sudo:session): session opened for user root by (uid=0)
    Abr 24 08:38:38 douglas-acer sudo[10276]: pam_unix(sudo:session): session closed for user root
    Abr 24 08:39:01 douglas-acer CRON[10297]: pam_unix(cron:session): session opened for user root by (uid=0)
    Abr 24 08:39:01 douglas-acer CRON[10299]: (root) CMD (  [ -x /usr/lib/php5/sessionclean ] && /usr/lib/php5/sessionclean)
    Abr 24 08:39:01 douglas-acer CRON[10297]: pam_unix(cron:session): session closed for user root
    Abr 24 08:39:01 douglas-acer CRON[10298]: pam_unix(cron:session): session opened for user root by (uid=0)
    Abr 24 08:39:01 douglas-acer CRON[10300]: (root) CMD (  [ -x /usr/lib/php/sessionclean ] && /usr/lib/php/sessionclean)
    Abr 24 08:39:02 douglas-acer CRON[10298]: pam_unix(cron:session): session closed for user root
    Abr 24 08:39:51 douglas-acer sudo[10122]: pam_unix(sudo:session): session closed for user root
    Abr 24 08:39:53 douglas-acer sudo[10368]:  douglas : TTY=pts/5 ; PWD=/home/douglas ; USER=root ; COMMAND=/bin/journalctl -xe
    Abr 24 08:39:53 douglas-acer sudo[10368]: pam_unix(sudo:session): session opened for user root by (uid=0) 
    

    Regarding the error Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe. You need to recompile PHP I did find some help in https://wiki.archlinux.org/index.php/Apache_HTTP_Server regarding this issue, however the file paths didn't match the ones in Ubuntu, so I didn't try to apply the recommended fix.

  • machadoug
    machadoug about 8 years
    I've edited my question in order to provide more details.
  • oerdnj
    oerdnj about 8 years
    @machadoug edited the answer to include description how to switch MPMs
  • machadoug
    machadoug about 8 years
    Do you have any idea on how to get it fixed?
  • oerdnj
    oerdnj about 8 years
    @machadoug Yes, I added "The installation should switch from event MPM to prefork MPM automatically, but if it doesn't, you can switch it manually by doing sudo a2dismod mpm_event followed by sudo a2enmod mpm_prefork."
  • Andrew Ensley
    Andrew Ensley almost 8 years
    Is there a step missing from option 2? I've installed apache2 and php-fpm, and run the a2enconf command. All succeeded, and both services are running, but my PHP files are being output directly without php processing them. No errors in any logs for Apache or PHP-FPM.
  • Shane
    Shane almost 8 years
    What got it working for me was enabling/disabling the modules as per step 1. Thank you!
  • d586
    d586 almost 8 years
    @Andrew Perhaps you are trying to run PHP script from user directory - these are disabled by default. If so you need to open php7.0.conf and comment out the last part. More here devplant.net/2010/05/04/…
  • Calmarius
    Calmarius over 7 years
    I installed php7, installed the apache module, enabled it, no errors in log, but php is still rendered as text.