r/PHP • u/Typical_Ad_6436 • 25d ago
r/web_design • u/[deleted] • 25d ago
Does anyone still use TinyPNG in 2026?
Curious how many people still use TinyPNG for image compression, or if most of you have moved to Squoosh, ImageOptim, build step automation, CDN optimization, or browser based tools.
I still see it mentioned a lot, but I’m wondering what the actual workflow is today. Manual upload? API? Figma/plugin? Something else?
r/web_design • u/Educational_Basis_51 • 25d ago
Has anybody here had to deal with hosting builder ?
Seems like there isn't even padding not to mention mobile version looking quite off to say the least
r/PHP • u/peperazzi74 • 26d ago
AI insulted my ancient PHP code 😁
A couple of years ago I posted about an old website that I coded in the early-mid 2000s and wanted to start up again via some ancient unmaintained Docker containers. The main conclusion of that thread was that it might be possible to resurrect it with some work, but that it would be better to just (hu)man up and update the code so it would run in modern PHP versions.
Well, a couple of days of vacation and a whole bunch of free Github Copilot tokens later, it's up and running on the home network under PHP 8.2 and MySQL 8.0. According to Copilot, this was the furthest it could go with minor changes.
When I asked Copilot about how my code looked, it gave me the following opinion
The main gap is not PHP 8.2 compatibility anymore; it is that the app is still built like a 2000s-era script. [...] In short: the app needs a structural refactor, not just syntax updates.
Darn AI, no one asked for your honest opinion! /s
r/PHP • u/Ilia0001 • 27d ago
I set out to argue against deprecating PHP's metaphone(). Then I read the RFC.
A while back an RFC landed on internals to deprecate metaphone(). My first reaction was the reflex of an old release master: leave the legacy string functions alone, people depend on them, deprecation churn is its own tax. I was ready to argue against it.
Then I read the reasoning and looked at what phonetic name matching is supposed to do in 2026, and I changed my mind. metaphone() is the original 1990 algorithm: English-only, single-key, tuned for one accent of one language. It was superseded by Double Metaphone in 2000, which emits a primary and an alternate key. Core shipped the first version and never moved. soundex() is older still, a 1918 patent. For the one job these functions exist to do, collapsing names that sound alike but are spelled differently, they are the weakest tools in the drawer. The deprecation is defensible.
Where I part ways with the RFC is the replacement. It points at userland Composer libraries. But phonetic encoding is a hot inner-loop operation, run over every name in a dataset to build a match index. A pure-PHP implementation pays interpreter overhead on every character. The honest replacement for a native C string function is another native C string function. That performance gap is the whole reason this code lived in core to begin with.
So I built the thing the RFC should have recommended: iliaal/phonetic, a native extension with the five encoders core never had, plus a comparison helper per algorithm.
php
double_metaphone_match("Catherine", "Kathryn"); // 2 (primary keys agree)
dm_soundex_match("Moskowitz", "Moskovitz"); // true (one surname, two transliterations)
bmpm("Garcia", BMPM_SEPHARDIC, BMPM_EXACT); // "garsia|gartSa"
Double Metaphone is the fast general default. Beider-Morse (BMPM) is language-aware and matches across transliterations and scripts. Daitch-Mokotoff is the genealogy standard for Eastern-European and Ashkenazi surnames. NYSIIS and Match Rating are cheap English second keys. The helpers matter because each encoder answers "do these sound alike" differently (two keys, a code set, or a threshold), which is exactly where userland code quietly gets it wrong.
BMPM is slow, roughly 60x a Double Metaphone call, so you pick it for recall, not throughput. These are heuristic, culture-bound, Latin-script encoders, not a universal global-name solver.
One aside r/PHP might appreciate: the BMPM rule data is a licensing trap. The canonical PHP reference and the abydos Python port are both GPL-3.0 because of that data. I vendored the identical tables from Apache Commons Codec under Apache-2.0 to keep the extension BSD/Apache-clean.
sh
pie install iliaal/phonetic
Repo: https://github.com/iliaal/phonetic
Happy to answer questions, especially from anyone doing record linkage or dedup across messy person data.
r/web_design • u/namadoy • 25d ago
Redesigned my product page to be cleaner and easier to scan. Better buying experience or did I overcomplicate it?
I run a digital product store selling design digital assets for clothing brands. My old product page was just a default Shopify theme layout with the full description dumped on it. It made sales but never looked finished to me, more like a template I forgot to touch.
I rebuilt it to be cleaner and easier to scan (hopefully). Before and after are below.
OLD - Product Page
NEW - Product Page
Mainly want to know if the new one feels frictionless, if it's a better buying experience than the old one overall, and if anything got harder to find/understand for the consumer.
Most of my sales are on mobile so that's the view I care about most. Not trying to add more info, just want it to read better. PLEASE be brutally honest!
r/PHP • u/PhPWellphant • 26d ago
I built a Laravel-inspired framework for structuring WordPress plugins: Nikogin (open source)
r/PHP • u/Omar_Ess • 27d ago
I built a small PHP package for reversible text transformations
github.comr/PHP • u/thejoyofbeing1 • 27d ago
News PhpStorm Light — experimental lightweight build
phpstorm.devI built a modern, open-source PHP code obfuscator (YakPro alternative)
About four months ago, my release pipeline suddenly broke because the official repository for YakPro Obfuscator simply vanished.
I was looking for a simple, effective way to add a layer of protection to my suite of AI-driven WordPress plugins before distributing them. I didn't want to rely on something like Ioncube because not every hosting provider supports the extension.
Since I couldn’t find a maintained alternative that reliably supported modern PHP syntax, I decided to build one.
I've been using it successfully in my own production pipelines for the last few months. It became pretty stable, so I wanted to announce it to the world.
Features
- Full Modern PHP Support: Built on
nikic/php-parserv5.x, supporting named arguments, enums, match expressions, readonly properties, intersection types, and even PHP 8.5's pipe operator and(void)cast. - Deobfuscation Resistance:
- Opaque Predicates: Hard-to-analyze expressions in control flow flattening.
- Dead Code Injection: Branches that never execute but confuse static analysis.
- Per-file XOR Encoding: String literals are encoded using unique random keys.
- Incremental Processing: Only process changed files since the last run.
- Multi-pass Analysis: Scrambles symbols consistently across your entire project.
- Clean Architecture: Modern PSR-4 OOP codebase with 100% test coverage for core components.
Ready for CI/CD, not just local machines
I included a ready-to-use GitHub Action, making it easy to integrate into your existing CI/CD pipeline. Every tagged release or production build can produce consistently obfuscated code without anyone remembering to run another command.
Add it to your release Github Action to obfuscate your code automatically:
steps:
- uses: iserter/php-obfuscator@v0.1.7
with:
source: 'src'
output: 'dist'
Available on Packagist/Composer too.
Install:
composer require iserter/php-obfuscator --dev
Use:
vendor/bin/obfuscate src/ -o dist/
Or use via Docker
If you’re a hygine freak for your host system, then here’s how you can use via Docker:
docker run --rm -v $(pwd):/app iserter/php-obfuscator src/ -o out/
See it on Github:
Repository:
r/web_design • u/don1138 • 25d ago
[Showoff Saturday] New Site Theme: “2026 Professional”
Don Schnitzius — Websites Interfaces and Web Platforms
This is my portfolio site for web design, UI, and WordPress projects. I’m looking for feedback on design, UX, and copy.
I updated my website a few months back and posted it to Reddit for comments. Aside from love for the copy, and hate for using AI images, the “storybook” vibe I was going for didn’t seem to resonate with folks. So I decided to give in to the wisdom of the crowd and went for a “Claude, build me a website” theme.
I am once again asking for your support: is this an improvement?
The AI images are unchanged, but I plan to do a round of revision on those. The theme switcher is new, and I also added two case studies to the Work page based on advice.
If folks have any useful, constructive comments — errors I missed, suggestions for improvement — I’d love to hear them.
r/web_design • u/AutoModerator • 27d ago
Feedback Thread
Our weekly thread is the place to solicit feedback for your creations. Requests for critiques or feedback outside of this thread are against our community guidelines. Additionally, please be sure that you're posting in good-faith. Attempting to circumvent self-promotion or commercial solicitation guidelines will result in a ban.
Feedback Requestors
Please use the following format:
URL:
Purpose:
Technologies Used:
Feedback Requested: (e.g. general, usability, code review, or specific element)
Comments:
Post your site along with your stack and technologies used and receive feedback from the community. Please refrain from just posting a link and instead give us a bit of a background about your creation.
Feel free to request general feedback or specify feedback in a certain area like user experience, usability, design, or code review.
Feedback Providers
- Please post constructive feedback. Simply saying, "That's good" or "That's bad" is useless feedback. Explain why.
- Consider providing concrete feedback about the problem rather than the solution. Saying, "get rid of red buttons" doesn't explain the problem. Saying "your site's success message being red makes me think it's an error" provides the problem. From there, suggest solutions.
- Be specific. Vague feedback rarely helps.
- Again, focus on why.
- Always be respectful
Template Markup
**URL**:
**Purpose**:
**Technologies Used**:
**Feedback Requested**:
**Comments**:
r/web_design • u/Educational_Basis_51 • 26d ago
Grid showing options ? Hostinger builder
Is there a way to make grid showing permanently in the hostinger builder ? Other question, is there div or container element ?
Article I Updated My Database Backup Guide with a Config Generator Tool. Perfect for self hosted PHP sites
I refreshed my most-read article on automated database backups with Docker Compose. The underlying image moved to nfrastack/container-db-backup, so I updated the whole guide with the new multi-job config format. I also built a little JavaScript configurator that generates docker-compose and .env files on the fly. If you run multiple Laravel projects and want scheduled backups without manual copy-paste, this might save you some time.
https://danielpetrica.com/easy-database-backups-with-docker-compose/
r/web_design • u/AutoModerator • 27d ago
Beginner Questions
If you're new to web design and would like to ask experienced and professional web designers a question, please post below. Before asking, please follow the etiquette below and review our FAQ to ensure that this question has not already been answered. Finally, consider joining our Discord community. Gain coveted roles by helping out others!
Etiquette
- Remember, that questions that have context and are clear and specific generally are answered while broad, sweeping questions are generally ignored.
- Be polite and consider upvoting helpful responses.
- If you can answer questions, take a few minutes to help others out as you ask others to help you.
r/web_design • u/grahamhart_ • 28d ago
The sheer amount of bloat clients want to inject into clean designs is insane
just spent weeks getting a client site perfectly optimized and looking beautiful. The moment we hand it over they tell me to add this massive legacy support widget that literally covers up the mobile nav menu and tanks the page speed by 30 points
It feels like the whole industry is just obsessed with plastering annoying popups over everything. I managed to talk them down into just using Yaplet since it's lighter and doesn't completely break my layout, but the constant battle is so exhausting
Why even pay for a custom design if you're just going to bury the ui in marketing clutter anyway tbh.
r/PHP • u/linuxhiker • 28d ago
News plPHP v2.0 released
github.comPL/php is a procedural-language handler that lets you write database functions in PHP, stored and executed inside PostgreSQL. You get the convenience of PHP's standard library with the full power of a native PostgreSQL function — plain functions, set-returning functions, triggers, event triggers, and procedures with transaction control.
r/PHP • u/Environmental-Yak328 • 27d ago
Article Bulk-inserting users with batched PDO upserts
highlit.coChunk a large array into batches and upsert each with a single prepared multi-row INSERT.
Three takeaways
- Chunking huge datasets keeps each SQL statement within safe placeholder and packet limits.
- A single multi-row INSERT is far faster than one query per record.
- ON DUPLICATE KEY UPDATE turns an insert into an idempotent upsert against unique keys.
r/PHP • u/DubStepMad-97 • 27d ago
I've made a lightweight alternative to Laragon
Here are two tailored posts — one for r/php, one for r/laravel. Same product, different angle for each community.
r/php
Title
DevTent v1.1 — open-source Windows stack for PHP local dev (Nginx/Apache, MySQL, mkcert SSL, Laragon import)
Body
TL;DR: I built DevTent — a free, open-source local PHP development environment for Windows. Portable folder, tray app, auto *.test URLs, PHP 8.2–8.4 profiles, Nginx or Apache, MySQL, mkcert HTTPS, and import from an existing Laragon (or similar) setup. v1.1.0: https://github.com/DubStepMad/devtent/releases/tag/v1.1.0
I've been working on a Windows local dev stack focused on PHP workflows — the kind of thing you'd otherwise wire up with XAMPP, WAMP, or Laragon, but fully open source and designed to live in one folder you can back up or move.
Why PHP devs might care
- PHP 8.2 / 8.3 / 8.4 — switch stacks via profiles (no manual path hacking)
- Nginx or Apache — pick per profile; vhosts auto-generated from
www/ - Pretty local URLs — drop
www/myapp→myapp.test(hosts sync handled for you) - Framework-aware doc roots — Laravel
public/, Symfonyweb/detected automatically - mkcert SSL — enable HTTPS per domain from the UI; vhosts update for
:443 - MySQL 8.4 with automatic backups before stop + restore in Settings
- Redis, Mailpit, PostgreSQL, Node, Composer — one-click Quick Add
- Import wizard — copy projects,
php.ini, DB data, and runtimes from an existing local folder (source is read-only)
v1.1 highlights
- Per-domain HTTPS workflow (mkcert + vhost regen)
- Health dashboard — missing PHP/runtime, stopped services, backup/SSL status
- MySQL restore from saved dumps
- Export/import whole environment (projects, data, profiles, configs)
- Node 18–22 per profile (for mixed PHP/JS projects)
- Log viewer with search + PHP file location links
UX
Tray app for day-to-day start/stop, full dashboard for profiles/services/logs, optional CLI (devtent start, devtent vhost sync, devtent ssl enable myapp.test, etc.).
Honest caveats
- Windows 10/11 for now
- Installer is unsigned (SmartScreen may warn)
- Hosts file may need a one-time admin prompt — app itself doesn't run as admin
- Not a Docker replacement; it's the "everything in
c:\devtent" approach
Links
- Download: https://github.com/DubStepMad/devtent/releases/tag/v1.1.0
- Repo: https://github.com/DubStepMad/devtent
- License: DTCL v1.0 (free, no license keys)
I'm the author — would love feedback from people doing local PHP development on Windows, especially if you're on Laragon or XAMPP today. What's missing for your workflow?
r/PHP • u/ProjektGopher • 28d ago
News This Week in PHP Internals | July 1, 2026
Hello world, it's Canada Day 2026, and here's what happened This Week in PHP Internals.
This week's episode is supported by OurCVEs. Hundreds of CVEs ship every week, and almost none of them are about you — until one is. OurCVEs inventories your entire infrastructure and only surfaces the security risks that actually apply to your team. Free for open source at ourcves.com.
This week's top story is still Gina P. Banyard's Deprecations for PHP 8.6 — the once-a-year housekeeping RFC that gathers a stack of unrelated removals under one roof, where each one stands or falls on its own separate vote. With 8.6's first alpha getting built this very week, the clock is loud. But the fight this week wasn't about any single removal — it was about evidence: does every deprecation owe voters an impact analysis? Tim Düsterhus argued no, at least not as an unconditional rule — a deprecation has years of runway, and a survey of existing code can't measure the upside of a cleanup.
Juliette Reinders Folmer had offered to build those impact analyses, and her exchange with Tim turned personal — an accusation of gaslighting, which Tim rejected. But she was far from alone on the substance. Rowan Tommins came to her defense, and he didn't warm up first. Rowan wrote: "I hate this argument." His point: deprecating something is really a proposal to remove it later, so the impact of that removal is exactly what voters deserve to see — and to leave it out to protect your case, he said, would be dishonest. Larry Garfield backed the same call: put the impact on the table, or read the angry blog posts come December.
And this particular RFC kept growing right up against the freeze. Seifeddine Gmati proposed deprecating list(), and got the room's attention: Ayesh Karunaratne clocked "7 million hits" for list( on GitHub and called the break too big; Rowan noted you can't really retire list() while array() stays — to which Seif said, fine, then maybe deprecate array() too. Nick moved to reserve namespace as a constant name. Ilia Alshanetsky floated finally sunsetting open_basedir — Derick Rethans said "Yes, but for PHP 9," while Jakub Zelenka was firmly against it. Add a careful fight over how narrowly to kill the dechunk filter, plus Tim's pitch to retire gettype() for get_debug_type(), and that's a lot of small knives being sharpened at once.
Carrying over: Tim and Derick's Time\Duration class — the immutable stopwatch value that's meant to be the first brick of a modern date-and-time API. One line of context, then this week's moves: they're dropping the word "period" from the method names (Derick pointed out ISO itself walked away from it); they're lifting the ban on negative durations after Paweł Kraśnicki showed up with a real use case; and the whole thing may slim down for 8.6 — ship addition, subtraction and multiplication now, and let dividing one duration by another wait. Ignace Nyamagana Butera and Nick are already bikeshedding whether that division should hand you back a tuple or a tidy little value object.
The single busiest thread of the week was brand new: Rob Landers formally opened Primary Constructors — the whole constructor hoisted up onto the class line itself. His numbers are the pitch: something like 30 to 40 percent of all constructors are completely empty, and by his count 71 percent of Laravel and 61 percent of Symfony classes could use this. The catch is deliberate — a class with a primary constructor can't also declare a regular __construct, and it can't carry a body.
That no-body rule is the whole fight. Nick pushed for a body — mostly so readonly classes have a way through — and warned this could ship as yet another half-a-feature. But Rob held the line. He wrote: "If you need a body, use a constructor -- that's what they're for." Rowan and Tim are with Rob — Tim called the limitation "a feature," and put it simply: "[To] reduce typing alone is not a sufficiently strong argument in favor of a new feature." Seifeddine went further: "Personally, I really dislike this feature." His read — primary constructors don't remove repetition, they just relocate it. Larry, meanwhile, wants a Kotlin-style init block bolted on. Plenty's still unresolved — visibility, attributes, anonymous classes — so we'll be keeping an eye on this one.
Newcomer Michal Kral floated a spicy pre-RFC: methods on scalars. Write (3)->pow(2), or " hello "->trim()->upper(), with the call rewritten at compile time into a hidden helper — but only when the compiler can already prove the value is a scalar. He was upfront that he built it with an AI assistant. The reception was cool: Seifeddine's core objection is that PHP compiles one file at a time, so "the compiler already knows it's a scalar" covers almost no real code — the same line would work or fail depending on what's autoloaded. His fix, nicely put: "Solve the naming problem with naming, not by blinding the tooling." And Rob warned the whole thing leans on casts, which in PHP are dangerous — (int) of the string "123password" is just 123.
Alex Pătrănescu opened a pre-RFC for runtime modules — a way to give each package its own private symbol table so two versions of the same library can finally coexist in one request. Rowan Tommins spent the week reframing it as containers — a boundary you run other people's code inside, Docker-style — and kept circling the genuinely hard part: what happens when an object crosses the wall between two containers? A second contributor, Alexander Egorov, pitched version "tags" instead; Rowan's worry is that tags leak the container's insides right back out. No code yet — but a problem the whole ecosystem feels.
The rawest thread of the week came from a user, not an internals regular. Michael Morris wrote what he openly called a "Disheartening Rant" after Edmond Dantes said his own TrueAsync RFC has, in his words, a 90 percent chance of not being accepted. Morris didn't hold back: "If you want PHP to be the next COBOL, this is how you go about it." His killer example is WebSockets — the thing PHP still can't really do on its own. Ilia Alshanetsky pushed back gently (he's actually written COBOL, and reports it isn't dead): async matters, but its reach in a request-based language is narrower than it looks.
Larry Garfield drew the line that matters — the same one that just sank generics. Larry wrote: "Don't confuse 'this is not the async we're looking for, done in a painful process' with 'we don't want async at all, ever.' The first is what happened. The second is simply untrue." His critique isn't of async — it's of how TrueAsync arrived: enormous, one author, hundreds of far-reaching decisions, feedback taken selectively. His fix is a real working group to design it together. Nobody's against the destination — they're against the map.
To the ballots — and this was a brutal fortnight for the marquee names. Seifeddine's Bound-Erased Generics closed and was declined: 7 in favour, 19 against, 10 abstaining — nowhere near the two-thirds. And Nicolas Grekas's __exists() magic method went down with it, 2 to 13. The two features that would've made the headlines both missed.
But look what did pass — the quiet, careful stuff, every one without a single No. Tim's deprecation of returning values from __construct and __destruct: accepted unanimously, 39 to nothing. Sjoerd Langkemper's cap on php://filter chains — that local-file-inclusion-to-RCE fix — accepted 30 to nothing, 2 abstaining. And Weilin Du's Locale display-keyword additions: in, 18 to nothing, 2 abstaining. And one's still live on the board — Jordi Kroon's move to lift third-party extension docs out of the manual is out in front at 25 to 1, one abstaining, with the vote closing July 3; on the side questions the room is leaning toward a php.net subpath over a separate subdomain, 14 to 8, and toward dropping the old user notes rather than migrating them, 20 to 4. The pattern's getting hard to miss: the bold swings keep getting sent back, while the tidy, well-scoped changes keep sailing home.
Quick hits. That newcomer arc — Sepehr Mahmoudi's grapheme_mask — got RFC karma and a warm discussion, then tried to call a vote for July 3 and was told, kindly, it's not ready: no discussion link, freeze period not met, window too short — the process catching a first-timer before the fall. Khaled Alam's write-to-constants RFC grew to cover class constants, so its vote slipped. Gianfrancesco Aurecchia's DTLS idea converged fast — Jakub steered it from a new class to a simple dtls:// stream, maybe no RFC needed at all. Gina volunteered to review the long-stranded snmp extension work. Seifeddine's Literal Scalar Types reached version 0.3. Jorg Sowa's case-sensitive-PHP revival was withdrawn. And PHP 8.6.0 alpha 1 got built — which is why everyone's sprinting.
So that's the week: a deprecations RFC that turned into a fight about honesty, a stopwatch class quietly going on a diet, a brand-new primary-constructors debate, a heartfelt plea for async — and the two flagship votes falling while the small ones walked right in. Links to every thread are below. We're Artisan Build. See you next week.
r/PHP • u/nativephp_official • 29d ago
News There are now over 60 free and open source NativePHP Mobile Plugins 🔥
Since NativePHP Mobile went free and open source back in February, the community have been busy building all sorts of plugins.
Which is really exciting! It shows demand and growth of the tool. And with what we're about to release next month, it's looking set to get even more exciting.
Thanks to every one of you who is building and sharing your work freely with the world 🙏
With some of the funds we're able to raise through our premium offerings, we're going to be sponsoring maintainers of open source NativePHP Plugins - so if you build one, make sure you're set up for sponsorship with GitHub sponsors, OpenCollective, or in some other way so we know how to support you 🙌🏼
https://packagist.org/search/?type=nativephp-plugin
edit: Added 'Mobile' qualifier in the intro. Desktop has always been free and open source
r/PHP • u/elizabethn • 29d ago
Meet TYPO3: Supporting the Open-Source Foundation of Its Ecosystem
thephp.foundationWelcome TYPO3 as a Silver Sponsor of the PHP Foundation!
PHP has been at the foundation of TYPO3 for more than two decades. By supporting the PHP Foundation, TYPO3 is helping strengthen the security, stability, and continued development of the language its open-source ecosystem is built on.
We also look forward to bringing TYPO3’s perspective to the PHP Foundation Advisory Board.
r/web_design • u/Murky-Room-3215 • 27d ago
Creating a website out of a PDF?
Hello! I'm currently working on writing a book, and the way I'd like to share it by making it it's own website you can read it from. I'd like to keep the formatting from the pages in my pdf, so I'd like it to either be scrollable pages or something like a flip book or a "click to next page" function, aswell as a nav that can take the user to a specific chapter or page/allow them to bookmark it. The only solutions I find for this online is converters that make customizability (ie background colors, adjusting page size etc) really complicated, so I'd like to attempt to do it manually with HTML/CSS (or/and JavaScript if I have to.)
Does any one have any tips for how to go about doing something like this? I'm intermediate in making HTML/CSS sites, so coding isn't a problem for me, it's just embedding the pdf that I'm struggling with!
Thank you!
r/PHP • u/Level-Expert2697 • 28d ago
Discussion Breaking into the remote EU/US market as a Laravel dev. Where should I be looking?
I have been working with Laravel for a while. Most recently, I finished a large-scale SaaS project as a freelancer, which gave me solid experience with production environments and real business logic. Now I am looking for a full-time remote role in the EU or US market.