Showing posts with label php script. Show all posts
Showing posts with label php script. Show all posts

Saturday, January 5, 2008

Speeding PHP Using APC PHP Cache


If you look at a PHP source file you will notice one thing. It's a source file. Not particularly surprising, but think about when you deploy a PHP application, what do you deploy? PHP source files. Now for many other languages; Java, C, etc when you deploy an application you deploy the compiled file. So, the question that you want to ask yourself is this, how much time does a PHP application spend compiling source files vs running the code? I'll answer that for you, a lot.

There are advantages to being able to deploy source files though. It makes it easy to do on the fly modifications or bug fixes to a program, much like we used to do in the early BASIC languages. Just change the file and the next time it's accessed your change is reflected. So, how do we keep the dynamic nature of PHP, but not recompile our files every time they are accessed?

A PHP cache. It's surprising to me that this concept isn't built into the base PHP engine, but perhaps that's because some company's can sell this add on to speed up PHP. Luckily for us, some companies/open source projects provide this plug in to PHP at no charge. These plug ins are generally known as PHP accelerators, some of them do some optimization and then caching and some only do caching. I'm not going to pass judgement on which one is the best, any of them are better than nothing, but I decided to use APC, the Alternative PHP Cache. I chose this one because it is still in active development and is open source and free.

Alternative php cache can be found at php.net, just look down the left column for APC. It comes in source form, so you will need to compile it before installing it, don't worry about that part. If you're using Red Hat 4 or CentOS4 I'll tell you exactly how to do it. If you're using something else, you'll need the same tools, but getting the tools might be a bit different.

1. The Tools
Do you know how many web sites, forums and blogs I went to with my error messages before I found the answers as to what I was missing when I was trying to install APC - Alternative PHP Cache? Two days worth, but I finally found the correct combination and it's really quite obvious as is everything once you know the answer. There are three sets of dev tools that you will need.

1a. You'll need a package called "Development Tools" this will include all the important dev tools like the GCC compiler, etc.
1b. You'll need a package called php-devel which as you might guess are development tools for PHP
1c. You'll need a package called httpd-devel which of course are dev tools for Apache web server.

On Red Hat or CentOS getting these should be as easy as the following 3 commands:

yum groupinstall "Development Tools"
yum install php-devel
yum install httpd-devel

You'll do these three one at a time and follow any instructions (usually just saying yes).

Now it's time to follow the instructions contained in the APC package. Since these may change over time I'm not going to go through them. They are very complete. If you follow the instructions and get an apc.so file out of it, then you're all set, just modify your php.ini file and you're good to go.

There are two problems that I encountered that you may encounter too. The first is an error when running phpize. I ignored this error and everything succeeded okay, but not before I spent hours looking for the solution to this error. Here is the error.
configure.in:9: warning: underquoted definition of PHP_WITH_PHP_CONFIG

run info '(automake)Extending aclocal'

or see http://sources.redhat.com/automake/automake.html#Extending-aclocal
configure.in:32: warning: underquoted definition of PHP_EXT_BUILDDIR
configure.in:33: warning: underquoted definition of PHP_EXT_DIR
configure.in:34: warning: underquoted definition of PHP_EXT_SRCDIR
configure.in:35: warning: underquoted definition of PHP_ALWAYS_SHARED
acinclude.m4:19: warning: underquoted definition of PHP_PROG_RE2C

People would have had me updating my PHP version from 4.3.9 and everything else under the sun to get rid of this error, but in the end it didn't matter. My APC compiled and installed nicely and I am good to go.

The other slight problem that I ran into was the location of php-config. The install instructions wanted me to do the following:

./configure --enable-apc-mmap --with-apxs
--with-php-config=/usr/local/php/bin/php-config

However my php-config is in /usr/bin/php-config. Making that change allowed this part to work.

So, have at it, once it's done you can expect to see huge improvements in your web site response times and reductions on your CPU load. One more quick note, My server hosts about 20 web sites, but only 3 or 4 are really busy. To reduce the memory footprint of caching everything for all 20 sites I used the apc.filters property. Although this property is slightly flawed for non qualified includes, it worked nicely for my Serendipity blogs. Your mileage with this property will vary according to the software you are using and how it does it's includes.

By Jon Murray

How to Use an RSS Feed to Provide Content for Your Website

Search engines love websites that are continuously updated with fresh content. As a website owner, if you want to achieve or maintain a good search engine ranking, then your goal should be to continually provide updated keyword–based content on a regular basis to your website. Naturally, if you're providing the content yourself, this takes a lot of work. Let me show you how you can get fresh, keyword-based content updated on your site on a daily basis with no work on your part using RSS feeds and PHP, and most of all, the search engines will love it!

RSS is an acronym that is short for Really Simple Syndication. It's a type of XML (eXtensible Markup Language) that is used for syndicating content. XML is used to describe data and is basically a markup language – like HTML.

Before I go into the list of items that are needed to make all of this work, I will mention that the details outlined in this article apply to websites that support PHP. PHP is a popular server-side scripting language that is used to create dynamic website content. If your website is running on a Unix-based operating system (like Linux), chances are your web server supports the PHP scripting language. Check with your web host to be sure.

Now, I can make this a long drawn out article on the technical details behind RSS, XML and PHP, but that would result in a boring article that hardly anyone would read! Instead, I'll just layout the necessary details for an entrepreneurial minded individual to setup a website using these technologies in a quick and least confusing fashion, I hope.

Task: Let's say we run a website on gardening and we want to use an RSS feed to add changing content to our site on a regular basis without us having to do any work.

Our goal is to make this new content readable by the search engine spiders. In order to do that, the content needs to be returned via server-side scripting – not client-side scripting (i.e. JavaScript). This is a mistake that a lot of websites that use RSS make.

You see, JavaScript is executed by the client; PHP is executed on the web server. When a search engine spider comes across a JavaScript 'script' tag, it stops spidering until it moves beyond the closing 'script' tag. On the other hand, PHP converts the script to HTML on the web server and sends the results back to the client (browser). So when a search engine spider comes across a web page that uses RSS with PHP, the spider only 'sees' the returned HTML – as if the PHP script were never there. So, PHP with RSS is definitely the route to take for SEO conscious website owners.

Here's what we need to accomplish our task:
1) An RSS feed link
2) An RSS Tool (PHP script) that can convert an RSS feed into HTML
3) An HTML output-template

Getting an RSS feed link...

A good place to start looking for an RSS feed is 2rrs.com, where you can execute an 'RSS Search' for the keyword 'gardening'. You'll likely see a bunch of results. Click on any of them. You'll now find an RSS2HTML link under the 'Details' section - which is your RSS feed link. Copy the full HTTP path to this link; we will need it for configuration in later steps.

Now we need to get an RSS Tool (PHP script) that can convert an RSS feed into HTML, and we also need an HTML output-template…

So, we need a method to take our RSS feed and convert it into HTML so we can insert it into our web page. The best way to do this is to use an awesome little PHP script called rss2html.php.

You can download this script here: http://www.feedforall.com/more-php.htm (Choose Option two -> Download)

Unzip the download file and you'll find a sample HTML output-template file called sample-template.html and an rss2html.php file. These files will eventually need to be moved to your web server, but before you do that, let's configure everything...

The PHP file is the work horse and does the RSS XML to HTML conversion, so there are some configuration settings within this file that need to be set. Open the file in a regular text editor (like Word Pad) and make the following 3 configuration changes:

Configuration change #1:
Find the following line of code: $XMLfilename = "sample.xml"; Change it to: $XMLfilename = "Your-RSS-Feed-Link";

The above line of code tells the PHP script where to get your RSS XML feed (file). Remember, the RSS XML feed contains the content which you are trying to add to your website. The website that you get your RSS feed from will update this feed as new content becomes available from the website. (Note: be sure not to download the XML file and specify a local path to it – this will result in your website always using the same XML file – which means your website will not be updated with new content from the RSS XML source.)

Configuration change #2:
Find the following line of code: $TEMPLATEfilename = "sample-template.html"; Insert your HTML output-template name in place of sample-template.html.

The rss2html.zip that you downloaded from the feedforall link above comes with a sample-template.html that you can use. However, the template from feedforall encompasses the entire HTML code for the entire webpage (from the opening 'html' tag to the closing 'html' tag). If you're inserting this content into your pre-existing webpage, then you'll likely only want to use the HTML code between the opening 'table' tag and the closing 'table' tag. This will allow you to insert a table into your webpage where each row represents an article from your RSS XML feed source.

Configuration change #3:
Find the following line of code: $FeedMaxItems = 10000;

The number '10000' above represents the number of items that you want to retrieve from the RSS feed – which works out to be the number of rows in your HTML table from the previous step. You can leave this setting as is, or you can change it to any positive number your like. For example, if you change it to 5, then the PHP script will display the top 5 RSS feed articles from your RSS feed source.

When you're done with these configuration settings you can upload these files to your scripts directory on your web server and add the following line of code to your website's HTML file where you would like the RSS feed content to appear:

include ('path_to_scripts_directory/rss2html.php');

Make sure to prefix the above line of code with a 'less-than' symbol followed by a question mark, as well as, postfix it with a question mark followed by a 'greater-than' symbol. Also, remember, if your webpage was initially an html file (i.e. filename.html) then you will want to change it to filename.php in order for the web server to know how to handle the above PHP script.

There you go... an easy way to add changing content to your website without any extra work on your part.

Sincerely,

By Michael Ellis