PHPDeveloper.org

PHP.net: New Supported Versions Timeline Page

Wed, 10/29/2014 - 16:18

The PHP.net website has introduced a new feature to help make it a bit clearer which versions of PHP are supported and which have reached their end-of-life mark. This new Supported versions page off the main site provides listings of currently supported versions and graphical timelines of past (and future) support milestones.

Each release branch of PHP is fully supported for two years from its initial stable release. During this period, bugs and security issues that have been reported are fixed and are released in regular point releases. After this two year period of active support, each branch is then supported for an additional year for critical security issues only. Releases during this period are made on an as-needed basis: there may be multiple point releases, or none, depending on the number of reports.

The page includes information on when the initial release in a series was made (like the 5.4.x or 5.5.x series), when active support did/will end and how long the timeline is for security fixes and support. As of the time of this post, PHP 5.3.x is the only series that has reached end-of-life, but the 5.4.x series is coming close being in security fix only mode now and EOL-ing completely in ten months.

Link: http://php.net/supported-versions.php

Anna Filina: Reduce number of queries

Wed, 10/29/2014 - 15:53

In her most recent post Anna FIlina makes a recommendation to those looking to increase the performance of an application, especially one that's already in place: simply reduce the number of queries. It sounds simple enough, but can sometimes prove to be difficult depending on the application.

Customers often call me because their site is slow. One of the most common problems I found was a high number of queries that get executed for every single page hit. When I say a lot, I mean sometimes more than 1000 queries for a single page. This is often the case with a CMS which has been customized for the client's specific needs.

In this article, aimed at beginner to intermediate developers, I will explain how to figure out whether the number of queries might be a problem, how to count them, how to find spots to optimize and how to eliminate most of these queries. I will focus specifically on number of queries, otherwise I could write a whole tome. I'll provide code examples in PHP, but the advice applies to every language.

She suggests starting from "the top", looking at the browser's own information on which pieces of data are taking the longest to return back to the client (the latency). This gives a starting direction and tells you where to look for the worst offenders. She talks about a technique to locate and count the queries being made and some common issues found in multiple kinds of software (hint: loops). Then she gets down to the optimization - combining similar queries and better queries through joins.

Link: http://afilina.com/reduce-number-of-queries/

Beth Tucker Long: How to Submit a Talk to a Conference

Wed, 10/29/2014 - 14:21

If you've ever considered taking the leap and trying your hand at speaking at (technology) conferences but weren't sure where to start Beth Tucker Long, well known PHP community member and speaker, has posted a guide to help you submit a talk to your conference of choice.

I've been on both sides of the proverbial conference table. I have been the one submitting proposals, hoping against hope that they will pick mine, and I have been on the selection committee, struggling to choose between hundreds of awesome proposals when you only have a few talk slots available. Through these varied experiences, I've learned a few things about what works and what doesn't when submitting a conference proposal.

She provides a "checklist" of sixteen things that she's learned over the years about submitting ideas to events and what to do/not do when giving the actual presentation including:

  • First and foremost, remember to hit spell-check
  • Don't talk about yourself in your talk description
  • Explain the practical applications of your topic
  • Share past feedback in the comments or notes section
  • Submit a lot of proposals
  • Don't submit multiple topic ideas or variable time lengths in one submission

The final three on her list have more to do with the presentation itself than the proposal and, in my opinion, are almost more important: don't talk down to your audience, be brief and be interesting.

Link: http://www.alittleofboth.com/2014/01/how-to-submit-a-talk-to-a-conference/

Community News: Packagist Latest Releases for 10.29.2014

Wed, 10/29/2014 - 13:06
Recent releases from the Packagist:

Community News: Recent posts from PHP Quickfix

Wed, 10/29/2014 - 12:05
Recent posts from the PHP Quickfix site:

SitePoint PHP Blog: Building an Ad Manager in Symfony 2

Tue, 10/28/2014 - 18:29

In a recent post to the SitePoint PHP blog Hugo Giraudel shows you how to create an ad manager as a Symfony-based application. His ad manager allows you to use videos, images or HTML content to create and cache advertisements to add to any application.

The main idea was to build an ad manager. What the hell is an ad manager you say? Let's say you have some places on your site/application to display ads. We do have things like this on our site, and one of our teams is (partially) dedicated to bringing those places to life with content. Now for some boring reasons I won't list here, we couldn't use an existing tool, so we were doomed to build something from scratch. As usual, we wanted to do a lot without much coding, while keeping an overall simplicity for the end user (who is not a developer). I think we came up with a fairly decent solution for our little project.

He uses ESI rendering with Twig templates to identify the ad to return, grab its configuration and render it back to the requesting client. He includes a global configuration (URI and allowed types) an an example of a per-ad configuration file that includes the cace settings, data type and link. The code is also included to consume the request for the ad and render the result. There's also a "randomize" method that picks a random item from the array by weight. Finally, he includes the view templates that can be used to render the results - one for the main ad layout and a few for each type (video, image or HTML).

Link: http://www.sitepoint.com/building-ad-manager-symfony-2/

Voices of the ElePHPant: Interview with Erika Heidi Reinaldo

Tue, 10/28/2014 - 17:54

The Voices of the ElePHPant podcast has released their latest PHP community interview episode. In this new episode Cal interviews Erika Heidi Reinldo, a developer and author from Amsterdam.

They talk about how she got started speaking and in the PHP community. She also offers some advice to those wanting to get into speaking at conferences. They also talk about her subject matter of choice, Vagrant, and how she decided to focus on it. They also talk some about her new job as a developer advocate at Digital Ocean.

You can listen to this latest episode either through the in-page player or by downloading the mp3 directly. If you enjoy the episode, be sure to subscribe to their feed.

Link: http://voicesoftheelephpant.com/2014/10/28/interview-with-erika-heidi-reinaldo/

Pascal Martin: PHP Version Statistics - October 2014

Tue, 10/28/2014 - 16:23

Pascal Martin's latest post (in French, but the English version is coming soon) shares some statistics he's gathered around the usage of various software around the web, more specifically those involved in web-based applications.

I've collected statistics about the use of different PHP versions several times. The first time was in September 2011 and the most recent was in November 2013. At this point, PHP 5.2 still accounted for 34.4% of all PHP installations with PHP 5.3 moving up to 48.7%. This new data was collected the weekend of October 19th, 2014. At this point, the current stable versions of PHP are 5.4.34, 5.5.18 and 5.6.2. PHP 5.3 is no longer maintained (since August 14th 2014) and PHP 5.2 hasn't been supported for 4 years now.

He's broken up the statistics into a few different sections:

  • Web server software
  • Usage of major versions of PHP
  • Usage of minor versions of PHP
  • Versions in use under each of the major version numbers

He includes both the raw numbers (percentages) and some graphs showing the results in a bit more consumable fashion. It's interesting to see that, despite it being quite an old version now, PHP 5.3.x still has the largest share in the usage results.

Link: http://blog.pascal-martin.fr/post/statistiques-versions-php-2014-10

Zumba Tech Blog: Caching CakePHP 2.x routes

Tue, 10/28/2014 - 15:47

On the Zumba Tech Blog today there's a new post with some helpful hints around caching routes in CakePHP 2.x to help optimize the requests and response time even further.

At Zumba we are continuously looking for optimization in our applications. These optimizations help to reduce the server loads, consequently reducing the number of servers and saving money. Besides that, it gives a better user experience for the end user by serving content faster and in some cases saving on consumer bandwidth (specially for mobile users). This week we profiled our app using Xdebug profiler and we identified the router was responsible for a big part of the request time. [...] In order to optimize the routing time, we started looking at options to optimize our routing process. After some research and deep checking in our codebase as well as CakePHP's code, we found we could cache the routes easily.

Taking a cue from how FastRoute does their caching, their implementation uses a temporary file with the routes completely resolved and written out for easier handling. Since the routing is relatively static, this method works well and can be much faster than resolving them every time. They talk about some of the work done to optimize their method and some of the issues they came across during the process.

Link: http://tech.zumba.com/2014/10/26/cakephp-caching-routes/

Angular Tips: Working With a Laravel 4 + Angular Application

Tue, 10/28/2014 - 14:11

On the Angular Tips site today they have a tutorial posted showing you how to combine the power of the Angular JS frontend framework with a Laravel backend. They walk you through the full process of getting an application up and running, including a bit of actually functionality (not just a "Hello World").

So you decided that Laravel is a great choice for a backend and that Angular is going to fit perfectly as the framework of choice for the frontend. Yeah! That is correct and I am starting to like you. How to start? So many question, so little time.

They start by getting everything you'll need installed, both on the Laravel and Angular sides. Then it gets into the actual development of the application, changing up the default Laravel page to include Angular and a little test to be sure it's working correctly. With this working correctly (after a little route updating too) they get to the more real-world application: a listing of TV shows generated from a dataset on the Laravel backend. They include all the code you'll need to create the frontend app and display the results.

Link: http://angular-tips.com/blog/2014/10/working-with-a-laravel-4-plus-angular-application/

Community News: Packagist Latest Releases for 10.28.2014

Tue, 10/28/2014 - 13:05
Recent releases from the Packagist:

Community News: Latest PECL Releases for 10.28.2014

Tue, 10/28/2014 - 12:06
Latest PECL Releases:
  • timezonedb 2014.9 Updated to version 2014.9 (2014i)

  • pq 0.5.5 - Re-add the default configureoption for the PEAR/PECL installer - Let JSON be decoded to arrays unless the fetch type is FETCH_OBJECT * Fix remaining build issues

  • pq 0.5.4 * Fix build on MacOSX

  • pq 0.5.3 + Add PostgreSQL-9.4beta3 type OIDs * Fix JSON dep (Remi) * Fix build on MacOSX

  • yar 1.2.4 - Fixed bug "can not get fd from curl instance" on MacOS and Windows - Add Yar_Concurrent_Client::reset to meet #26 - Fixed build with libcurl-7.12 - Enable msgpack prompt in package.xml

  • yac 0.9.2 - Add --with-system-fastlz option

  • yaf 2.3.3 - Fixed build with PHP-5.6

NetTuts.com: Refactoring Legacy Code - Part 11: The End?

Mon, 10/27/2014 - 18:36

NetTuts.com has completed their series on refactoring with the posting of part eleven today: "The End?" This post finishes off a series where they've moved from the most basic level of testing out to a complex set of tests that can ensure your code's quality and functionality even after making their recommended refactoring changes.

In our previous lesson we've learned a new way to understand and make code better by extracting till we drop. While that tutorial was a good way to learn the techniques, it was hardly the ideal example to understand the benefits of it. In this lesson we will extract till we drop on all of our trivia game related code and we will analyze the final result.

They start off by "attacking the longest method" (wasCorrectlyAnswered) by starting the testing process. They make some simple checks to ensure the output is correct for various circumstances and values. With these tests in place, they safely refactor the method, splitting it up into functional pieces and completely dropping the method in favor of more targeted handling. They finish off the post with a look at some final results and comparing the refactored code with the original on things like lines of code, complexity, dependencies and structure (using this tool).

Link: http://code.tutsplus.com/tutorials/refactoring-legacy-code-part-11-the-end--cms-22476

SitePoint PHP Blog: Strategic Archive Extraction with Distill

Mon, 10/27/2014 - 17:09

In this new tutorial from the SitePoint PHP blog about using the Distill tool to extract information and files from remote archives.

Perhaps you are building an application which depends on archives; for example, you constantly have to download archives and extract files from them. There are many libraries out there that can help you get files extracted from an archive, and a new player in town capable of doing this job is Distill. With Distill, you can easily extract an archive into a specified directory. You can also give multiple archives to Distill and let it pick the most optimal one, as per a strategy you define yourself.

He walks you through the setup of the tool (installed via Composer) and some of the basic usage. He creates a simple "Extractor" object setting the Distill object and an "extract" method that handles the actual functional part of the process. He also adds some configuration constants to the class for size checking, compression speed and random strategy types (Distill will pick the most optimal). He then makes a "chooser" method to pick the best one and calls the "extract" method to get the results.

Link: http://www.sitepoint.com/strategic-archive-extraction-distill/

Fabien Potencier: The PHP Security Advisories Database

Mon, 10/27/2014 - 16:54

Fabien Pontencier has made an official announcement about a move to make the PHP Security Database the Symfony project started over a year ago. In the announcement he talks about the move to (hopefully) make it more widely adopted - pulling it out from under the Symfony namespace and into the FriendsOfPHP organization.

A year and a half ago, I was very proud to announce a new initiative to create a database of known security vulnerabilities for projects using Composer. It has been a great success so far; many people extended the database with their own advisories. As of today, we have vulnerabilities for Doctrine, DomPdf, Laravel, SabreDav, Swiftmailer, Twig, Yii, Zend Framework, and of course Symfony (we also have entries for some Symfony bundles like UserBundle, RestBundle, and JsTranslationBundle.)

[...] Today, I've decided to get one step further and to clarify my intent with this database: I don't want the database to be controlled by me or SensioLabs, I want to help people find libraries they must upgrade now. That's the reason why I've added a LICENSE for the database, which is now into the public domain.

The database has already been moved over to the FriendsOfSymfony organization and is still functioning with the SensioLabs security checker. You can find more on the database and its contents in this GitHub project.

Link: http://fabien.potencier.org/article/74/the-php-security-advisories-database

Symfony Blog: SymfonyCon Madrid 2014: Entire speaker line up revealed!

Thu, 10/23/2014 - 18:56

In this latest announcement on the Symfony blog they've announced the release of the full schedule for the upcoming SymfonyCon Madrid 2014 (happening near the end of November). The lineup includes:

  • "Growing and managing communities for large Open Source projects" by Jen Lampton
  • "Life After Assetic: State of the Art Symfony 2 Frontend Dev" by Michelle Sanver
  • "Feature Flags with Symfony" by Benjamin Eberlei
  • "The Twelve-Factor App: Best Practices for PHP on Platforms-as-a-Service" by David Zuelke
  • "Implementing data synchronization API for mobile apps with Silex" by Michele Orselli

The event will also include a keynote from Fabien Potencier and close with a look at profiling in PHP from the same. You can find out more about the conference and pick up your own tickets on the main conference site.

Link: http://symfony.com/blog/symfonycon-madrid-2014-entire-speaker-line-up-revealed

SitePoint PHP Blog: Where are you? Implementing geolocation with Geocoder PHP

Thu, 10/23/2014 - 17:45

The SitePoint PHP blog has a new tutorial posted by Arno Slatius showing you how to use geocoding in PHP to find the latitude and longitude of a point given its address or name. He makes use of the geocoder-php library to make things a bit simpler.

The beauty of SitePoint, to me, is that you can get inspired to try something or be told about some cool project out there. The internet is simply too big for one person to scout out on their own. Geocoder was one of those for me. I had never heard about it and came across it on the authors Trello board. I love working with maps and geographic information and I use (reverse) geocoding heavily for a project I did for a client; CableTracks. [...] I found out that Geocoder PHP actually is what I was missing for the integration of various services that we use.

He starts by helping you get the library installed (either via Composer or manually) and the creation of a simple Google Maps goecode request for a location. He includes an example of the results and mentions how the library handles locales in both the input and output. He also shows how the tool lets you do reverse geocoding - given a latitude and longitude, it can provide you address and location information. It also includes lookup support for IP addresses and output formatting and examples using both are also included.

Link: http://www.sitepoint.com/implementing-geolocation-geocoder-php/

NetTuts.com: Basic Functional Testing With Symfony 2's Crawler

Thu, 10/23/2014 - 16:21

In this new tutorial on the NetTuts.com site Andrew Perkins shares a way that you can use Symfony2's own Crawler to do some simple functional testing.

Testing your web applications is one of the best things you can do to ensure its health, safety, and security, both for the app and your app's visitors. Symfony 2 offers a complete integration testing suite that you can use to make sure your applications run just as you expect. Today we'll look at how we can use Symfony 2 and PHPUnit, the testing framework that it employs, to write basic functional tests using the Crawler.

He starts off by helping you get a Symfony2 instance installed, the Standard edition, and grabbing the latest PHPUnit phar file from the project's site. He then gets into the actual development of the Crawler bundle, using the command line Symfony tool to do some of the automatic code generation for you. They show how to execute the PHPUnit tests and make the first controller/action/routes for the sample pages to test. He then makes the first test file, extending the "WebTestCase" class from the Symfony2 components. He makes a simple client, executes the request and shows how to test various parts of the response (including an example of mimicking the clicking of a link).

Link: http://code.tutsplus.com/tutorials/basic-functional-testing-with-symfony-2s-crawler--cms-20666

Robert Hafner: A Walkthrough of PSR-6: Caching

Thu, 10/23/2014 - 15:17

The PHP-FIG (Framework Interoperability Group) has been helping to define standards that can be adopted by projects to make them easier to cross-pollinate and give developers more choices with less hassle. One of the latest to be proposed by the group is PSR-6, the Caching proposal. For those not familiar with it, Robert Hafner has written up an introduction to the proposal and what it all entails.

There's been a lot of discussion about PSR-6, the php-fig caching interfaces, so I thought it was time to step in and describe what this system is all about. Be prepared to read far more about caching interfaces than you probably thought possible.

He starts with a look at why a standard like this might be necessary (and links to the PSR-6 docs for the official word). He does also mention some alternative proposals and gets into details - with code examples - of each of them and shows how they relate back to what's proposed in PSR-6. He finishes off the post with a brief Q&A trying to dispel some of the myths that have com up around the standard. These include "This is all just too complex", "The Pool/Item model isn't used anywhere" and " This is just standardizing Stash", each with their own summary and feedback.

Link: http://blog.tedivm.com/rants/2014/10/a-walkthrough-of-psr-6-caching/

Community News: Packagist Latest Releases for 10.23.2014

Thu, 10/23/2014 - 14:02
Recent releases from the Packagist: