Bookmarks tagged with #php.
Show all
Show all
(37) PHP UK Conference 2024 - YouTube
Share your videos with friends, family, and the world
Saved
on: 2024-02-16
Building a Better PHP Project: What Tools Should I Not Miss?
Saved
on: 2023-12-15
Design Patterns in PHP 8 Series' Articles - DEV Community
View Design Patterns in PHP 8 Series' Articles on DEV Community
Saved
on: 2023-09-08
(4) PHP doesn't suck (anymore) - YouTube
PHP in 2023 is very different than PHP in 2012. Let's run through some of the changes!Looking for PHP jobs or looking to hire PHP devs? Check out Larajobs: h...
Saved
on: 2023-08-17
Route Binding in Laravel - Ahmed Ash
Exploring Laravel and its features deeply. Making complex ideas easy to understand.
Saved
on: 2023-08-08
Testing without mocking frameworks.
Over the years, my coding practices have changed a lot. From hacking away until
it works to TDD/BDD/DDD and everything in between. One of the biggest changes in
my developer career has been when, why, and how I test my code. In particular,
my view on mocking frameworks has changed a lot. A couple of years ago I was
convinced I could not live without them, now I wish I could do just that.
I've come to the point where I generally advise against the use of mocking
frameworks. After a couple intera
Saved
on: 2023-03-28
Steve vs Matt — How two developers approach the same problem | Laravel News
It's common to see two programmers who code the same feature differently. It's much less common for those two programmers to see eye-to-eye and remain friendly
Saved
on: 2022-12-21
Effective Eloquent | Laravel News
Get ready to level up your Laravel skills with this tutorial on eloquent queries! You'll learn everything you need to know, from beginner to advanced techniques
Saved
on: 2022-12-21
Modern PHP features explained - PHP 8.0 and 8.1 | Laravel News
Since its release, PHP 8 has been a game changer. In this tutorial, let's walk through all the latest features with real-world examples of when to use them.
Tags:
#php
Saved
on: 2022-10-28
DDD, Hexagonal, Onion, Clean, CQRS, … How I put it all together – @hgraca
In my last posts I’ve been writing about many of the concepts and principles that I’ve learned and a bit about how I reason about them. But I see these as just pieces of big a puzzle. …
Saved
on: 2022-08-17
Benchmarking serialization | PeakD
I benchmarked PHP's native serializer vs code export. You won't believe what I found!... by crell
Saved
on: 2022-06-29
On the use of enums | PeakD
When should you use PHP enums, and when shouldn't you?... by crell
Saved
on: 2022-06-29
Symfony Demo meets Modular, Microservice-ready Architecture : r/PHP
Saved
on: 2021-12-09
Modern PHP Cheat Sheet - Front Line PHP
Modern PHP Cheat Sheet from the book Front Line PHP
Saved
on: 2021-11-26
What’s New in PHP 8.1: Enums, First-Class Callables, Fibers, Readonly Prope
Brent Roose, Nikita Popov, Larry Garfield, Dmitry Stogov, Matthieu Napoli, and Aaron Piotrowski talk about all the new features in PHP 8.1.https://php.net/re...
Tags:
#php
Saved
on: 2021-11-26
Recommendations for productivity tools/libraries? : r/PHP
Saved
on: 2021-11-06
Wouter Carabain
In this article I'll explain the basics of using the Messenger component of Symfony. I'll cover the basic usage of this versatile component.
Saved
on: 2021-10-10
PHP 8.0: How to Get Started & The Most Interesting New Features - Wizeline
Tags:
#php
Saved
on: 2021-09-24
Symfony vs Laravel: Comparing Features and Benefits
In this article, you’ll learn the similarities and differences between Laravel vs. Symfony and choose the one that best suits your project.
Saved
on: 2021-07-30
[Common mistake] Sharing session across multiple Laravel subdomain - DEV Co
To Share session across domain and it's multiple especially when you have large ecosystem were...
Saved
on: 2021-06-17
Writing better Regular Expressions in PHP • PHP.Watch
How to write more readable, self-explanatory, and effective regular expressions in PHP.
Saved
on: 2021-06-16
What it means to run a monolith on AWS Lambda
A stable software development model combined with the elasticity of serverless solutions.
Saved
on: 2021-05-31
Tuning Nginx and PHP-FPM… The Right Way - Nomad PHP
Presented by Evan Coury @EvanDotPro
Presented on December 18, 2014
More and more large companies and websites are switching over to Nginx + PHP-FPM for increased performance and more efficient resource utilization. When properly tuned, this duo can be a perfect match for high traffic situations. However, it only takes one small oversight in the configuration to bring your site to a grinding halt under high load. Join Evan Coury, owner of Roave, as he shares all of his tips and tricks learned throughout years of high scalability consulting and running several extremely high traffic websites. We’ll cover how to optimally tune PHP-FPM worker pools, sysctl, and Nginx to get the most out of your servers. Additionally, we’ll cover adding additional capacity to handle traffic spikes, load balancing, and more.
Meet Evan Coury
Evan Coury is a core contributor and long-time user of Zend Framework who is perhaps most well known in the community for authoring the all-new ZF2 module system. He is currently a professional software architect, independent consultant, and owner of Roave, LLC, a full-service web development consulting firm specializing in PHP and Zend Framework. Evan is a strong proponent of free, open source software and also runs the successful SMSCloud.com international SMS gateway.
Saved
on: 2021-05-06
Do not mock what you do not own | The PHP Consulting Company
Saved
on: 2021-04-26
Tackling the Beast: How to Gradually Upgrade a Legacy Code Base to PHP 7 -
Presented by Ann Gaffigan (@anngaff)
December 21, 2017
Hypothetically speaking, what if you wanted to change all of the lightbulbs in your house to use LED bulbs, but your current wiring didn’t support LED bulbs? You would need to re-wire your house, which would take a long time. In the meantime, you wouldn’t have any working electricity. Is there a better way? What if there was an adapter that could transition LED to work with old wiring if necessary, or if the wiring was new, just work as usual? That’s a metaphor for how I figured out how to gradually upgrade a legacy (LAMP) code base to be compliant with PHP 7.0. Since PHP deprecated the MySQL extension functions as of PHP 5.5.0 and removed in 7.0, we needed to transition a LOT of code in a legacy system to use the modern MySQLi extension functions. In trying to figure out how to upgrade the code base without ceasing new development on the system, we decided to use an adapter database class to allow us to transition gradually. In this session, we’ll explain how the adapter class works and also the rules we put in place to ensure there was an end to the transition tunnel.
Saved
on: 2021-04-24
Beyond Design Patterns - Nomad PHP
Presented by Anthony Ferrara @ircmaxell
Presented on July 24, 2014
Many people teach design patterns as a fundamental step to Object Oriented Programming. They are so universally seen as important that almost every single programming conference that I have been to has had at least one talk about them. They are quite often used as interview questions to test a candidate’s OOP knowledge. However, just like inheritance, they are not needed for OOP. And just like inheritance, they are a distraction rather than a foundation. Instead of focusing on patterns, I suggest focusing on learning about abstraction and communication. Why? Come and find out!
Tags:
#php
Saved
on: 2021-03-29
Deploy Your PHP App with Docker - Nomad PHP
Presented by Asmir MustaficThis talk explains how to develop and deploy to production your application built with Docker.The presentation starts from the development environment and passing by Continuous Integration arrives to Production.It shows an workflow that allows to compose many tools and best practices to obtain fast development and no downtimes.
Saved
on: 2021-03-29
Setup Step Debugging in PHP with Xdebug 3 and Docker Compose - Matthew Sett
In versions of Xdebug before version 3 setting up step debugging for code inside Docker containers has often been challenging to say the least. However, in version 3 it’s become almost trivial. In this short tutorial, I’ll step you through what you need to do, regardless of the (supported) text editor or IDE you’re using.
Saved
on: 2021-03-11
Code analysis tools to help with upgrading an app to a newer PHP version? :
Saved
on: 2021-03-03
Testing your controllers when you have a decoupled core — Matthias Noback -
A lot can happen in 9 years. Back then I was still advocating that you should unit-test your controllers and that setter injection is very helpful when replacing controller dependencies with test doubles. I’ve changed my mind: constructor injection is the right way for any service object, including controllers. And controllers shouldn’t be unit tested, because:
Those unit tests tend to be a one-to-one copy of the controller code itself. There is no healthy distance between the test and the implementation. Controllers need some form of integrated testing, because by zooming in on the class-level, you don’t know if the controller will behave well when the application is actually used. Is the routing configuration correct? Can the framework resolve all of the controller’s arguments? Will dependencies be injected properly? And so on. The alternative I mentioned in 2012 is to write functional tests for your controller. But this is not preferable in the end. These tests are slow and fragile, because you end up invoking much more code than just the domain logic.
Saved
on: 2021-03-02
A monorepo approach to larger modules in Laravel and Lambda
The mindset of modularized applications applied to monoliths.
Saved
on: 2021-03-01
When to use empty in PHP? I’d say never — beberlei.de
This article contains a list of alternatives to use instead of empty expression.
Tags:
#php
Saved
on: 2021-02-19
Identify All the Things With UUIDs! - Nomad PHP
Speaker: Ben RamseyUniversally unique identifiers (UUIDs) are a fun and exciting way to identify things. We can issue UUIDs forever and never run out; they’re practically unique! Join this whirlwind adventure in search of the perfect identifier to find out why UUIDs might be good for your projects.
Tags:
#php
Saved
on: 2021-02-18
Should we use a framework? — Matthias Noback - Blog
Since I’ve been writing a lot about decoupled application development it made sense that one of my readers asked the following question: “Why should we use a framework?” The quick answer is: because you need it. A summary of the reasons:
It would be too much work to replace all the work that the framework does for you with code written by yourself. Software development is too costly for this. Framework maintainers have fixed many issues before you even encountered them. They have done everything to make the code secure, and when a new security issue pops up, they fix it so you can just pull the latest version of the framework. By not using a framework you will be decoupled from Symfony, Laravel, etc. but you will be coupled to Your Own Framework, which is a bigger problem since you’re the maintainer and it’s likely that you won’t actually maintain it (in my experience, this is what often happens to projects that use their own home-grown framework). So, yes, you/we need a framework. At the same time you may want to write framework-decoupled code whenever possible.
Saved
on: 2021-02-17
Symfony Lock and Messenger component - Happyr developer blog
Saved
on: 2021-02-15
Build your own PSR-4 autoloader
Learn how to build your own autoloader and de-mystify what Composer actually does behind the scenes
Tags:
#php
Saved
on: 2021-01-26
Clean Application Development - Nomad PHP
Presented by Adam Culp @adamculp
Presented on October 24,2013
No matter what level of development we are at in our careers we all face a daily battle to write good code for ourselves and others, deliver finished applications fast to satisfy business, and ensure everything is properly tested to prevent end-user fails. In this talk Adam Culp will discuss what “clean application development” is, and how it can help us win those battles. The talk will provide practical and usable examples to, integrate into your workflow, and continue to grow into good habits.
Saved
on: 2021-01-19
Gitbar - Il podcast dei developer italiani
Gitbar è il podcast per sviluppatori italiani dedicato alla programmazione e allo sviluppo web. Ogni giovedì un nuovo argomento con brainrepo.
Saved
on: 2021-01-15
It’s not legacy code — it’s PHP. Vimeo has been using PHP in production… |
In the last year, Vimeo developers have written backend code in lots of languages — PHP, Go, Ruby, Python, NodeJS, Java, C, C++, and a bit of Rust. In 2004, we started with just one: PHP. It was an…
Saved
on: 2021-01-15
An alternative way to organize the Laravel directory structure // Stefan Ba
In this article, I would like to show you an alternative way to organize your Laravel directory structure. I think the default structure is fine for the most projects. But when it comes down to larger projects I was looking for a different structure.
Saved
on: 2020-12-02
Practical Refactoring Tips For Developers That Love Legacy Applications - N
Speaker: Davi Marcondes Moreira @devdropsMany times in our career we have (or we’ll have) to deal with legacy applications, and refactoring is an art specially designed for this scenario. In this lightning talk, I’ll give a few tips that I’ve learned that helped me a lot to find love when dealing with refactoring legacy applications.
Saved
on: 2020-11-24
Testing Spaghetti - Nomad PHP
Presented by Gemma Anible @ellotheth
Presented on October 23, 2014
The nightmare is at your doorstep! You’ve been tasked with extending a legacy PHP web application, a mash of raw SQL and HTML and PHP all inside out and backwards and spread over a several dozen (or hundred!) files. You know getting the system under test will push the project forward, but where do you start?
Come learn a slow, careful approach to incorporating automated unit tests into untestable code. See how your tests can slip in unobtrusively to take over your codebase from the inside, eating away at the spaghetti and creating a solid platform for future development.
Meet Gemma Anible
Gemma is a software engineer, video gamer and recovering classical violinist who has been developing PHP web applications since before PHP5 (and applications in C, .NET and Delphi since before then). She is passionate about using pragmatic processes and tooling to support developers of all types and skillsets, and her level of excitement over learning new dev technology tends to correlate strongly with her level of caffeination. Gemma and her husband live with their two dogs in New Mexico, where they climb volcanoes for fun.
Saved
on: 2020-11-12
Union types - What's new in PHP 8
A union type accepts values of multiple different types, rather than a single one. Learn how they work in PHP 8.
Saved
on: 2020-10-29
Object Oriented Done Right
Object Oriented Done Right — Building modern applications with PHP 8.3
Saved
on: 2020-10-29
Unconventional Autoloaders (Talk) - Liam Hammett
Theres really a lot of great stuff in here...
Saved
on: 2020-10-28
Atlas: A Data Mapper For Your Persistence Model - Nomad PHP
Speaker: Paul M. JonesAtlas lets you build an OO model of your SQL tables and relationships. You can use it at the start of your project for basic CRUD operations. As you begin to need simple behaviors in your application, you can add them to the Record and RecordSet persistence model objects. Finally, when the time comes to transition to a rich domain model, you can map the Atlas persistence model objects to your domain Entities and Aggregates.
Saved
on: 2020-10-27
PHP 8 - try out all new features - Marcel Pociot's blog about Laravel, PHP
PHP 8 - try out all new features #
PHP 8 is already in it's release candidate stage, with RC 3 being released on October 29th, and the general availability release targeted for November 26th. So it is time to take a look at all the new and upcoming features of PHP 8. You can take a look at PHP 8's release schedule here.
UPDATE: Free video course
If you're more of a visual learner, check out my entirely free video course, covering all new features in PHP 8.
Every feature that you see in this blogpost comes with an interactive embedded editor, where you can modify the PHP code and evaluate the results yourself.
The official upgrade guide can be found on GitHub.
Tags:
#php
Saved
on: 2020-10-27
Transparent Session Management with Sessionz - Nomad PHP
Sessionz is a new PHP library that adds a custom session manager to your application. On top of this custom manager, you can mix any number of specific handlers into a stack to deal with your data:- Write sessions out to the default, filesystem-based session store.- Cache session data in-memory for faster reads (and faster performance).- Encrypt stored data so it’s protected at rest. Synchronize data to an external storage system so multiple application servers can reference it.In this lightning talk I’ll cover both what Sessionz is (how it handles sessions transparently within your application), how it works (the SplStack implementation of callback handlers), and how you can extend it with your own custom handlers.
Saved
on: 2020-10-26
PHP for Beginners: Data Handling - Nomad PHP
Join us as we discuss data handling in PHP
Saved
on: 2020-10-13
How to run over 30k tests in under 5 minutes | by Daan van Marsbergen | Sep
At Mollie we’re building a new generation of financial products and a new way of supporting you through them. A product-first approach that our customer can truly benefit from.
Saved
on: 2020-10-09
Step-debugging linked composer dependencies with PhpStorm – Rob Allen's Dev
An article by Rob Allen
Saved
on: 2020-10-08
Writing Effective PHP - Forum PHP 2019 - Afup - Association française des u
PHP has evolved massively since its first days, and it's on the road to a full-featured language. However, at the same time, there is a lot of outdated information and libraries with poorly written code.
This talk is about writing PHP Code that is: **safe**, **robust**, and **maintainable**. We are going to cover a set of rules, that if you follow them; they will get you on the habit of **writing code well**.
Get ready for a 25 min **live-coding session**, where I go through practical examples. You will learn how to design classes, how to think about your API to prevent breaking changes, and discover concepts around designing and creating objects, when and how to use **immutability**, and much more.
Saved
on: 2020-10-06
Building PHP Daemons and Long Running Processes - Nomad PHP
Presented by Tim Lytle @tjlytle
Presented on June 18, 2015
There are things you don’t want to, or can’t do, inside a web request. It could be a task that needs to be retired if it fails, maybe one that takes a significantly long time to process, or multiple jobs that need to be processed over time. Whether you’re sending an email, processing a video, or consuming Twitter’s streaming API, you should be using a separate process, and probably a daemon. Learn how to stop abusing cron, and easily daemonize a PHP script that responds responsibly to process signals.
Saved
on: 2020-10-01
Scaling PHP Applications With Redis - Nomad PHP
Presented by Josh Butts @jimbojsb
Presented on July 23, 2015
Redis is a hybrid NoSQL database that’s sits in the sweet spot between document databases like MongoDB and key-value stores like memcache. Learn the basics of Redis data structures, common commands, and how to connect to Redis from PHP. We’ll finish with some cookbook-style examples of how you can add Redis to your existing application with minimal effort and get some nice performance gains.
Saved
on: 2020-10-01
Apache2 and php fpm performance optimization — Step-by-step guide | by Seba
I had to handle high traffic loads in my career and I fought with down-time, not used memory and a lot of trouble in my past. In this article I want to give a step-by-step guide to apache2…
Saved
on: 2020-09-29
Dynamically changing the log level in Symfony apps — Matthias Noback - Blog
This is just a quick post sharing something I was able to figure out after doing some research.
The situation: our application throws exceptions by means of “talking back to the user”. As developer we don’t want to be notified about all these exceptions. They aren’t as important as any other exception that should be considered “critical”. Still, we do want to find these exceptions in the logs, because they can sometimes provide valuable feedback about the usability of the system.
Saved
on: 2020-09-29
Serverless PHP Applications - Nomad PHP
Presented by Rob Allen
April 3, 2020
APIs and microservices are how we build modern web applications and serverless technologies make this easy. This session will show you how serverless applications are built and how you can leverage your PHP skills to build APIs of all shapes and sizes. We will cover how to use your current knowledge to build serverless applications in PHP, leveraging the API Gateway to build robust APIs quickly and easily. By the end of the session, you'll be well placed to design and build your own microservices that take full advantage of the power of serverless technologies.
About Rob
Rob Allen is a software consultant and developer with many years experience in a variety of interesting languages. He's particularly interested in APIs and the ecosystem around them along and contributes to rst2pdf, Slim Framework, Apache OpenWhisk along with other open source projects. Rob is a published author and based in the UK where he runs Nineteen Feet Limited, focussing on API development, training and consultancy. In his spare time, Rob blogs at akrabat.com and can often be seen with a camera in his hand.
Saved
on: 2020-09-29
Web Scraping with PHP Tutorial with Example Scripts (2025)
Master web scraping with PHP in 2025! This tutorial covers top libraries, hands-on examples, and tips to bypass anti-scraping defenses. Start scraping now!
Tags:
#php
Saved
on: 2020-09-24
How to run over 30k tests in under 5 minutes | by Daan van Marsbergen | Sep
At Mollie we’re building a new generation of financial products and a new way of supporting you through them. A product-first approach that our customer can truly benefit from.
Saved
on: 2020-09-04
Legacy to Laravel: How to Modernize an Aging PHP Application | Tighten
Many of our clients have legacy PHP apps and want to move to Laravel. We’re often asked "should we rewrite or refactor?" While full rewrites are appealing, they’re also risky. Here’s our approach to gradually refactoring legacy code that lets you start using Laravel right away.
Saved
on: 2020-09-02
Turbocharged PHP Development with Xdebug, Docker & PHPStorm - Jump24
Saved
on: 2020-08-26
Symfony 5: guida rapida (Symfony Docs)
Ringraziamenti Di cosa si tratta? Preparazione dell'ambiente di lavoro Presentazione del progetto Da zero al…
Saved
on: 2020-08-20
I have built MVC Framework from scratch using PHP for only education purposes : r/PHP
Saved
on: 2020-08-20
Modernizing a Legacy PHP Application
Update Aug, 11: This post was well received on Reddit, so I added new anti-patterns to reflect the comments.
Recently, I had the chance occasion to work on numerous legacy PHP applications. I spotted common anti-patterns that I had to fix. This article is not about rewriting an old PHP application to , but about how to make it more maintainable and less of a hassle to work on.
Tags:
#php
Saved
on: 2020-08-11
Enhancements to PHP code coverage in 2020 - doug.codes
In 2003, with the release of Xdebug 1.2, Derick Rethans introduced the ability to collect code coverage data to the PHP ecosystem for the first time. In 2004...
Saved
on: 2020-08-01
PHP 8: before and after - stitcher.io
The impact of PHP 8 on my code
Tags:
#php
Saved
on: 2020-07-20
Samuel Štancl su Twitter: "✨ In this thread I'll list tactics you can use t
✨ In this thread I'll list tactics you can use to write cleaner code in Laravel.
As you use them repeatedly, you'll develop a sense for what's good code and what's bad code.
I'll also sprinkle some general Laravel code advice in between these tactics.
THREAD
Saved
on: 2020-06-16
How do you build your (production) docker images ? : r/PHP
Saved
on: 2020-06-13
morris/lessql: LessQL: A lightweight and performant PHP ORM alternative
LessQL: A lightweight and performant PHP ORM alternative - morris/lessql
Saved
on: 2020-05-10
Smooth deploy of a loaded PHP web application with php-fpm and nginx, without downtime or errors
UPDATE 2020-05-10 Added the cachetool option, thanks to reddit users ds11 and SevereHeight for mentioning it.
Tags:
#php
Saved
on: 2020-05-10
How to Migrate Spaghetti to 304 Symfony 5 Controllers Over Weekend | Tomas
During Easter weekend, usually, people take a break and have a rest. Instead, we used these 4 days of *holiday* to migrate the 304-controller application. At least that was the goal on Friday.
Me in my colleague in the migrated project accepted the challenge. We got into many minds and code-traps. We'd like to share this experience with you and **inspire those who are still stuck on non-MVC code** and think it might take weeks or even months to switch to a framework.
Tags:
#php
Saved
on: 2020-04-19
Part 1 - How to use TDD to build a REST API in Laravel 6 - YouTube
Hello. I’m Reval Govender, and this is “How to use TDD to build a REST API in Laravel”.In this course we are going to build a RESTful API using the popular L...
Saved
on: 2020-04-08
Xdebug
Xdebug Debugging and profiling PHP Prepared for PHP Sydney meet-up 28th November 2019 Kev Staunton-Lambert pyrmontbrewery.com
Tags:
#php
Saved
on: 2020-03-15
brendt/aggregate.stitcher.io: A community-driven content aggregator
A community-driven content aggregator
Saved
on: 2020-03-13
Behind the scenes of Flare (or How to structure big Laravel applications) -
At Laracon AU, I gave a talk on how you can structure a big Laravel application. The codebases of both Flare and Oh Dear served as examples.
By watching this talk you'll gain some valuable insights that could be applicable to your projects as well. Enjoy!
Saved
on: 2020-03-07
Clean Code and Object Calisthenics Rules I try to Follow — beberlei.de
Saved
on: 2020-03-03
Introducing Stripe payment into your PHP projects | Riven
We create visual identities, websites, and applications for businesses seeking freshness and excellence.
Saved
on: 2020-03-01
What is the recommended way to deploy php in containers ? (using "php-pfm
Saved
on: 2020-02-18
Tuning dynamic php-fpm settings - Chris Morrell | Chris Morrell
Saved
on: 2020-02-16
Redux in 30 lines of PHP
The official website calls Redux “a predictable state container for JS Apps”. The main benefit of Redux is that it shines a light on your global application state, allowing yo…
Saved
on: 2020-02-09
JoliCode - Battle log: a deep dive in Symfony stack in search of optimizati
My team and I are working on a big project that is becoming bigger and bigger. Split in micro services, each end-user call generates an increasing number of HTTP API calls. Performance was becoming a problem and the Developer eXperience (DX) suffered as a result. Note that we already
Saved
on: 2020-01-20
DarkGhostHunter/Preloader: Preloader helper to create a PHP-ready preload s
Preloader helper to create a PHP-ready preload script from Opcache. - DarkGhostHunter/Preloader
Saved
on: 2020-01-15
Php slim framework (Routing, middleware, service container, setting up twig templating and middleware). : r/PHP
Saved
on: 2020-01-14
Handling Plugins In PHP
A common problem that developers face when building applications is how to allow the application to be “plug-able” at runtime. Meaning, to allow non-core code to modify the way an application is proc
Saved
on: 2019-12-30
Guide to PhpStorm code quality checks via PhpCS | Damian Mąsior
Welcome to my personal website
Tags:
#php
Saved
on: 2019-12-30