Adam CulpSolve problems and stop failing with PHP (15.6.2019, 20:19 UTC)

Imagine living in a 500 square-foot store, in a strip mall. The back half of the business was as expected, with a bathroom, 2 small offices, and work area. The front was a bedroom barely large enough to hold a bed, and a living room barely able to contain a couch and TV. The only thing separating the living room from the sidewalk, and the busy main street, was paper taped onto the floor to ceiling windows. And behind that, some vertical blinds to make it more home-like.

In 1996, that was my life. I was broke, and could no longer afford an apartment, so I moved into the front half of my failing business. I had one employee, who believed in me so much they were willing to donate their spare time to help me because I couldn’t afford to pay them.

Up to that point in my life, I had never made more than $9,000 in a single year. I was a failure, and couldn’t find a way out. I was living by eating a single Subway $5 foot-long sub…each day…for weeks, because that is all I could afford. And friends contributed cigarettes to keep that habit alive.

“I was living on a single Subway $5 foot-long sub…each day”

To top things off, I was experiencing anxiety attacks multiple times each day. After a couple of trips to the emergency room convinced I’d had a heart attack, I finally gave up going there because the bill was already thousands that would continue dragging my credit rating even farther down.

But then, something happened that changed my life as a nurse in the emergency room was asking me general health questions, such as age, height, weight, how much did I smoke/drink? (I answered 2 packs of cigarettes and 2 pots of coffee a day.) She looked at me with caring eyes and asked, “Do you think God intended you to put that much poison into your body?”

For some reason, I’d never thought of my bad habits in that manner, and it made sense to me. So, at that moment I quit smoking and stopped drinking coffee. This caused me to suffer from bronchial spasms severe enough I could visually see my chest quivering despite wearing a shirt, and even more anxiety attacks over the following month.

I moved in with family at the age of 30 and started searching for a job. In northeast Ohio, that is no small task. That area of the country has been abandoned for so long that the population of Youngstown, Ohio has declined from 160,000 in the ’70s to only 60,000’ish in 2017. (

Finally, I found a job selling cars for about a year, which paid fairly well. And luckily a friend of my mom offered me a job as a service person with a cabinetry company, which was the best job I’d ever had to that point. I loved it and thrived.

As one part of the job, I generated my own reports allowing me to grow quickly over a couple of years from District manager to Area manager. As I was being considered for Regional manager, the company offered me a job in Florida generating reports for the entire country, which meant I needed to move to Florida. I took it, and in 2000 I moved to West Palm Beach.

This is when I was introduced to programming as the events of 911 caused me to lose my job. In 2002 I started learning to program with PHP and accepted funding from Florida to get some training to learn system administration.

After a job as a system administrator, I decided I liked web programming more and focused on finding a new job doing that.

Over the following years, I continued gaining skills and moved from one job to the next to ensure my level of compensation kept up with my newly acquired skills. I also took up long distance ultra-running, and Judo, as I continued to improve my life and grow personally.

Today, as a senior/architect level web developer, who has also worked as a consultant and now as a developer advocate, I’ve gained much over the past 21 years with many amazing accomplishments.

Maybe I would have achieved these things regardless of the technology used, and PHP enabled me to do it more easily than I think any other programming/scripting language would have. Looking back, it was the approachability of PHP that allowed me to start solving problems quickly and allowed me to continue growing my skills as PHP itself continued to mature.

You may ask, “Why are you sharing this?”. Or you may get the impression I’m bragging. And perhaps that is a little true. But most of all I wish to share 3 thoughts, which is why I am sharing my story in such an open way.

#1 – If you are down on your luck, and struggling to get by. Know that as long as you continue to push forward, great things will eventually happen. Don’t stop.

Truncated by Planet PHP, read more at the original (another 1146 bytes)

larry@garfieldtech.comI was wrong abput PSR-11 (15.6.2019, 19:43 UTC)
I was wrong abput PSR-11

Back in January 2017, the PHP Framework Interoperability Group (FIG) reviewed and passed PSR-11, the "Container Interface" specification. It was a very simplistic 2-method interface for Dependency Injection Containers, which had been worked on for some time by a small group. (This was before FIG had formal Working Groups, but "container-interop" was one of the effectively proto-Working Groups that were floating about.)

PSR-11 passed overwhelmingly, 23 to 1 out of the FIG member projects at the time. The lone holdout was Drupal, for which at the time I was the voting representative.

Two and a half years later, I will say I was wrong, and PSR-11 has been a net-win for PHP.

Continue reading this post on SteemIt.

Larry 15 June 2019 - 2:43pm
Voices of the ElePHPantInterview with John Kelly (14.6.2019, 16:40 UTC)
Derick RethansPHP Internals News: Episode 14: __toString() Exceptions (13.6.2019, 08:14 UTC)

PHP Internals News: Episode 14: __toString() Exceptions

In this fourteenth episode of "PHP Internals News" we talk to Nikita Popov (Twitter, GitHub) about a late __toString Exception RFC.

The RSS feed for this podcast is, you can download this episode's MP3 file, and it's available on Spotify and iTunes. There is a dedicated website:


Music: Chipper Doodle v2 — Kevin MacLeod ( — Creative Commons: By Attribution 3.0

Become a Patron!
PHP: Hypertext PreprocessorPHP 7.4.0 alpha 1 Released (13.6.2019, 00:00 UTC)
PHP team is glad to announce the release of the first PHP 7.4.0 version, PHP 7.4.0 Alpha 1. This starts the PHP 7.4 release cycle, the rough outline of which is specified in the PHP Wiki. For source downloads of PHP 7.4.0 Alpha 1 please visit the download page. Please carefully test this version and report any issues found in the bug reporting system. Please DO NOT use this version in production, it is an early test version. For more information on the new features and other changes, you can read the NEWS file, or the UPGRADING file for a complete list of upgrading notes. These files can also be found in the release archive. The next release would be Alpha 2, planned for June 27. The signatures for the release can be found in the manifest or on the QA site. Thank you for helping us make PHP better.
Evert PotBrowser tabs are probably the wrong metaphor (11.6.2019, 21:14 UTC)

Back when Internet Explorer was dominant, and every developer I knew installed Firefox on every family member and their dogs desktop, I remember a big selling point for convincing people to use Firefox was ‘Tabs’.

Firefox may not have been the first browser to introduce tabs, but in my experience it was the number one selling point to get people to switch. Especially those that otherwise didn’t care about Internet Explorer being dominant and stagnating the web.

Firefox 1.5 featuring tabs Firefox 1.5 featuring tabs. Via:

Since then, pretty much every desktop browser has adopted the same basic UI only mild variations.

One thing that kind of interests me is that every now and then I spot someone with a ridiculous number of tabs open. On Firefox this is still somewhat managable, because tabs don’t shrink below a certain size, but show arrows on each side to scroll through them, along with a menu.

Firefox 66 with a lot of tabs Firefox 66 with a lot of tabs

On Chrome though, having a lot of tabs open makes it become completely unusable.

Chrome with a lot of tabs Chrome with a lot of tabs

The surprising thing to me is that I see this a lot on family members’ and friends’ screens.

When I would see this at first, I admit I may have made a little fun of people. Maybe commenting on their poor organizational skills, but I soon realized this pattern was common enough that it’s hard to blame the user, and I’ve started to feel that for many (if not most) browser users, the tab is just a bad UI.

When interviewing people with a ton of tabs on their screen and asking them why, the most common responses can be somewhat categorized as:

  • I need to get back to that tab later.
  • I just keep opening new tabs and forget about the old ones.

When asking the first group for more information, I realized that a lot of people use tabs as a sort of bookmark. Something to get back to later. One person I talked to was afraid for restarting their computer, because of the risk of not being able to get back to their open tabs.

I tend to use tabs for ‘currently active work’ and tend to keep them somewhat organized, and I’m sure there are plenty of people like myself. But for all the people that accumulate hundreds of tabs, I feels like the time is right for a better paradigm that combines bookmarks, tabs and history.

Perhaps organizing sessions in interactive timelines and grouping things together based on the user’s behavior might be a better approach. I believe that anything that requires active management and organizing would probably not work though. I don’t think I would remove the tab altogether, but just show me the last few things, treat them as emphemeral and provide an option to explore my current and previous session(s).

I’m sure experiments are out there, but so far it doesn’t seem like major browser vendors have had the guts to release something new. This is a bit surprising to me because despite the fact that competition is fierce and users tend to have strong opinions, everyone seems to be doing very similar things and converge on Chrome.

Perhaps part of the issue is that everyone just wants to cater to the largest possible audience, making everyone risk averse.

Anyway, this is all speculation with no data from a non-expert. Curious what your thoughts are, or if you know of any experiments that solve this problem.

Wanna respond? Reply to this tweet

Evert Pot430 Would Block (11.6.2019, 15:00 UTC)

If you look at lists of HTTP status-codes, you might notice that there’s a gap between 429 Too Many Requests and 431 Request Header Fields Too Large.

I find this interesting, so I did some digging and it turns out that around the same time 429 and 431 there was another status code that never made it into a standard, defining 430 Would Block.

The draft specification has a few solutions to make HTTP/1.1 pipelining features usable. HTTP/1.1 pipelining is a feature that allows a browser to send multiple requests over a single TCP connection before having to wait for the response.

This potentially could be a major optimization, but adoption has been problematic. Since then HTTP/2 was introduces which solves this entirely. Pipelining support did exist in a number of clients and servers, but was often behind a flag that was disabled by default. Since HTTP/2 various clients such as Curl have removed HTTP/1.1 pipelining support entirely, and it’s unlikely this feature will ever come back.

The 430 Would Block status code was a code that a server could use to prevent pipelining multiple requests, for which one of the requests would block subsequent ones later in the pipeline.

Anyway, I wrote this mostly for historical interest sake. Don’t use this.


Derick RethansXdebug Update: May 2019 (11.6.2019, 08:17 UTC)

Xdebug Update: May 2019

This is another of the monthly update reports in which I explain what happened with Xdebug development in this past month. It will be published on the first Tuesday after the 5th of each month. Patreon supporters will get it earlier, on the first of each month. You can become a patron here to support my work on Xdebug. More supporters, means that I can dedicate more of my time to improving Xdebug.

In May, I worked on Xdebug for 32 hours, and did the following things:

2.7.2 Release

I made the 2.7.2 release release available at the start of the month. This released addressed a few bugs:

  • Issue #1488: Rewrite DBGp 'property_set' to always use eval

  • Issue #1586: error_reporting()'s return value is incorrect during debugger's 'eval' command

  • Issue #1615: Turn off Zend OPcache when remote debugger is turned on

  • Issue #1656: remote_connect_back alters header if multiple values are present

  • Issue #1662: __debugInfo should not be used for user-defined classes

The first issue has been lingering since when Xdebug introduced support for PHP 7. PHP 7 changes the way how variables are handled in the engine, which means that is a lot harder to obtain a zval structure that is modifiable. Xdebug uses that existing functionality in the step debugger to modify a variable's contents, but only if a variable type was explicitly set as well. Because it is no longer possible to retrieve this zval structure for modification, Xdebug switched from direct modification to calling the engine's internal eval_string function to set new values for variables.

Xdebug's wrapper around the engine's eval_string function is also used when running the DBGp eval command. IDEs use this for implementing watch statements. Because Xdebug shouldn't leak warning or error messages during the use of DBGp protocol commands, Xdebug's wrapper sets error_reporting to 0. However, that means if you would run error_reporting() through the DBGp protocol with the eval command, it would always return 0. The second bug (#1586) fixed this, so that running error_reporting() with eval now returns the correct value.

The third issue in the list addresses a problem with Zend OPcache's optimiser turned on. It is possible that with optimisations turned on, variables no longer exist, or useless statements are removed to make your code run faster. However, this is highly annoying when you are debugging, because you can no longer reliably inspect what is going on. By turning of the code optimisation when Xdebug's step debugger is active, normality is restored.

The last two items in the 2.7.2 release are minor bug fixes.

Resolving Breakpoints

The fine folks at Jetbrains have looked at my implementation of issue #1388: Support 'resolved' flag for breakpoints. They found that although the implemented functionality works, it would not yet handle the resolving of breakpoints which are set in a scope that is currently being executed (i.e., when the function, method, or closure is currently active). I have briefly looked at solving this problem, but have not yet found a good solution. In addition, I am intending to change the line searching algorithm to scan at most 5 lines in each directions instead of 10. This should prevent unnecessary jumping around, and unintended breaks.

PHP 7.4 Support

The rest of th

Truncated by Planet PHP, read more at the original (another 1793 bytes)

Derick RethansPHP Internals News: Episode 13: Release Management (6.6.2019, 08:13 UTC)

PHP Internals News: Episode 13: Release Management

In this thirteenth episode of "PHP Internals News" I talk with Sara Golemon (Twitter, GitHub) about PHP's Release Management.

The RSS feed for this podcast is, you can download this episode's MP3 file, and it's available on Spotify and iTunes. There is a dedicated website:


Music: Chipper Doodle v2 — Kevin MacLeod ( — Creative Commons: By Attribution 3.0

Become a Patron!
Evert Pot429 Too Many Requests (4.6.2019, 15:00 UTC)

If an service wants to limit the amount of requests clients make, they can use the 429 Too Many Requests status code to inform the client that they’ve exceeded it.

For example, perhaps an API wants to limit users to 100 HTTP requests per hour.

It’s possible to tell a client when they can make requests again with the Retry-After header, but this is optional.


HTTP/1.1 429 Too Many Requests
Content-Type: text/plain
Retry-After: 3600

You exceeded the limit. Try again in an hour


Also see:

LinksRSS 0.92   RDF 1.
Atom Feed   100% Popoon
PHP5 powered   PEAR
ButtonsPlanet PHP   Planet PHP
Planet PHP