Home Accessibility Courses Twitter The Mouth Facebook Resources Site Map About Us Contact
For 2023 (and 2024 ...) - we are now fully retired from IT training.
We have made many, many friends over 25 years of teaching about Python, Tcl, Perl, PHP, Lua, Java, C and C++ - and MySQL, Linux and Solaris/SunOS too. Our training notes are now very much out of date, but due to upward compatability most of our examples remain operational and even relevant ad you are welcome to make us if them "as seen" and at your own risk.

Lisa and I (Graham) now live in what was our training centre in Melksham - happy to meet with former delegates here - but do check ahead before coming round. We are far from inactive - rather, enjoying the times that we are retired but still healthy enough in mind and body to be active!

I am also active in many other area and still look after a lot of web sites - you can find an index ((here))
Parse error: parse error, unexpected T_STRING on brand new web site - why?

A brank new web site, written with standard commercial software, running on one of our dedicated servers which has dozens of other sites on it, with standard installs of Apache httpd, MySQL and other LAMP componets (Perl, PHP and Python) - and yet the following error:

Parse error: parse error, unexpected T_STRING in /home/httpd/vhosts/melkshammuseum.org.uk/httpdocs/index.html on line 1

What's the problem?

It turns out that the HTML of each page generated by this software starts out
  <?xml version="1.0" encoding="UTF-8"?>
and that's causing a conflict the way that our server is configured, with the .html extension being parsed as PHP across the sites we're running there, and with short tags switched on. There was indeed a suggestion that, come PHP 6, short tags would be deprecated because of confusions such as this which they can cause; that was raised in an RFC - [here], together with a suggested alternative short solution to avoid syntax getting longer to drop variables in place. However, as I understand it that RFC is not being taken forward and short tags remain as the are; I'll admit to being happy with that, even if the XML people aren't, but I take it as a warning that something may need to be changed in the future and it just might end up being the syntax of PHP.

Specifically, the lines within my configuration files that caused the issue were (in httpd.conf):
  AddType application/x-httpd-php .php .html .htm
and in php.ini:
  short_open_tag = On

And what's the solution?

"Turn short tags off across the server"?
"Remove the PHP processing from .htm and .html extensions"?

No, and no! Such changes could potentially effect dozens of sites that are running well and have been for a long time. Yes, it could be fixed on each of those sites, but by adding code to the .htaccess file on each of them - and that's repeated work. There has to be an easier way, surely? And there is:

Apache httpd's little used RemoveType directive comes to the rescue. Leave the main httpd.conf file (and files that it includes) unaltered, and add the following into the .htaccess file in the document root of the brand new web site:
  RemoveType .html .htm
So short open tags and .html expansion / checking as PHP are still running server-wide, but then the .html expansion is switched off for all files served on or below the new web site / virtual host that needed fixing.


a) If you've not got a .htaccess file in your docuent root, you can simply create one - it's not a mandatory file, so it may not exist
b) If you want to turn PHP processing off just for a part of your website, you can put your .htaccess file into a subdirectory - indeed .htaccess files work in general in a hierarcy that gives you directory level control and flexibiity without the need to keep repeating directives at each level.

But that isn't my problem

Similar Parse error error messages are generated by PHP in other circumstances too - this is a sort of "catch all" error, so it's probable that - at some time -someone may find this page and decide that there error was NOT caused by the issue above.

If that's you:

1. Take a look at the line number in the report, (and also the file name as the error might be in an included or rewritten page) and have a look at the source code of the web page at that point.

2. Still no solution from looking at the code? Run it through the PHP intepretter on the command line and see what that chucks out at you.

You're probably into understanding / debugging PHP by now - a huge subject that we cover on our various PHP training courses, and if you're saying "but I don't know PHP" you should ask someone who does, or come on a course. If the file that you're looking at isn't supposed to be PHP at all, then take a look at your web server configuration - again, if you're pushing the bounds of your knowledge there are people who can help you, or you can attend either our Deploying LAMP course or our Linux Web Server course.
(written 2012-03-03, updated 2012-03-10)

Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
H114 - Sourcing, installing and configuring PHP
  [192] Current MySQL and PHP paths and upgrades - (2005-01-28)
  [316] Development Environments - (2005-05-19)
  [481] PHP upgrade - traps to watch - (2005-10-31)
  [934] Clustering, load balancing, mod_rewrite and mod_proxy - (2006-11-21)
  [1667] Checking server performance for PHP generated pages - (2008-06-06)
  [1688] cannot restore segment prot after reloc message - PHP / httpd - (2008-06-26)
  [1731] Apache httpd, MySQL, PHP - installation procedure - (2008-08-01)
  [1768] What is built in to this httpd and PHP? - (2008-08-23)
  [1936] Quick Summary - PHP installation - (2008-12-12)
  [2317] How to make a Risotto (PHP build style) - (2009-08-02)
  [2433] Controlling, supressing, enabling PHP error messages - (2009-10-02)
  [2589] Your PHP code does not work? Here is where to start looking. - (2010-01-18)
  [2646] Compile but do not run PHP - syntax check only - (2010-02-22)
  [3132] Virtual Hosting with Apache http server - an overall scheme, and avoiding common pitfalls - (2011-01-14)
  [3955] Building up from a small PHP setup to an enterprise one - (2012-12-16)
  [4319] PHP - some quick fixes if scripts have issues, and how to use our support - (2014-11-19)
  [4437] Adding a PHP build option, rotating an image based on camera data, and a new look at thumbnails in PHP - (2015-02-22)

A603 - Web Application Deployment - Further httpd Configuration
  [345] Spotting a denial of service attack - (2005-06-12)
  [466] Separating 'per instance' data from binaries and web sites - (2005-10-16)
  [526] Apache httpd - serving web documents from different directories - (2005-12-12)
  [550] 2006 - Making business a pleasure - (2006-01-01)
  [631] Apache httpd to Tomcat - jk v proxy - (2006-03-03)
  [649] Denial of Service ''attack'' - (2006-03-17)
  [662] An unhelpful error message from Apache httpd - (2006-03-30)
  [755] Using different URLs to navigate around a single script - (2006-06-11)
  [853] To list a directory under httpd on a web server, or not? - (2006-09-02)
  [1009] Passing GET parameters through Apache mod_rewrite - (2006-12-27)
  [1080] httpd.conf or .htaccess? - (2007-02-14)
  [1121] Sharing the load with Apache httpd and perhaps Tomcat - (2007-03-29)
  [1207] Simple but effective use of mod_rewrite (Apache httpd) - (2007-05-27)
  [1351] Compressing web pages sent out from server. Is it worth it? - (2007-09-14)
  [1355] .php or .html extension? Morally Static Pages - (2007-09-17)
  [1377] Load Balancing with Apache mod_jk (httpd/Tomcat) - (2007-10-02)
  [1381] Using a MySQL database to control mod_rewrite via PHP - (2007-10-06)
  [1551] Which modules are loaded in my Apache httpd - (2008-02-23)
  [1554] Online hotel reservations - Melksham, Wiltshire (near Bath) - (2008-02-24)
  [1564] Default file (MiMe types) for Apache httpd and Apache Tomcat - (2008-03-04)
  [1566] Strange behaviour of web directory requests without a trailing slash - (2008-03-06)
  [1619] User and Group settings for Apache httpd web server - (2008-04-22)
  [1636] What to do if the Home Page is missing - (2008-05-08)
  [1707] Configuring Apache httpd - (2008-07-12)
  [1762] WEB-INF (Tomcat) and .htaccess (httpd) - (2008-08-20)
  [1767] mod_proxy and mod_proxy_ajp - httpd - (2008-08-22)
  [1778] Pointing all the web pages in a directory at a database - (2008-08-30)
  [1939] mod_proxy_ajp and mod_proxy_balancer examples - (2008-12-13)
  [1954] mod_rewrite for newcomers - (2008-12-20)
  [1955] How to avoid duplicating web page maintainance - (2008-12-20)
  [1974] Moving a directory on your web site - (2009-01-03)
  [2060] Database connection Pooling, SSL, and command line deployment - httpd and Tomcat - (2009-03-01)
  [2272] Monitoring and loading tools for testing Apache Tomcat - (2009-07-07)
  [2478] How did I do THAT? - (2009-10-26)
  [2900] Redirecting a page - silent, temporary or permanent? - (2010-08-03)
  [3133] An image from a website that occasionally comes out as hyroglyphics - (2011-01-14)
  [3449] Apache Internal Dummy Connection - what is it and what should I do with it? - (2011-09-19)
  [3862] Forwarding a whole domain, except for a few directories - Apache http server - (2012-09-17)
  [4001] Helping search engines with appropriate 400 error codes - (2013-02-11)
  [4307] Identifying and clearing denial of service attacks on your Apache server - (2014-09-27)

Back to
Defining database relations in your Django model
Previous and next
Horse's mouth home
Forward to
Best tenner I ever spent?
Some other Articles
Demonstration of a form using Django
Sorting dicts and arrays in Tcl
April, May and June 2012 - Public Open Source Programming Courses
Best tenner I ever spent?
Parse error: parse error, unexpected T_STRING on brand new web site - why?
Defining database relations in your Django model
Nesting Templates in Django
What is Make?
Getting around Dublin by public transport - some observations
Serialsing and unserialising data for storage and transfer in Perl
4759 posts, page by page
Link to page ... 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96 at 50 posts per page

This is a page archived from The Horse's Mouth at http://www.wellho.net/horse/ - the diary and writings of Graham Ellis. Every attempt was made to provide current information at the time the page was written, but things do move forward in our business - new software releases, price changes, new techniques. Please check back via our main site for current courses, prices, versions, etc - any mention of a price in "The Horse's Mouth" cannot be taken as an offer to supply at that price.

Link to Ezine home page (for reading).
Link to Blogging home page (to add comments).

You can Add a comment or ranking to this page

© WELL HOUSE CONSULTANTS LTD., 2024: 48 Spa Road • Melksham, Wiltshire • United Kingdom • SN12 7NY
PH: 01144 1225 708225 • EMAIL: info@wellho.net • WEB: http://www.wellho.net • SKYPE: wellho

PAGE: http://www.wellho.net/mouth/3635_.html • PAGE BUILT: Sun Oct 11 16:07:41 2020 • BUILD SYSTEM: JelliaJamb