Archive August 2023


Cloudflare API purge cache by URL example

Cloudflare is a great free tool that offers static asset caching out of the box. You can also cache dynamic pages with it, which is quite handy.

Caching things is nice, but invalidating the cache is not a fun business. 

There is this popular quote:

There are only two hard things in Computer Science: cache invalidation and naming things.
-- Phil Karlton

I've done a little experiment with Cloudflare. I've configured caching in my blog. The post you are reading right now is cached in CF, currently with a TTL (Time to live) of 1 day.

After configuring the cache, a question immediately arose in my mind. If I update an article I'll need to wait for the cache to expire before the modifications become visible to the public, which is not ideal. I want immediate updates, but then I also want caching

So what is the solution? Simple - invalidate the cache each time the blog post is updated. Thankfully, Cloudflare offers free API, which allows you to do just that - purge cached content by URL. The documentation is not quite clear, and the method I've used is not documented 🤔, but it works, trust me.

How to use Symfony DomCrawler with examples

The Symfony DomCrawler component is a powerful tool within the Symfony framework for web scraping and HTML/XML parsing. It provides a convenient and intuitive API for traversing and manipulating HTML or XML documents, making extracting specific elements, attributes, and text from web pages easier.

How to fix "You have a new message" iOS notification

In the last few days, I get "You have a new message" Gmail notifications on my iPhone instead of the normal notification with the subject and part of the message itself.

It's quite an annoying issue, given the fact that I haven't changed my notifications settings.

How to use Symfony process component with examples

To use Symfony process, you need first to install the component:

$ composer require symfony/process

How to modify image EXIF metadata - Date Created / Date Modified [Command line tool]

To modify image EXIF metadata - Date Created / Date Modified you can use ExifTool with the following command:

exiftool -AllDates='2021:11:11 13:25:23' my_image.jpg

Where 2021:11:11 13:25:23 is the desired date and my_image.jpg is the filename of the image.

Note that this is a command line tool that has no graphical interface.

Full Exiftool installation guide

You can find step by step tutorial below.

How to generate app secret in Symfony

To generate Symfony app secret (APP_SECRET) env variable, you can use this hash function

$ date | md5
537de50fff573db835bab59ddeb92ca8

This takes the current date and hashes it with the md5 function.

What's new in PHP 9

PHP 9 will be the next major release of the PHP language.

The release date is still unknown, but we have hints about what's new. By looking into the PHP Wiki RFC section, we can get clues about what is coming next.

In this article, we'll cover the approved/implemented RFC (Request for Comments) and keep it updated with the latest information about PHP 9.

How to run ElasticSearch queries with PHP and cURL example

In the realm of modern data handling, Elasticsearch has emerged as a powerhouse, offering rapid data search and analysis.

As a PHP developer, integrating this robust search engine into your projects can elevate your data operations to new heights. In this article, we'll illustrate a concise example of how to create an index, create a document, get a document, and search for documents using PHP's cURL library.

The following examples will empower you to efficiently store, retrieve, and manipulate data through Elasticsearch's RESTful API, all within the familiar PHP environment.

Symfony vs Laravel Performance Benchmark

I've decided to test the performance of two popular PHP frameworks - Laravel and Symfony. The results surprised me.

The performance test which I've conducted is quite simple. I've created two projects in Symfony and Laravel with only one page, no database queries, no API calls, and no complex calculations, just one simple page. Then I ran HTTP stress tests using a benchmarking tool against both setups and the results are surprising.

You can check both projects on my GitHub - Symfony / Laravel.

Symfony version: 5.4

Laravel version: 10.10

Did you know that Laravel uses a lot of Symfony components under the hood?

Symfony is known for making really good components used across the whole PHP ecosystem in numerous packages. Most of the Symfony components can be used as a standalone package without the need for Symfony itself, which is quite handy.

For example, the laravel/framework packages uses 11 Symfony components (at the time of writing this post), some of which are symfony/routing, symfony/mailer, symfony/http-foundation etc.

Let's start with the fun part.

How to get all indices in ElasticSearch with curl command?

To get all indices in ElasticSearch with curl, you can use the following command:

$ curl localhost:9200/_cat/indices

which outputs

$ curl localhost:9200/_cat/indices
yellow open test-index-yoan                 5ChC9F9ZSGSRmooDAIrd9A 1 1 0  0   208b   208b
yellow open my-index-000001                 Be3surqXQzy8_EVW9k1VZA 1 1 0  0   208b   208b