Mailing List Archive

Apache shows PHP code instead of executing it
Hi,

I am running the below php, httpd and CentOS Linux version.

# rpm -qa | grep php
php73-mbstring-7.3.25-1.el7.ius.x86_64
php73-json-7.3.25-1.el7.ius.x86_64
php73-fpm-7.3.25-1.el7.ius.x86_64
php73-pdo-7.3.25-1.el7.ius.x86_64
php73-gd-7.3.25-1.el7.ius.x86_64
php73-mysqlnd-7.3.25-1.el7.ius.x86_64
php73-xml-7.3.25-1.el7.ius.x86_64
php73-opcache-7.3.25-1.el7.ius.x86_64
php73-fpm-httpd-7.3.25-1.el7.ius.noarch
php73-common-7.3.25-1.el7.ius.x86_64
php73-fpm-nginx-7.3.25-1.el7.ius.noarch
php73-cli-7.3.25-1.el7.ius.x86_64
php73-bcmath-7.3.25-1.el7.ius.x86_64

# rpm -qa | grep httpd
httpd24u-2.4.46-1.el7.ius.x86_64
httpd24u-tools-2.4.46-1.el7.ius.x86_64
httpd24u-filesystem-2.4.46-1.el7.ius.noarch
php73-fpm-httpd-7.3.25-1.el7.ius.noarch

# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)

I have placed the below file in /var/www/html directory.

#cat info.php
<?php

phpinfo( );

?>
#

When I invoke it from the browser Apache shows PHP code instead of
executing it. Please let me know if you need any additional information.
Thanks in Advance.

Best Regards,

Kaushal
Re: Apache shows PHP code instead of executing it [ In reply to ]
On 1/6/21 11:09 AM, Kaushal Shriyan wrote:
> When I invoke it from the browser Apache shows PHP code instead of
> executing it. Please let me know if you need any additional information.
> Thanks in Advance


trun it on and read the docs. You need to turn it one from httpd.conf
and assign it to a php enabled uri


--
So many immigrant groups have swept through our town
that Brooklyn, like Atlantis, reaches mythological
proportions in the mind of the world - RI Safir 1998
http://www.mrbrklyn.com

DRM is THEFT - We are the STAKEHOLDERS - RI Safir 2002
http://www.nylxs.com - Leadership Development in Free Software
http://www2.mrbrklyn.com/resources - Unpublished Archive
http://www.coinhangout.com - coins!
http://www.brooklyn-living.com

Being so tracked is for FARM ANIMALS and extermination camps,
but incompatible with living as a free human being. -RI Safir 2013

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@httpd.apache.org
For additional commands, e-mail: users-help@httpd.apache.org
Re: Apache shows PHP code instead of executing it [ In reply to ]
On Wed, Jan 6, 2021 at 9:54 PM Ruben Safir <mrbrklyn@panix.com> wrote:

> On 1/6/21 11:09 AM, Kaushal Shriyan wrote:
> > When I invoke it from the browser Apache shows PHP code instead of
> > executing it. Please let me know if you need any additional information.
> > Thanks in Advance
>
>
> trun it on and read the docs. You need to turn it one from httpd.conf
> and assign it to a php enabled uri
>

Hi Ruben,

I have added the below in /etc/httpd/conf/httpd.conf. The issue still
persists.

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

#apachectl -M | grep -i PHP does not return anything.

==> /var/log/httpd/access_log <==
192.168.0.95 - - [06/Jan/2021:23:38:03 +0530] "GET /info.php HTTP/1.1" 304
- "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"

Best Regards,
Re: Apache shows PHP code instead of executing it [ In reply to ]
> When I invoke it from the browser Apache shows PHP code instead of
> executing it. Please let me know if you need any additional information.
> Thanks in Advance
This is because you did not tell apache to forward incoming HTTP requests to the PHP Engine.
You can integrate Apache httpd with PHP in different ways, generally they are PHP-FPM (through fastcgi), mod_php (apache SAPI module) and CGI (discouraged because is very slow and does not scale well).

Since you've installed the package php73-fpm-httpd-7.3.25-1.el7.ius.noarch I think you would like to use PHP-FPM.
Now, there are also different ways to integrate Apache httpd with PHP-FPM. Personally I like to use mod_proxy_fcgi.so or mod_fastcgi.so.

BTW, I'll try to point you to the right direction with mod_proxy_fcgi:

1: you need to configure PHP-FPM to listen to a local unix socket (eg: /run/php/php7.3-fpm.sock), also configure the other PHP-FPM and php.ini parameters and permissions and start your PHP-FPM process

2: tell Apache httpd to send right incoming requests (those ending with .php for example) to PHP-FPM. One way is something like this:
# ...
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

Listen *:80
<VirtualHost *:80>
ServerName yourservername
ErrorLog logs/your-error_log
CustomLog logs/your-access_log common
LogLevel warn

# Use local php-fpm process
<IfModule proxy_fcgi_module>
# Enable http authorization headers
<IfModule setenvif_module>
SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
</IfModule>

<FilesMatch ".+.ph(p[3457]?|t|tml)$">
SetHandler "proxy:unix:/run/php/php7.3-fpm.sock|fcgi://localhost"
</FilesMatch>
<FilesMatch ".+.phps$">
# Deny access to raw php sources by default
# To re-enable it's recommended to enable access to the files
# only in specific virtual host or directory
Require all denied
</FilesMatch>
# Deny access to files without filename (e.g. '.php')
<FilesMatch "^.ph(p[3457]?|t|tml|ps)$">
Require all denied
</FilesMatch>
</IfModule>

DocumentRoot /your/docroot
<Directory /your/docroot>
Options +FollowSymlinks -Includes
DirectoryIndex index.php
AllowOverride All
Require all granted
</Directory>

</VirtualHost>
# ...
3: check all your paths and permissions

4: if you would like to send any incoming request to PHP-FPM (for ex. in case your application make use of a controller), you would add a .htaccess file that contains something like this into your application docroot (and enable mod_rewrite in httpd.conf). This way, any incoming request that is not a valid resolvable file or directory will be forwarded to index.php (that resolve to PHP-FPM due to the config you set at item 2):

#-------------------------------------------------------------------------------------------------
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]
# Let PHP having access to Authorization: Bearer header
RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
#-------------------------------------------------------------------------------------------------
HTH.
Ciao, Dino.
Re: Apache shows PHP code instead of executing it [ In reply to ]
On 1/6/21 4:01 PM, dino@tuxweb.it wrote:
>
> This is because you did not tell apache to forward incoming HTTP
> requests to the PHP Engine.
> You can integrate Apache httpd with PHP in different ways, generally
> they are PHP-FPM (through fastcgi), mod_php (apache SAPI module) and CGI
> (discouraged because is very slow and does not scale well).

Umm - use mod_php. I know that the PHP website docs suggest otherwise,
but they are wrong. It is the only way to integrate PHP into apache.
It might use more memory. That is fine. Memory is cheap.

if you use Linux there is no problems and frankly threads and processes
both share light weight processes

http://httpd.apache.org/docs/current/mpm.html
https://tldp.org/FAQ/Threads-FAQ/Types.html
https://www.kernel.org/doc/ols/2002/ols2002-pages-330-337.pdf
https://www.php.net/manual/en/faq.installation.php#faq.installation.apache2
https://www.php.net/manual/en/install.unix.apache2.php


Packing the PHP instance in a threaded fastcgi process is exactly what
you don't want. Integrating it into the Apache runtime prevents needing
to create an entire clone call and all subsequent fork() calls,
--
So many immigrant groups have swept through our town
that Brooklyn, like Atlantis, reaches mythological
proportions in the mind of the world - RI Safir 1998
http://www.mrbrklyn.com

DRM is THEFT - We are the STAKEHOLDERS - RI Safir 2002
http://www.nylxs.com - Leadership Development in Free Software
http://www2.mrbrklyn.com/resources - Unpublished Archive
http://www.coinhangout.com - coins!
http://www.brooklyn-living.com

Being so tracked is for FARM ANIMALS and extermination camps,
but incompatible with living as a free human being. -RI Safir 2013

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@httpd.apache.org
For additional commands, e-mail: users-help@httpd.apache.org
Re: Apache shows PHP code instead of executing it [ In reply to ]
On Wed, Jan 6, 2021 at 6:31 PM Ruben Safir <mrbrklyn@panix.com> wrote:
>
> On 1/6/21 4:01 PM, dino@tuxweb.it wrote:
> >
> > This is because you did not tell apache to forward incoming HTTP
> > requests to the PHP Engine.
> > You can integrate Apache httpd with PHP in different ways, generally
> > they are PHP-FPM (through fastcgi), mod_php (apache SAPI module) and CGI
> > (discouraged because is very slow and does not scale well).
>
> Umm - use mod_php. I know that the PHP website docs suggest otherwise,
> but they are wrong. It is the only way to integrate PHP into apache.
> It might use more memory. That is fine. Memory is cheap.
>
> if you use Linux there is no problems and frankly threads and processes
> both share light weight processes
>
> http://httpd.apache.org/docs/current/mpm.html
> https://tldp.org/FAQ/Threads-FAQ/Types.html
> https://www.kernel.org/doc/ols/2002/ols2002-pages-330-337.pdf
> https://www.php.net/manual/en/faq.installation.php#faq.installation.apache2
> https://www.php.net/manual/en/install.unix.apache2.php
>
>
> Packing the PHP instance in a threaded fastcgi process is exactly what
> you don't want. Integrating it into the Apache runtime prevents needing
> to create an entire clone call and all subsequent fork() calls,

Caveat: The above is not the conventional wisdom at all and
misrepresents the tradeoffs.

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@httpd.apache.org
For additional commands, e-mail: users-help@httpd.apache.org
Re: Apache shows PHP code instead of executing it [ In reply to ]
On Wed, Jan 06, 2021 at 08:45:50PM -0500, Eric Covener wrote:
> On Wed, Jan 6, 2021 at 6:31 PM Ruben Safir <mrbrklyn@panix.com> wrote:
> >
> > On 1/6/21 4:01 PM, dino@tuxweb.it wrote:
> > >
> > > This is because you did not tell apache to forward incoming HTTP
> > > requests to the PHP Engine.
> > > You can integrate Apache httpd with PHP in different ways, generally
> > > they are PHP-FPM (through fastcgi), mod_php (apache SAPI module) and CGI
> > > (discouraged because is very slow and does not scale well).
> >
> > Umm - use mod_php. I know that the PHP website docs suggest otherwise,
> > but they are wrong. It is the only way to integrate PHP into apache.
> > It might use more memory. That is fine. Memory is cheap.
> >
> > if you use Linux there is no problems and frankly threads and processes
> > both share light weight processes
> >
> > http://httpd.apache.org/docs/current/mpm.html
> > https://tldp.org/FAQ/Threads-FAQ/Types.html
> > https://www.kernel.org/doc/ols/2002/ols2002-pages-330-337.pdf
> > https://www.php.net/manual/en/faq.installation.php#faq.installation.apache2
> > https://www.php.net/manual/en/install.unix.apache2.php
> >
> >
> > Packing the PHP instance in a threaded fastcgi process is exactly what
> > you don't want. Integrating it into the Apache runtime prevents needing
> > to create an entire clone call and all subsequent fork() calls,
>
> Caveat: The above is not the conventional wisdom at all and
> misrepresents the tradeoffs.
>


Who knows, maybe he can read for himself. For almost 30 years we've
dealt with this. I'm sorry, but fastcgi sucks. It sucked in 1995, and
it is still sucks. I mean it beats CGI and its better an nothing on
Windows for some time, but that is it.

unless you have something really short you have to do. compiling mod_php
directly into apache allows you to not have to run an external module or
program, which is a smaller finger print, and allows you to use apache
memormy managment directly.

Not only that, but you can cache results, which is a major advantage.

Regardless of the snippiness, I ACTUALLY posted the documentation with
the recomemdnations so he could read them for himself...you education,
so he could make up his mind.

> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@httpd.apache.org
> For additional commands, e-mail: users-help@httpd.apache.org
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@httpd.apache.org
For additional commands, e-mail: users-help@httpd.apache.org