<?xml version="1.0" encoding="UTF-8"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/"><category term="PHP" label="r/PHP"/><updated>2026-07-26T13:08:04+00:00</updated><icon>https://www.redditstatic.com/icon.png/</icon><id>/r/PHP/.rss</id><link rel="self" href="https://www.reddit.com/r/PHP/.rss" type="application/atom+xml" /><link rel="alternate" href="https://www.reddit.com/r/PHP/" type="text/html" /><subtitle>Share and discover the latest news about the PHP ecosystem and its community. Please respect r/php's rules.</subtitle><title>PHP: The latest news in the PHP world</title><entry><author><name>/u/brendt_gd</name><uri>https://www.reddit.com/user/brendt_gd</uri></author><category term="PHP" label="r/PHP"/><content type="html">&lt;!-- SC_OFF --&gt;&lt;div class=&quot;md&quot;&gt;&lt;p&gt;Hey there!&lt;/p&gt; &lt;p&gt;This subreddit isn&amp;#39;t meant for help threads, though there&amp;#39;s one exception to the rule: in this thread you can ask anything you want PHP related, someone will probably be able to help you out!&lt;/p&gt; &lt;/div&gt;&lt;!-- SC_ON --&gt; &amp;#32; submitted by &amp;#32; &lt;a href=&quot;https://www.reddit.com/user/brendt_gd&quot;&gt; /u/brendt_gd &lt;/a&gt; &lt;br/&gt; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1v1d0mj/weekly_help_thread/&quot;&gt;[link]&lt;/a&gt;&lt;/span&gt; &amp;#32; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1v1d0mj/weekly_help_thread/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1v1d0mj</id><link href="https://www.reddit.com/r/PHP/comments/1v1d0mj/weekly_help_thread/" /><updated>2026-07-20T06:00:06+00:00</updated><published>2026-07-20T06:00:06+00:00</published><title>Weekly help thread</title></entry><entry><author><name>/u/brendt_gd</name><uri>https://www.reddit.com/user/brendt_gd</uri></author><category term="PHP" label="r/PHP"/><content type="html">&lt;!-- SC_OFF --&gt;&lt;div class=&quot;md&quot;&gt;&lt;p&gt;This is a bi-monthly thread aimed to connect PHP companies and developers who are hiring or looking for a job. &lt;/p&gt; &lt;p&gt;&lt;strong&gt;Rules&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;No recruiters&lt;/li&gt; &lt;li&gt;Don&amp;#39;t share any personal info like email addresses or phone numbers in this thread. Contact each other via DM to get in touch&lt;/li&gt; &lt;li&gt;If you&amp;#39;re hiring: don&amp;#39;t just link to an external website, take the time to describe what you&amp;#39;re looking for in the thread.&lt;/li&gt; &lt;li&gt;If you&amp;#39;re looking: feel free to share your portfolio, GitHub, … as well. Keep into account the personal information rule, so don&amp;#39;t just share your CV and be done with it.&lt;/li&gt; &lt;/ul&gt; &lt;/div&gt;&lt;!-- SC_ON --&gt; &amp;#32; submitted by &amp;#32; &lt;a href=&quot;https://www.reddit.com/user/brendt_gd&quot;&gt; /u/brendt_gd &lt;/a&gt; &lt;br/&gt; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1v0kjb3/whos_hiringlooking/&quot;&gt;[link]&lt;/a&gt;&lt;/span&gt; &amp;#32; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1v0kjb3/whos_hiringlooking/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1v0kjb3</id><link href="https://www.reddit.com/r/PHP/comments/1v0kjb3/whos_hiringlooking/" /><updated>2026-07-19T08:00:29+00:00</updated><published>2026-07-19T08:00:29+00:00</published><title>Who's hiring/looking</title></entry><entry><author><name>/u/usamamuneer</name><uri>https://www.reddit.com/user/usamamuneer</uri></author><category term="PHP" label="r/PHP"/><content type="html">&lt;!-- SC_OFF --&gt;&lt;div class=&quot;md&quot;&gt;&lt;p&gt;Built LaraClient to solve a recurring problem: apps that talk to many external APIs end up with duplicated HTTP logic everywhere.&lt;/p&gt; &lt;p&gt;It’s config-driven, declare base URI, auth, retry policy, rate limits, etc. once per connection. OAuth2 client credentials are cached and refreshed automatically.&lt;/p&gt; &lt;p&gt;Includes observability (redacted logging + dashboard), resilience (retries, circuit breaker), and a solid testing story (fake, sequences, VCR-style record/replay).&lt;/p&gt; &lt;p&gt;Not trying to replace Guzzle or Laravel HTTP, more like Laravel’s mail/cache approach, but for outbound API calls.&lt;/p&gt; &lt;p&gt;Try it out now.&lt;br/&gt; Github: &lt;a href=&quot;https://github.com/usamamuneerchaudhary/laraclient&quot;&gt;https://github.com/usamamuneerchaudhary/laraclient&lt;/a&gt;&lt;/p&gt; &lt;/div&gt;&lt;!-- SC_ON --&gt; &amp;#32; submitted by &amp;#32; &lt;a href=&quot;https://www.reddit.com/user/usamamuneer&quot;&gt; /u/usamamuneer &lt;/a&gt; &lt;br/&gt; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1v6l9mz/opensource_laravel_package_for_managing_multiple/&quot;&gt;[link]&lt;/a&gt;&lt;/span&gt; &amp;#32; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1v6l9mz/opensource_laravel_package_for_managing_multiple/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1v6l9mz</id><link href="https://www.reddit.com/r/PHP/comments/1v6l9mz/opensource_laravel_package_for_managing_multiple/" /><updated>2026-07-25T22:00:14+00:00</updated><published>2026-07-25T22:00:14+00:00</published><title>Open-source Laravel package for managing multiple third-party API integrations</title></entry><entry><author><name>/u/davidbalbino</name><uri>https://www.reddit.com/user/davidbalbino</uri></author><category term="PHP" label="r/PHP"/><content type="html">&lt;!-- SC_OFF --&gt;&lt;div class=&quot;md&quot;&gt;&lt;p&gt;Hey everyone,&lt;/p&gt; &lt;p&gt;Over the past few months, I’ve been working on an experimental project called PAM, aiming to solve two specific pain points in the ecosystem: keeping PHP applications warm in memory for high performance, and running JavaScript/React natively on desktop and mobile without heavy bridge overhead.&lt;/p&gt; &lt;p&gt;Here is a quick breakdown of what it does and why I&amp;#39;m building it:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;PAM for PHP (Persistent Runtime in Memory)&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;Instead of booting the framework on every single HTTP request, PAM uses a Rust-powered runtime to keep the application warm in memory.&lt;/p&gt; &lt;p&gt;The Goal: Lightning-fast request handling while preserving full compatibility with standard Laravel workflows (Eloquent, Queues, Artisan, Blade, Livewire, Inertia, Sanctum, Reverb, Telescope, etc.).&lt;/p&gt; &lt;p&gt;Built explicitly with support for Laravel 12 &amp;amp; 13 in mind.&lt;/p&gt; &lt;p&gt;PHP Docs: &lt;a href=&quot;https://push-in.github.io/pam-docs/laravel/overview/&quot;&gt;https://push-in.github.io/pam-docs/laravel/overview/&lt;/a&gt;&lt;/p&gt; &lt;ol&gt; &lt;li&gt;PAM Native (Desktop &amp;amp; Mobile)&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;On the frontend/mobile side, PAM Native is designed to run React/React Native apps with truly native execution, aiming for near-instant startup times and zero heavy JS bridge bottlenecks.&lt;/p&gt; &lt;p&gt;The Goal: Retain the React developer experience while delivering pure native performance on desktop and mobile devices.&lt;/p&gt; &lt;p&gt;Native Docs: &lt;a href=&quot;https://push-in.github.io/pam-docs/native/overview/&quot;&gt;https://push-in.github.io/pam-docs/native/overview/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Why I&amp;#39;m posting here:&lt;/p&gt; &lt;p&gt;The project is still under active development, and I’m looking for honest technical feedback, code reviews, and potential edge cases to test.&lt;/p&gt; &lt;p&gt;For PHP/Laravel folks: What edge cases (memory leaks, static state issues, long-lived DB connections) would you want to see stress-tested first?&lt;/p&gt; &lt;p&gt;For Mobile/Desktop folks: What are the biggest performance bottlenecks you face with existing cross-platform runtimes today?&lt;/p&gt; &lt;p&gt;Would love to hear your thoughts, criticism, or ideas!&lt;/p&gt; &lt;/div&gt;&lt;!-- SC_ON --&gt; &amp;#32; submitted by &amp;#32; &lt;a href=&quot;https://www.reddit.com/user/davidbalbino&quot;&gt; /u/davidbalbino &lt;/a&gt; &lt;br/&gt; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1v6l81e/ive_been_building_pam_a_persistent_php_runtime/&quot;&gt;[link]&lt;/a&gt;&lt;/span&gt; &amp;#32; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1v6l81e/ive_been_building_pam_a_persistent_php_runtime/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1v6l81e</id><link href="https://www.reddit.com/r/PHP/comments/1v6l81e/ive_been_building_pam_a_persistent_php_runtime/" /><updated>2026-07-25T21:58:26+00:00</updated><published>2026-07-25T21:58:26+00:00</published><title>I’ve been building PAM: a persistent PHP runtime powered by Rust, plus a ultra-fast native engine for desktop/mobile. Looking for technical feedback &amp; reviews.</title></entry><entry><author><name>/u/noweh95</name><uri>https://www.reddit.com/user/noweh95</uri></author><category term="PHP" label="r/PHP"/><content type="html">&lt;!-- SC_OFF --&gt;&lt;div class=&quot;md&quot;&gt;&lt;p&gt;Postmortem after several rounds of performance work on a Laravel site, trying to push concurrent user capacity up. Redis alone didn&amp;#39;t cut it: a load test showed Nginx and PHP still booted on every request even with data coming straight from cache.&lt;/p&gt; &lt;p&gt;Ended up putting Varnish in front of Nginx instead.&lt;/p&gt; &lt;/div&gt;&lt;!-- SC_ON --&gt; &amp;#32; submitted by &amp;#32; &lt;a href=&quot;https://www.reddit.com/user/noweh95&quot;&gt; /u/noweh95 &lt;/a&gt; &lt;br/&gt; &lt;span&gt;&lt;a href=&quot;https://medium.com/@julien_schmitt/redis-wasnt-enough-why-we-added-varnish-in-front-of-nginx-6129653d557f&quot;&gt;[link]&lt;/a&gt;&lt;/span&gt; &amp;#32; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1v6dge6/why_redis_wasnt_enough_to_survive_a_traffic_spike/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1v6dge6</id><link href="https://www.reddit.com/r/PHP/comments/1v6dge6/why_redis_wasnt_enough_to_survive_a_traffic_spike/" /><updated>2026-07-25T16:53:05+00:00</updated><published>2026-07-25T16:53:05+00:00</published><title>Why Redis wasn't enough to survive a traffic spike, and what actually was</title></entry><entry><author><name>/u/exakat</name><uri>https://www.reddit.com/user/exakat</uri></author><category term="PHP" label="r/PHP"/><content type="html">&lt;!-- SC_OFF --&gt;&lt;div class=&quot;md&quot;&gt;&lt;p&gt;Hi &lt;a href=&quot;/r/PHP&quot;&gt;r/PHP&lt;/a&gt;,&lt;/p&gt; &lt;p&gt;&lt;code&gt;preg\_match($pattern, $subject, $matches)&lt;/code&gt; has been quietly aging since PHP 3. It still works great, and if you&amp;#39;ve ever had to explain to a junior dev why the function returns 1, 0, or false, and why the actual result shows up in a variable you passed by reference three arguments ago, you know the classic rear-guard battles you need to fight.&lt;/p&gt; &lt;p&gt;So I built &lt;code&gt;ext/regex&lt;/code&gt;: a PHP extension, with C, that wraps the same PCRE2 engine PHP already uses, but behind an immutable, typed, exception-throwing OOP API instead of the sentinel-value soup we have today. &lt;/p&gt; &lt;p&gt;Nothing about preg_* is being removed or deprecated. This is an additive, opt-in sibling API: think of it as DateTime next to strtotime().&lt;/p&gt; &lt;p&gt;Before:&lt;/p&gt; &lt;p&gt;`` if (preg_match(&amp;#39;/^(?P&amp;lt;year&amp;gt;\d{4})-(?P&amp;lt;month&amp;gt;\d{2})-(?P&amp;lt;day&amp;gt;\d{2})$/&amp;#39;, $s, $m) === false) {&lt;/p&gt; &lt;p&gt;// was it &amp;quot;no match&amp;quot; or &amp;quot;regex engine error&amp;quot;? guess!&lt;/p&gt; &lt;p&gt;} ``&lt;/p&gt; &lt;p&gt;After:&lt;/p&gt; &lt;p&gt;`` $m = Regex::of(&amp;#39;/^(?P&amp;lt;year&amp;gt;\d{4})-(?P&amp;lt;month&amp;gt;\d{2})-(?P&amp;lt;day&amp;gt;\d{2})$/&amp;#39;)-&amp;gt;match($s);&lt;/p&gt; &lt;p&gt;echo $m-&amp;gt;group(&amp;#39;year&amp;#39;)-&amp;gt;value; ``&lt;/p&gt; &lt;p&gt;A few things it fixes: one consistent return type per method (no more int|false roulette), matches as real objects instead of a &amp;amp;$matches out-parameter, exceptions instead of &lt;code&gt;false + preg\_last\_error()&lt;/code&gt;, &lt;code&gt;Regex::withLiteral()&lt;/code&gt; for safe interpolation, and compile-once/reuse pattern objects.&lt;/p&gt; &lt;p&gt;So far, 34 tests back it up, including a full port of ext/pcre&amp;#39;s own test suite. It&amp;#39;s installable via PIE: no PECL package, let&amp;#39;s be modern; PIE is where extension packaging is heading.&lt;/p&gt; &lt;p&gt;🙋 This is where you come in. I&amp;#39;ve stared at this API long enough that I can&amp;#39;t tell if it&amp;#39;s genuinely better or if I&amp;#39;ve Stockholm-syndromed myself into liking my own method names. Reply below or open an issue/PR: a single &amp;quot;this method name is dumb, call it X&amp;quot; is worth more than an upvote.&lt;/p&gt; &lt;p&gt;👉 Repo: &lt;a href=&quot;https://github.com/dseguy/regexClass&quot;&gt;https://github.com/dseguy/regex&lt;/a&gt;&lt;/p&gt; &lt;/div&gt;&lt;!-- SC_ON --&gt; &amp;#32; submitted by &amp;#32; &lt;a href=&quot;https://www.reddit.com/user/exakat&quot;&gt; /u/exakat &lt;/a&gt; &lt;br/&gt; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1v5zjhv/a_modern_php_extension_to_give_preg_an/&quot;&gt;[link]&lt;/a&gt;&lt;/span&gt; &amp;#32; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1v5zjhv/a_modern_php_extension_to_give_preg_an/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1v5zjhv</id><link href="https://www.reddit.com/r/PHP/comments/1v5zjhv/a_modern_php_extension_to_give_preg_an/" /><updated>2026-07-25T05:42:10+00:00</updated><published>2026-07-25T05:42:10+00:00</published><title>A modern PHP extension to give preg_ an object-oriented API: feedback wanted!</title></entry><entry><author><name>/u/Miserable_Step_6391</name><uri>https://www.reddit.com/user/Miserable_Step_6391</uri></author><category term="PHP" label="r/PHP"/><content type="html">&lt;!-- SC_OFF --&gt;&lt;div class=&quot;md&quot;&gt;&lt;p&gt;Let’s get the obvious part out of the way: this will not rescue a server that spends 500 ms waiting on a database.&lt;/p&gt; &lt;p&gt;I did it anyway.&lt;/p&gt; &lt;p&gt;Several years ago, I wrote a small hydrator to replace a painfully slow mapper in one of my projects. It did what I needed, then sat untouched in a private repository.&lt;/p&gt; &lt;p&gt;I reopened it recently and made the mistake of benchmarking it.&lt;/p&gt; &lt;p&gt;That old project is now a library called HydraType. It inspects a class once, generates the PHP code needed to map an array onto it, and caches the result.&lt;/p&gt; &lt;p&gt;For a plain int property, the generated code is nothing more than:&lt;/p&gt; &lt;p&gt;&lt;code&gt;php $object-&amp;gt;id = (int) $data[&amp;#39;id&amp;#39;]; &lt;/code&gt;&lt;/p&gt; &lt;p&gt;Private properties made this less straightforward. Using a class-scoped closure to access them is an old trick, but I wanted to check whether it still held up on current PHP versions when timing the whole object rather than isolated property writes.&lt;/p&gt; &lt;p&gt;&lt;code&gt;php $writer = Closure::bind( static function (User $object, array $data): void { $object-&amp;gt;id = (int) $data[&amp;#39;id&amp;#39;]; $object-&amp;gt;name = (string) $data[&amp;#39;name&amp;#39;]; }, null, User::class, ); &lt;/code&gt;&lt;/p&gt; &lt;p&gt;I timed creating the object and assigning every property. Here’s what I got:&lt;/p&gt; &lt;table&gt;&lt;thead&gt; &lt;tr&gt; &lt;th align=&quot;right&quot;&gt;Private properties&lt;/th&gt; &lt;th align=&quot;right&quot;&gt;Scoped closure&lt;/th&gt; &lt;th align=&quot;right&quot;&gt;Cached reflection&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt;&lt;tbody&gt; &lt;tr&gt; &lt;td align=&quot;right&quot;&gt;1&lt;/td&gt; &lt;td align=&quot;right&quot;&gt;91.44 ns&lt;/td&gt; &lt;td align=&quot;right&quot;&gt;90.69 ns&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td align=&quot;right&quot;&gt;2&lt;/td&gt; &lt;td align=&quot;right&quot;&gt;106.71 ns&lt;/td&gt; &lt;td align=&quot;right&quot;&gt;146.19 ns&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td align=&quot;right&quot;&gt;5&lt;/td&gt; &lt;td align=&quot;right&quot;&gt;152.01 ns&lt;/td&gt; &lt;td align=&quot;right&quot;&gt;289.91 ns&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td align=&quot;right&quot;&gt;20&lt;/td&gt; &lt;td align=&quot;right&quot;&gt;383.23 ns&lt;/td&gt; &lt;td align=&quot;right&quot;&gt;1,028.87 ns&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;&lt;em&gt;Median time per object on PHP 8.2.&lt;/em&gt;&lt;/p&gt; &lt;p&gt;It does, although barely for very small objects. Reflection won by a fraction at one property, but from two properties onward the reusable closure was faster.&lt;/p&gt; &lt;p&gt;My first version created and bound a new writer for every object, then threw it away. Keeping one writer and doing all the assignments in one call was much faster.&lt;/p&gt; &lt;p&gt;HydraType can also transform and validate values. Those features only change the generated code for the property that uses them. A plain property stays:&lt;/p&gt; &lt;p&gt;&lt;code&gt;php $object-&amp;gt;id = (int) $data[&amp;#39;id&amp;#39;]; &lt;/code&gt;&lt;/p&gt; &lt;p&gt;For that property, hydration is still just a cast and an assignment.&lt;/p&gt; &lt;p&gt;For comparison, I ran the same benchmark with several existing PHP hydrators and mappers. On PHP 8.2, HydraType took about 268 ns to create and hydrate the five-property object. The libraries I compared it with took between 308 ns and almost 11 microseconds.&lt;/p&gt; &lt;p&gt;Across a large batch, those differences can add up. At 268 ns, there is not much hydrator left between the input array and the object.&lt;/p&gt; &lt;p&gt;The code and benchmark scripts are here:&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://github.com/makermill/hydratype&quot;&gt;https://github.com/makermill/hydratype&lt;/a&gt;&lt;/p&gt; &lt;p&gt;If you spot a bad assumption or an unfair comparison in the benchmarks, I want to know.&lt;/p&gt; &lt;/div&gt;&lt;!-- SC_ON --&gt; &amp;#32; submitted by &amp;#32; &lt;a href=&quot;https://www.reddit.com/user/Miserable_Step_6391&quot;&gt; /u/Miserable_Step_6391 &lt;/a&gt; &lt;br/&gt; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1v6dhhj/i_reopened_an_old_php_hydrator_then_the/&quot;&gt;[link]&lt;/a&gt;&lt;/span&gt; &amp;#32; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1v6dhhj/i_reopened_an_old_php_hydrator_then_the/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1v6dhhj</id><link href="https://www.reddit.com/r/PHP/comments/1v6dhhj/i_reopened_an_old_php_hydrator_then_the/" /><updated>2026-07-25T16:54:17+00:00</updated><published>2026-07-25T16:54:17+00:00</published><title>I reopened an old PHP hydrator. Then the benchmarks got out of hand.</title></entry><entry><author><name>/u/Massive-Society-1008</name><uri>https://www.reddit.com/user/Massive-Society-1008</uri></author><category term="PHP" label="r/PHP"/><content type="html">&lt;!-- SC_OFF --&gt;&lt;div class=&quot;md&quot;&gt;&lt;p&gt;Hi everyone!&lt;/p&gt; &lt;p&gt;Over the past few months I&amp;#39;ve been building &lt;strong&gt;CraftDB&lt;/strong&gt;, a web-based tool that helps visualize and organize database schemas.&lt;/p&gt; &lt;p&gt;Some of the current features include:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Import SQL schemas&lt;/li&gt; &lt;li&gt;Generate interactive ER diagrams&lt;/li&gt; &lt;li&gt;Drag &amp;amp; organize tables&lt;/li&gt; &lt;li&gt;Export diagrams&lt;/li&gt; &lt;li&gt;Support for MySQL, PostgreSQL and SQLite&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;My main goal is to make it easier to understand existing databases, especially large or legacy projects.&lt;/p&gt; &lt;p&gt;I&amp;#39;m currently working on features like:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Laravel migrations import&lt;/li&gt; &lt;li&gt;AI-powered schema explanations&lt;/li&gt; &lt;li&gt;Better documentation generation&lt;/li&gt; &lt;li&gt;Team collaboration&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;I&amp;#39;d love to hear your honest feedback.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;What feature would make a tool like this useful for your workflow?&lt;/li&gt; &lt;li&gt;Is there anything you feel is missing compared to other database diagram tools?&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;You can try it here:&lt;/p&gt; &lt;p&gt;👉 &lt;a href=&quot;https://craftdb.app/&quot;&gt;https://craftdb.app&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Any feedback, criticism or feature requests are greatly appreciated. Thanks!&lt;/p&gt; &lt;/div&gt;&lt;!-- SC_ON --&gt; &amp;#32; submitted by &amp;#32; &lt;a href=&quot;https://www.reddit.com/user/Massive-Society-1008&quot;&gt; /u/Massive-Society-1008 &lt;/a&gt; &lt;br/&gt; &lt;span&gt;&lt;a href=&quot;https://craftdb.app&quot;&gt;[link]&lt;/a&gt;&lt;/span&gt; &amp;#32; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1v5dwhz/i_built_craftdb_a_database_diagram_tool_for_php/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1v5dwhz</id><link href="https://www.reddit.com/r/PHP/comments/1v5dwhz/i_built_craftdb_a_database_diagram_tool_for_php/" /><updated>2026-07-24T15:01:55+00:00</updated><published>2026-07-24T15:01:55+00:00</published><title>I built CraftDB – a database diagram tool for PHP developers. Looking for feedback!</title></entry><entry><author><name>/u/Jay123anta</name><uri>https://www.reddit.com/user/Jay123anta</uri></author><category term="PHP" label="r/PHP"/><content type="html">&lt;!-- SC_OFF --&gt;&lt;div class=&quot;md&quot;&gt;&lt;p&gt;A while back I posted here about a passive threat-detection middleware I built for a Laravel app - it logs suspicious requests (SQLi/XSS/scanners/probes) to the database without blocking anything. I ended that post with an open question: how do you deal with JSON API bodies, when a legit search like {&amp;quot;query&amp;quot;: &amp;quot;SELECT model FROM products&amp;quot;} trips a SQL pattern just because the value contains the word SELECT?&lt;/p&gt; &lt;p&gt;The thread had genuinely useful replies, so here&amp;#39;s what I ended up shipping.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;What I did:&lt;/strong&gt; path-aware allow-listing. I already had a safe_fields option, but it exempts a key name everywhere it appears - too blunt for nested JSON. So I added safe_paths, which matches by dot-notation path with wildcards:&lt;/p&gt; &lt;p&gt;&lt;code&gt;&amp;#39;safe_paths&amp;#39; =&amp;gt; [&amp;#39;search.query&amp;#39;, &amp;#39;filters.*.value&amp;#39;],&lt;/code&gt;&lt;/p&gt; &lt;p&gt;That exempts the value of one specific field - the search box - without exempting a query field anywhere else in the request. Credit to &lt;a href=&quot;/u/Deep_Ad1959&quot;&gt;u/Deep_Ad1959&lt;/a&gt;, who suggested path-based whitelisting in the last thread.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;What I deliberately did NOT do - and why:&lt;/strong&gt; The other half of that suggestion was &amp;quot;only scan leaf string values, never keys or structure.&amp;quot; I tried it, and it broke NoSQL operator detection. &lt;/p&gt; &lt;p&gt;A classic Mongo-style injection is &lt;/p&gt; &lt;p&gt;&lt;code&gt;\&lt;/code&gt;{&amp;quot;password&amp;quot;: {&amp;quot;ne&amp;quot;: null}}`` &lt;/p&gt; &lt;p&gt;- the malicious part is a *key* (` ne`) whose value is null, not a string. If you only scan leaf string values you never see $ne, so you&amp;#39;d trade one false-positive class for a real false-negative. I kept full-body scanning and made the exemption precise instead. That felt like the honest trade-off.&lt;/p&gt; &lt;p&gt;To be clear about the limits, since this sub rightly pushed on it last time: this doesn&amp;#39;t make regex-on-JSON magically correct. It&amp;#39;s a passive monitoring layer that assumes your app is already secure (parameterized queries etc.) - safe_paths just lets you tune out known-legit noise precisely instead of bluntly. It&amp;#39;s an IDS, not a WAF, and doesn&amp;#39;t pretend to be.&lt;/p&gt; &lt;p&gt;It&amp;#39;s merged and ships in the next release (Laravel 10–13). Code&amp;#39;s here if useful: &lt;code&gt;jayanta/laravel-threat-detection&lt;/code&gt; on GitHub / Packagist.&lt;/p&gt; &lt;p&gt;Still curious how others handle the JSON case - is precise path-based exemption roughly where you&amp;#39;d land, or do you tag the JSON path on each match and score by path instead?&lt;/p&gt; &lt;/div&gt;&lt;!-- SC_ON --&gt; &amp;#32; submitted by &amp;#32; &lt;a href=&quot;https://www.reddit.com/user/Jay123anta&quot;&gt; /u/Jay123anta &lt;/a&gt; &lt;br/&gt; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1v56wkp/how_i_handled_the_json_falsepositive_problem_in/&quot;&gt;[link]&lt;/a&gt;&lt;/span&gt; &amp;#32; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1v56wkp/how_i_handled_the_json_falsepositive_problem_in/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1v56wkp</id><link href="https://www.reddit.com/r/PHP/comments/1v56wkp/how_i_handled_the_json_falsepositive_problem_in/" /><updated>2026-07-24T09:55:15+00:00</updated><published>2026-07-24T09:55:15+00:00</published><title>How I handled the JSON false-positive problem in my regex threat detector (thanks to this sub's feedback)</title></entry><entry><author><name>/u/rashidlaasri</name><uri>https://www.reddit.com/user/rashidlaasri</uri></author><category term="PHP" label="r/PHP"/><content type="html">&lt;!-- SC_OFF --&gt;&lt;div class=&quot;md&quot;&gt;&lt;p&gt;Hey all‚ I&amp;#39;ve been working on PagerLite, a self-hosted on-call and incident paging package for Laravel, and just tagged v1.0.0. Wanted to share it here and get some honest feedback before I decide what to build next.&lt;/p&gt; &lt;p&gt;The short version: it&amp;#39;s like Horizon or Telescope, but for on-call scheduling. You install it, set up a rotation, and if an incident comes in (via API or a PagerLite::notify() call from your own code) it pages whoever&amp;#39;s on call and escalates to the next person if nobody acks in time. Everything lives in your own database‚ no per-seat SaaS pricing, no data leaving your app.&lt;/p&gt; &lt;p&gt;What it has right now:&lt;/p&gt; &lt;p&gt;- Drag-and-drop on-call schedule&lt;/p&gt; &lt;p&gt;- Configurable escalation chain&lt;/p&gt; &lt;p&gt;- Acknowledge/resolve with a full incident timeline&lt;/p&gt; &lt;p&gt;- Per-member insights (days on call, timed)&lt;/p&gt; &lt;p&gt;- A read-only embeddable calendar for wikis/status pages&lt;/p&gt; &lt;p&gt;- Email notifications for now (see below&lt;/p&gt; &lt;p&gt;Repo: &lt;a href=&quot;http://github.com/Pagerlite/laravel&quot;&gt;github.com/Pagerlite/laravel&lt;/a&gt;&lt;/p&gt; &lt;/div&gt;&lt;!-- SC_ON --&gt; &amp;#32; submitted by &amp;#32; &lt;a href=&quot;https://www.reddit.com/user/rashidlaasri&quot;&gt; /u/rashidlaasri &lt;/a&gt; &lt;br/&gt; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1v58wy6/i_built_a_free_selfhosted_oncallpaging_system_for/&quot;&gt;[link]&lt;/a&gt;&lt;/span&gt; &amp;#32; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1v58wy6/i_built_a_free_selfhosted_oncallpaging_system_for/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1v58wy6</id><link href="https://www.reddit.com/r/PHP/comments/1v58wy6/i_built_a_free_selfhosted_oncallpaging_system_for/" /><updated>2026-07-24T11:39:34+00:00</updated><published>2026-07-24T11:39:34+00:00</published><title>I built a free, self-hosted on-call/paging system for Laravel ‚ looking for feedback</title></entry><entry><author><name>/u/beeblebrox381</name><uri>https://www.reddit.com/user/beeblebrox381</uri></author><category term="PHP" label="r/PHP"/><content type="html">&amp;#32; submitted by &amp;#32; &lt;a href=&quot;https://www.reddit.com/user/beeblebrox381&quot;&gt; /u/beeblebrox381 &lt;/a&gt; &lt;br/&gt; &lt;span&gt;&lt;a href=&quot;https://ddz.dev/blog/symfony-8-groups-attribute-silently-ignored/&quot;&gt;[link]&lt;/a&gt;&lt;/span&gt; &amp;#32; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1v58ruc/symfony_8_ignores_groups_serializer_attribute/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1v58ruc</id><link href="https://www.reddit.com/r/PHP/comments/1v58ruc/symfony_8_ignores_groups_serializer_attribute/" /><updated>2026-07-24T11:32:35+00:00</updated><published>2026-07-24T11:32:35+00:00</published><title>Symfony 8 ignores #[Groups] serializer attribute</title></entry><entry><author><name>/u/ProjektGopher</name><uri>https://www.reddit.com/user/ProjektGopher</uri></author><category term="PHP" label="r/PHP"/><content type="html">&lt;!-- SC_OFF --&gt;&lt;div class=&quot;md&quot;&gt;&lt;p&gt;Hello world, it&amp;#39;s Wednesday, July 22, 2026, and here&amp;#39;s what happened This Week in PHP Internals.&lt;/p&gt; &lt;p&gt;20 stories this week, so let&amp;#39;s get into it. &lt;em&gt;But first,&lt;/em&gt; This week&amp;#39;s episode is brought to you by &lt;strong&gt;Tideways&lt;/strong&gt;. Slow requests, and no clear reason why? Tideways helps you understand exactly where your PHP application spends its time — profiling, tracing, and monitoring to find and fix bottlenecks &lt;strong&gt;faster&lt;/strong&gt;. And your profiling data stays hosted in Germany — GDPR-friendly by default. Learn more at &lt;code&gt;tideways.com&lt;/code&gt;.&lt;/p&gt; &lt;p&gt;This week&amp;#39;s top story: the season&amp;#39;s first ballots are open — 2 sets of them — and the early counts are lopsided. Tim Düsterhus opened voting on the &lt;code&gt;Time\Duration&lt;/code&gt; class on Friday with 2 ballots: a primary, needing a 2/3 majority, and a secondary choosing between full and abbreviated method names. As of recording, the primary stands at &lt;strong&gt;23 to 1&lt;/strong&gt;, and full names lead 18 to 1 — so &lt;code&gt;multiplyBy&lt;/code&gt; and &lt;code&gt;divideBy&lt;/code&gt;, not &lt;code&gt;mul&lt;/code&gt; and &lt;code&gt;divBy&lt;/code&gt;. Voting closes July 31. And remember Pierre Joye, who last week was leaning no over &lt;code&gt;fromSeconds()&lt;/code&gt; and its capped nanoseconds argument? This week he closed the loop and voted &lt;strong&gt;yes&lt;/strong&gt;, writing: &amp;quot;We were like ships passing in the night for some of my disagreements. The RFC wiki page did not show the additional constructor for other units, which hence the inconsistency I pointed out for the extra [nanoseconds] argument in fromSecond. They are here, and reduce this down to a lower level of bad APIs, more a pragmatic compromise conciliating different (if not numerous) use cases. Anything can be perfect, or shipped. Choose one.&amp;quot; It turns out the per-unit constructors that resolved his objection had been in the RFC all along. His ballot almost didn&amp;#39;t register, though — each vote on the wiki is a separate form, and Tim had to point out that you submit each one individually. The count now includes him.&lt;/p&gt; &lt;p&gt;Before the ballots opened, the &lt;code&gt;Duration&lt;/code&gt; thread picked up a subplot about PHP 9. Holly Schilling — who wrote the class-extensions RFCs we covered last week — announced she&amp;#39;s drafting a &lt;strong&gt;Value Structs&lt;/strong&gt; proposal for after the &lt;code&gt;8.6&lt;/code&gt; window, and argued that &lt;code&gt;Duration&lt;/code&gt; would make a better struct than a class, with both ideally landing together in PHP 9. Ilija Tovilo replied by linking his own existing &lt;code&gt;structs-v2&lt;/code&gt; draft and asking whether she was aware of it. She was — she&amp;#39;d read it before drafting her own, and diverged from it on purpose, keeping mutating and non-mutating functionality separate. Tim saw no reason to wait on any of this, saying a draft-stage idea &amp;quot;will take an unknown duration to land - if it ever happens&amp;quot; — &lt;em&gt;his pun, not mine&lt;/em&gt; — and that improvements to the standard library shouldn&amp;#39;t queue behind it.&lt;/p&gt; &lt;p&gt;The week&amp;#39;s other live vote came from Eric Norris, who opened balloting Thursday on &lt;strong&gt;minimum supported versions&lt;/strong&gt; for PHP &lt;code&gt;8.6&lt;/code&gt; — also with 2 questions, each needing a 2/3 vote. Requiring autoconf &lt;code&gt;2.71&lt;/code&gt; for builds from git stands at 20 to 3 with 4 abstentions. Requiring &lt;code&gt;COM_RESET_CONNECTION&lt;/code&gt; — which sets a floor of MySQL &lt;code&gt;5.7.3&lt;/code&gt; or MariaDB &lt;code&gt;10.2.4&lt;/code&gt;, so persistent connections actually get reset — stands at &lt;strong&gt;21 to nothing&lt;/strong&gt; with 3 abstentions. Alexander Kurilo arrived after the discussion phase to ask for an opt-in instead, warning that on older databases persistent connections will silently turn non-persistent. Eric noted: &amp;quot;MySQL 5.7.3 is at least a decade old; it was released on December 3rd, 2013.&amp;quot; After walking through every opt-out design he could think of, he concluded the right move is to make the correct behavior the default. The 3 no votes on autoconf include Jakub Zelenka, who&amp;#39;s worried about building on Red Hat Enterprise Linux 8 and 9 — Tim offered to delay that particular merge to early &lt;code&gt;8.7&lt;/code&gt;. Both votes close July 30.&lt;/p&gt; &lt;p&gt;Saturday night, Pierre Joye opened the RFC that grew out of the libgd sync we covered last week: &lt;strong&gt;&lt;code&gt;gd&lt;/code&gt; 2.4*&lt;em&gt;. It&amp;#39;s big — 3 pillars. First, syncing the bundled &lt;code&gt;gd&lt;/code&gt; extension with upstream libgd: new codecs like QOI, JPEG XL, and UltraHDR, animated GIF and WebP support, multi-page TIFF, and real metadata handling. Second, an additive object-oriented &lt;code&gt;Gd\&lt;/code&gt; API — codecs with &lt;code&gt;fromFile()&lt;/code&gt; and &lt;code&gt;toStream()&lt;/code&gt;, immutable image info, streaming readers and writers. Third, a brand-new *&lt;/em&gt;2D vector canvas&lt;/strong&gt; built on FreeType&amp;#39;s rasterizer, with gradients and the full Cairo compositing set. He says the implementation is nearly done, including a security audit. He declared discussion open for 14 days, until August 1 — and that one sentence is where the trouble started.&lt;/p&gt; &lt;p&gt;Because August 1 plus a 14-day vote lands &lt;em&gt;after&lt;/em&gt; the deadline. Release manager Matteo Beccati was gentle about it, writing: &amp;quot;As much as I like this RFC, I&amp;#39;m afraid it came in a little too late.&amp;quot; Jakub Zelenka explained that nobody — release managers included — has the authority to grant an exception; that would take a change to the policy itself. And Rowan Tommins did the arithmetic: with alpha 1 out July 2, the cutoff for an RFC&amp;#39;s final state was July 14, which is 4 days before this thread even opened. Pierre&amp;#39;s frustration has a specific shape. The implementation was finished weeks ago — what delayed everything was that his pull request sat waiting on an approval that had been assigned to an automated bot reviewer, so no human was ever going to sign off, and he eventually merged it himself. He also argues the stakes are real, because PHP 9 is the one chance to change old defaults, and missing this window locks the current design in for years. The thread got tense over tone along the way — Pierre felt brushed off by a terse reply, and Rowan apologized outright, then made the counter-case that a fixed cutoff applied to everyone is fairer than debating each RFC&amp;#39;s merits one at a time. All of this landed the same day Larry Garfield asked the list, in a separate thread, to hold new business until September 1 so reviewers can focus on &lt;code&gt;8.6&lt;/code&gt;&amp;#39;s finish line. So &lt;code&gt;gd&lt;/code&gt; 2.4 is alive and under discussion — just aimed at the &lt;em&gt;next&lt;/em&gt; release, whatever its number turns out to be.&lt;/p&gt; &lt;p&gt;Caleb White&amp;#39;s pipe assignment operator, &lt;code&gt;|&amp;gt;=&lt;/code&gt;, had a crowded week. Larry Garfield opened it unable to find a compelling use case, and by Monday had moved to a no — pushed there, he says, by a competing proposal. That competing proposal is Vadim Dvorovenko&amp;#39;s &lt;strong&gt;left-to-right assignment&lt;/strong&gt; RFC, published Sunday, which claims the &lt;em&gt;same&lt;/em&gt; &lt;code&gt;|&amp;gt;=&lt;/code&gt; token with opposite semantics. Vadim objects on principle, arguing: &amp;quot;Attempting to transform such an operator from an immutable, functional construct into a mutable, imperative one steers the language in the wrong direction and undoes previous efforts.&amp;quot; Caleb declined to merge the proposals, noting that F#, Elixir, OCaml, and Hack all kept ordinary assignment alongside their pipes. Larry also claimed none of the pipe proposals could make &lt;code&gt;8.6&lt;/code&gt;, and Tim Düsterhus corrected him, asserting: &amp;quot;This is false&amp;quot; — the last major change was July 13, so voting could open July 27 and close August 10, before the freeze. Meanwhile Bob Weinand asked whether the desugaring double-fires property hooks. Caleb came back with tests showing &lt;code&gt;|&amp;gt;=&lt;/code&gt; behaves exactly like &lt;code&gt;??=&lt;/code&gt;, and updated the RFC&amp;#39;s single-evaluation section to match. Vadim&amp;#39;s own RFC, as of recording, has &lt;strong&gt;0&lt;/strong&gt; replies.&lt;/p&gt; &lt;p&gt;Paul M. Jones&amp;#39;s &lt;code&gt;strict-namespace&lt;/code&gt; RFC — the piece he carved out of function autoloading last Tuesday night — spent its first full week in one long argument about a single word. Rowan Tommins objected first, writing that strict &amp;quot;implies some extra check that namespaces are [correct] in some way, which isn&amp;#39;t really what this is about.&amp;quot; Ilija Tovilo went deeper, arguing: &amp;quot;the value-add of this declaration is very small if the plan isn&amp;#39;t ever to deprecate/remove the old behavior.&amp;quot; Tim Düsterhus is &lt;strong&gt;in favor&lt;/strong&gt; — with a rename to &lt;code&gt;global_fallback=0&lt;/code&gt;. By Friday Paul had 4 candidate names on the table and a diagnosis: the pushback is the name, not the feature. Theodore Brown pointed out he&amp;#39;d floated the same directive in 2019; Paul added it to the prior art with an apology. And Benjamin Außenhofer suggested splitting the ballot — vote the concept, then vote the name. Rowan warned against it, writing: &amp;quot;a split vote leaves voters who actively dislike a particular name with an awkward choice: vote Yes, and risk the [bad] name being chosen; or vote No, even though you would support the feature under a different name.&amp;quot; The rest of the autoloading corner kept moving too: Paul updated &lt;strong&gt;function autoloading&lt;/strong&gt; mark 5 to lean on the new RFC and wants its vote open in about 2 weeks, and Michael Morris&amp;#39;s improved-autoloading draft drew warm-but-firm feedback from Larry Garfield and Rowan Tommins — both like the namespace-setup-file idea, neither wants it crammed into the class autoloader&amp;#39;s callback.&lt;/p&gt; &lt;p&gt;Nicolas Grekas didn&amp;#39;t let Ilija Tovilo&amp;#39;s &amp;quot;sadly not in favor&amp;quot; be the last word on &lt;strong&gt;serializable closures&lt;/strong&gt;. His rebuttal: caching one attribute isn&amp;#39;t the point — the point is skipping the &lt;em&gt;entire&lt;/em&gt; metadata pipeline that frameworks re-run on every request, and that&amp;#39;s the measured slow path. On the security design, he refused to loosen it, writing: &amp;quot;Name-based closure unserialization would ship a universal, app-independent gadget in the engine ... I won&amp;#39;t commit to an RFC that turns every serialized payload into that kind of gadget, and I don&amp;#39;t think we should, either.&amp;quot; Then Saturday brought version &lt;code&gt;0.3&lt;/code&gt;, and a surgical cut — the reflection API is gone, the &lt;code&gt;serialize()&lt;/code&gt; support stays. His reasoning: &amp;quot;serialize() is the one feature that most/all cache systems are built on, so that&amp;#39;s the place that needs the improvement.&amp;quot; Fresh reviews welcome.&lt;/p&gt; &lt;p&gt;Wendell Adriel came back to the list Thursday proposing &lt;strong&gt;typed array declarations&lt;/strong&gt; — &lt;code&gt;array&amp;lt;int, string&amp;gt;&lt;/code&gt; as real syntax, with 3 escalating enforcement levels. The review was fast and unsparing. Lazare Inepologlou flagged that you can&amp;#39;t soundly subtype a mutable array without splitting reads from writes, and Wendell shipped a revised draft the &lt;em&gt;next day&lt;/em&gt;. Rob Landers warned the whole thing overlaps the reified generics work, on hold until after the freeze, which is late August at the earliest. Rowan Tommins noted that level 1 — syntax without enforcement — rhymes with the bound-erased generics RFC the list just declined. Michał Marcin Brzuchalski even found a runtime hole, where functions like &lt;code&gt;parse_str()&lt;/code&gt; that build results directly into a typed property can dodge the check. By Monday, Wendell put the RFC on hold himself. Larry Garfield&amp;#39;s verdict was the sharpest, calling this &amp;quot;the already-dangerously-overloaded array mega-type&amp;quot; and asking for real typed list, set, and dictionary objects instead — which Wendell promptly volunteered to help build.&lt;/p&gt; &lt;p&gt;The frozen &lt;strong&gt;deprecations&lt;/strong&gt; list for PHP &lt;code&gt;8.6&lt;/code&gt; got its evidence file. Juliette Reinders Folmer scanned the Packagist Top 4-thousand — nearly four hundred fifty thousand files — and posted counts for every proposal. The headline &lt;strong&gt;being&lt;/strong&gt;: &lt;code&gt;list()&lt;/code&gt; appears over &lt;strong&gt;twelve thousand&lt;/strong&gt; times, and Juliette wrote plainly: &amp;quot;Having said that, I&amp;#39;m definitely not in favour of deprecating list().&amp;quot; Compare &lt;code&gt;spl_object_hash()&lt;/code&gt; at 625, &lt;code&gt;is_integer()&lt;/code&gt; at 303, and a long tail of single and double digits — several proposals scored a clean 0. Kamil Tekiela discovered his mysqli proposal had missed the procedural &lt;code&gt;mysqli_stmt_init()&lt;/code&gt;, patched the text, and worried aloud: &amp;quot;I hope this change is not going to reset the counter.&amp;quot; Tim Düsterhus was quick to correct the record downward — one scary-looking count, on &lt;code&gt;_&lt;/code&gt; as a constant, collapses to 0 once false positives come out. And Monday, right on schedule, Gina P. Banyard confirmed the timetable, writing: &amp;quot;I intend to open the vote next Monday (the 27th of July) for 2 weeks so that the vote is finished on time for 8.6.&amp;quot; Every deprecation gets voted in isolation — bring a lunch.&lt;/p&gt; &lt;p&gt;Quick hits. Go Kudo returned with a rebuilt cache proposal — a bundled &lt;code&gt;user_cache&lt;/code&gt; extension, fully decoupled from OPcache this time; Larry Garfield likes it, flagged the lock story around &lt;code&gt;remember()&lt;/code&gt;, and gently redirected it to &lt;code&gt;8.7&lt;/code&gt; — adding: &amp;quot;Or 9, if that&amp;#39;s what we call it.&amp;quot; Holly Schilling&amp;#39;s &lt;strong&gt;4x&lt;/strong&gt; fix for non-public asymmetric setters got its answer: no RFC needed — Tim confirmed a pure performance improvement just needs PR review, and Ilia Alshanetsky called it &amp;quot;definitely a strong candidate for PHP 8.6 inclusion.&amp;quot; &lt;strong&gt;fennic&lt;/strong&gt; pitched engine-native PSR-4 autoloading with &lt;code&gt;spl_autoload_psr4_register()&lt;/code&gt;; Alex Rock wants classmap support before it can replace Composer&amp;#39;s bootstrap, and Heinz Wiesinger pointed to his existing PECL extension doing much the same. Edmond of the TrueAsync project published a pre-RFC for an &lt;strong&gt;async scheduler&lt;/strong&gt; engine interface — coroutine-aware core, no scheduler in core itself. His philosophical problem is that the RFC has &lt;em&gt;no&lt;/em&gt; user-visible changes at all, and so far it has 0 replies. And Osama Aldemeery asked for RFC karma to formalize &lt;code&gt;PREG_THROW_ON_ERROR&lt;/code&gt; — Ilija Tovilo granted it &lt;strong&gt;2 minutes&lt;/strong&gt; later.&lt;/p&gt; &lt;p&gt;Liam Hammett&amp;#39;s markup expressions thread sprouted an alternative: Edmond proposed making the &lt;em&gt;parser&lt;/em&gt; extensible instead, so JSX-like syntaxes could ship as extensions — Morgan liked that better than blessing one syntax, and within a day Edmond had a working DSL-hooks prototype, announcing: &amp;quot;Your wish has been granted. 🙂&amp;quot; Máté Kocsis and Ignace Nyamagana Butera kept refining &lt;strong&gt;query parameters&lt;/strong&gt; — the open question is whether parsing limits belong on builder methods too, with Ignace arguing PHP shouldn&amp;#39;t police what&amp;#39;s really a business constraint. Prateek Bhujel&amp;#39;s terminal-helpers extension hit &lt;code&gt;0.6.0&lt;/code&gt; — it&amp;#39;s now installable via PIE, and its output methods now write to standard PHP streams like STDOUT and STDERR instead of only its own built-in targets. The ballot queue grew by 2: Nick Sdot posted intent to vote on &lt;strong&gt;readonly property defaults&lt;/strong&gt; for on or around July 23, and Khaled Alam&amp;#39;s const-object-property-write opens Saturday the 25th — both aiming ahead of the freeze. Ben Ramsey amended the &lt;strong&gt;Working Groups&lt;/strong&gt; RFC with a new section setting expectations for charter-RFC discussion. And release week: PHP &lt;code&gt;8.6.0alpha2&lt;/code&gt;, &lt;code&gt;8.5.9RC1&lt;/code&gt;, and &lt;code&gt;8.4.24RC1&lt;/code&gt; all shipped — with alpha 3 and both GA releases converging on July 30 — while the release managers posted the countdown that framed half of this episode: soft feature freeze August 11, beta 1 August 13, every &lt;code&gt;8.6&lt;/code&gt; vote closed before then.&lt;/p&gt; &lt;p&gt;So that&amp;#39;s the week: 2 ballot boxes open and both lopsided — &lt;code&gt;Duration&lt;/code&gt; cruising at 23 to 1, minimum versions right behind it; &lt;code&gt;gd&lt;/code&gt; 2.4 arriving 4 days after the door closed and pointing at the next release instead; a pipe operator with 2 authors claiming 1 token; typed arrays proposed, revised, and shelved inside 5 days; and the deprecations list armed with its evidence file, ballots opening Monday — with readonly defaults and const-property-write queued right behind. Links to every thread are below. Thanks again to &lt;code&gt;Tideways.com&lt;/code&gt; for supporting this week&amp;#39;s episode. We&amp;#39;re Artisan Build. See you next week.&lt;/p&gt; &lt;/div&gt;&lt;!-- SC_ON --&gt; &amp;#32; submitted by &amp;#32; &lt;a href=&quot;https://www.reddit.com/user/ProjektGopher&quot;&gt; /u/ProjektGopher &lt;/a&gt; &lt;br/&gt; &lt;span&gt;&lt;a href=&quot;https://youtu.be/tCUKb5rPuJ4&quot;&gt;[link]&lt;/a&gt;&lt;/span&gt; &amp;#32; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1v4426j/this_week_in_php_internals_july_22_2026/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1v4426j</id><link href="https://www.reddit.com/r/PHP/comments/1v4426j/this_week_in_php_internals_july_22_2026/" /><updated>2026-07-23T05:00:53+00:00</updated><published>2026-07-23T05:00:53+00:00</published><title>This Week In PHP Internals | July 22, 2026</title></entry><entry><author><name>/u/jfox015</name><uri>https://www.reddit.com/user/jfox015</uri></author><category term="PHP" label="r/PHP"/><content type="html">&amp;#32; submitted by &amp;#32; &lt;a href=&quot;https://www.reddit.com/user/jfox015&quot;&gt; /u/jfox015 &lt;/a&gt; &lt;br/&gt; &lt;span&gt;&lt;a href=&quot;/r/u_jfox015/comments/1v4mez9/lessons_from_a_legacy_application_modernization/&quot;&gt;[link]&lt;/a&gt;&lt;/span&gt; &amp;#32; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1v4mjnd/lessons_from_a_legacy_application_modernization/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1v4mjnd</id><link href="https://www.reddit.com/r/PHP/comments/1v4mjnd/lessons_from_a_legacy_application_modernization/" /><updated>2026-07-23T18:36:44+00:00</updated><published>2026-07-23T18:36:44+00:00</published><title>Lessons from a Legacy Application Modernization Lessons</title></entry><entry><author><name>/u/aliwesome</name><uri>https://www.reddit.com/user/aliwesome</uri></author><category term="PHP" label="r/PHP"/><content type="html">&lt;!-- SC_OFF --&gt;&lt;div class=&quot;md&quot;&gt;&lt;p&gt;Hey folks,&lt;/p&gt; &lt;p&gt;I’ve been using Nova for a while and always wanted a sane way to run a few curated Artisan commands from the panel — without ending up with a free-text bash box that can &lt;code&gt;cat .env&lt;/code&gt; if someone gets clever.&lt;/p&gt; &lt;p&gt;Most of the older Nova “command runner” tools either:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;assume bash/custom commands are fine by default, or&lt;/li&gt; &lt;li&gt;break on Nova 5 (&lt;code&gt;__ is not defined&lt;/code&gt; / localization helper changes), or&lt;/li&gt; &lt;li&gt;don’t really gate who can run what in production&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;So I built Nova Command Center as a clean-room alternative:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;bash + free-form commands off by default&lt;/li&gt; &lt;li&gt;commands run as argv via Symfony Process (no shell string interpolation)&lt;/li&gt; &lt;li&gt;tool &lt;code&gt;canSee&lt;/code&gt; + global gate + per-command abilities (catalogue hides what you can’t run)&lt;/li&gt; &lt;li&gt;run history with variables/flags + rerun&lt;/li&gt; &lt;li&gt;Nova 4 and 5 on one path&lt;/li&gt; &lt;li&gt;small doctor CLI + a11y polish in the latest release&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Repo: &lt;a href=&quot;https://github.com/farsidev/nova-command-center&quot;&gt;https://github.com/farsidev/nova-command-center&lt;/a&gt;&lt;br/&gt; Install: &lt;code&gt;composer require farsi/nova-command-center&lt;/code&gt;&lt;/p&gt; &lt;p&gt;Not trying to dunk on other packages — they scratched a real itch. I just wanted safer defaults.&lt;/p&gt; &lt;p&gt;If you run Nova in production (or got burned by a runner during a Nova 5 upgrade), I’d love honest feedback:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;what’s missing for you to trust this in prod?&lt;/li&gt; &lt;li&gt;any footguns in the README/install flow?&lt;/li&gt; &lt;li&gt;would you use DB-defined commands, config-only, or both?&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Happy to answer questions. Roast the security model if something looks off, that’s useful.&lt;/p&gt; &lt;/div&gt;&lt;!-- SC_ON --&gt; &amp;#32; submitted by &amp;#32; &lt;a href=&quot;https://www.reddit.com/user/aliwesome&quot;&gt; /u/aliwesome &lt;/a&gt; &lt;br/&gt; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1v4o1tz/built_a_securityfirst_artisanshell_runner_for/&quot;&gt;[link]&lt;/a&gt;&lt;/span&gt; &amp;#32; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1v4o1tz/built_a_securityfirst_artisanshell_runner_for/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1v4o1tz</id><link href="https://www.reddit.com/r/PHP/comments/1v4o1tz/built_a_securityfirst_artisanshell_runner_for/" /><updated>2026-07-23T19:29:08+00:00</updated><published>2026-07-23T19:29:08+00:00</published><title>Built a security-first Artisan/shell runner for Laravel Nova 4 &amp; 5, looking for feedback</title></entry><entry><author><name>/u/kabirferro</name><uri>https://www.reddit.com/user/kabirferro</uri></author><category term="PHP" label="r/PHP"/><content type="html">&lt;!-- SC_OFF --&gt;&lt;div class=&quot;md&quot;&gt;&lt;p&gt;Hi everyone,&lt;/p&gt; &lt;p&gt;Like many PHP developers on Windows, I&amp;#39;ve tried several solutions over the years: WAMP, Laragon, manually configured Docker environments, WSL...&lt;/p&gt; &lt;p&gt;They are all valid solutions, but I always found something missing for my workflow.&lt;/p&gt; &lt;p&gt;The closest one for me was Herd: modern, fast and reliable. However, on Windows it still didn&amp;#39;t cover everything I needed.&lt;/p&gt; &lt;p&gt;So I decided to build my own environment from scratch.&lt;/p&gt; &lt;p&gt;The result is Dunebox, a free and portable PHP development environment for Windows. I&amp;#39;ve been using it daily for some time, and now I&amp;#39;d like to get feedback from other developers.&lt;/p&gt; &lt;p&gt;The idea is simple: a complete PHP stack in one folder, with multiple PHP versions, databases, local domains, HTTPS, development tools and project utilities already configured and working together.&lt;/p&gt; &lt;p&gt;I tried to focus on making it simple, portable and practical for real-world PHP projects, especially when dealing with different PHP versions or legacy applications.&lt;/p&gt; &lt;p&gt;A quick note about the executable: it is not digitally signed yet, so Windows SmartScreen may show a warning on the first launch. Just click &amp;quot;More info&amp;quot; and then &amp;quot;Run anyway&amp;quot;. This does not affect any functionality.&lt;/p&gt; &lt;p&gt;The project is completely free and I am not trying to sell anything. I would simply love to grow a small community around it and hear opinions from developers with different workflows.&lt;/p&gt; &lt;p&gt;What would you improve? What would make you consider using it, or what would stop you from using it?&lt;/p&gt; &lt;p&gt;All details, screenshots and documentation are available here:&lt;br/&gt; &lt;a href=&quot;https://dunebox.enesi.it/&quot;&gt;https://dunebox.enesi.it/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Cheers!&lt;/p&gt; &lt;/div&gt;&lt;!-- SC_ON --&gt; &amp;#32; submitted by &amp;#32; &lt;a href=&quot;https://www.reddit.com/user/kabirferro&quot;&gt; /u/kabirferro &lt;/a&gt; &lt;br/&gt; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1v4d6vo/i_built_a_portable_php_development_environment/&quot;&gt;[link]&lt;/a&gt;&lt;/span&gt; &amp;#32; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1v4d6vo/i_built_a_portable_php_development_environment/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1v4d6vo</id><link href="https://www.reddit.com/r/PHP/comments/1v4d6vo/i_built_a_portable_php_development_environment/" /><updated>2026-07-23T12:58:10+00:00</updated><published>2026-07-23T12:58:10+00:00</published><title>I built a portable PHP development environment for Windows and I'd like some feedback</title></entry><entry><author><name>/u/ArachnidDull4799</name><uri>https://www.reddit.com/user/ArachnidDull4799</uri></author><category term="PHP" label="r/PHP"/><content type="html">&lt;!-- SC_OFF --&gt;&lt;div class=&quot;md&quot;&gt;&lt;p&gt;Hi everyone,&lt;br/&gt; I recently needed to add content recommendations to a legacy project that still runs on PHP 7.2.&lt;br/&gt; Qdrant was a good fit, but the PHP clients I found required newer PHP versions. Upgrading the entire application wasn’t realistic in the short term, so I built a small Qdrant client myself.&lt;br/&gt; It supports:&lt;br/&gt; PHP 7.2+&lt;/p&gt; &lt;p&gt;collections and point operations&lt;/p&gt; &lt;p&gt;vector search and filters&lt;/p&gt; &lt;p&gt;batch search&lt;/p&gt; &lt;p&gt;recommendations&lt;/p&gt; &lt;p&gt;payload management and scrolling&lt;/p&gt; &lt;p&gt;Installation:&lt;br/&gt; composer require tenqz/qdrant&lt;/p&gt; &lt;p&gt;Repository:&lt;br/&gt; &lt;a href=&quot;https://github.com/tenqz/qdrant&quot;&gt;https://github.com/tenqz/qdrant&lt;/a&gt;&lt;/p&gt; &lt;p&gt;The main use cases I had in mind were semantic search, similar content or product recommendations, duplicate detection, automatic categorization, and adding basic RAG features to older PHP applications.&lt;br/&gt; The library only handles communication with Qdrant. Embeddings can come from OpenAI, Ollama, or any other local or hosted model.&lt;br/&gt; I’d appreciate feedback from PHP and Qdrant users:&lt;br/&gt; Is PHP 7.2 compatibility still useful for real-world projects?&lt;/p&gt; &lt;p&gt;Which Qdrant features would you expect from a PHP client?&lt;/p&gt; &lt;p&gt;Would you prefer PSR-18 support, or is a small cURL-based client easier to use?&lt;/p&gt; &lt;p&gt;Critical feedback is welcome.&lt;/p&gt; &lt;/div&gt;&lt;!-- SC_ON --&gt; &amp;#32; submitted by &amp;#32; &lt;a href=&quot;https://www.reddit.com/user/ArachnidDull4799&quot;&gt; /u/ArachnidDull4799 &lt;/a&gt; &lt;br/&gt; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1v44b8c/adding_vector_search_to_php_72_i_ended_up/&quot;&gt;[link]&lt;/a&gt;&lt;/span&gt; &amp;#32; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1v44b8c/adding_vector_search_to_php_72_i_ended_up/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1v44b8c</id><link href="https://www.reddit.com/r/PHP/comments/1v44b8c/adding_vector_search_to_php_72_i_ended_up/" /><updated>2026-07-23T05:13:41+00:00</updated><published>2026-07-23T05:13:41+00:00</published><title>Adding vector search to PHP 7.2: I ended up building a Qdrant client</title></entry><entry><author><name>/u/Efficient-Help4001</name><uri>https://www.reddit.com/user/Efficient-Help4001</uri></author><category term="PHP" label="r/PHP"/><content type="html">&amp;#32; submitted by &amp;#32; &lt;a href=&quot;https://www.reddit.com/user/Efficient-Help4001&quot;&gt; /u/Efficient-Help4001 &lt;/a&gt; &lt;br/&gt; &lt;span&gt;&lt;a href=&quot;/r/ClaudeAI/comments/1v45u1n/how_to_run_claude_for_hours_how_can_i_configure_a/&quot;&gt;[link]&lt;/a&gt;&lt;/span&gt; &amp;#32; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1v4b55l/how_to_run_claude_for_hours_how_can_i_configure_a/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1v4b55l</id><link href="https://www.reddit.com/r/PHP/comments/1v4b55l/how_to_run_claude_for_hours_how_can_i_configure_a/" /><updated>2026-07-23T11:26:35+00:00</updated><published>2026-07-23T11:26:35+00:00</published><title>How to run claude for hours? How can I configure a VPS-based HERMES agent using Claude CLI to run continuously (24/7) and autonomously improve my project without stopping after 10–20 minutes or requiring additional user prompts/permissions, so it keeps generating tasks, executing them, and iterating</title></entry><entry><author><name>/u/NoseStock4944</name><uri>https://www.reddit.com/user/NoseStock4944</uri></author><category term="PHP" label="r/PHP"/><content type="html">&lt;!-- SC_OFF --&gt;&lt;div class=&quot;md&quot;&gt;&lt;p&gt;I&amp;#39;ve been working on a PHP-based content management system and wanted to reduce the amount of repetitive work involved in publishing SEO articles.&lt;/p&gt; &lt;p&gt;Instead of using multiple tools manually, I built a workflow around Claude and PHP that automates most of the process.&lt;/p&gt; &lt;p&gt;Current workflow:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Receive a content topic&lt;/li&gt; &lt;li&gt;Generate a structured article outline&lt;/li&gt; &lt;li&gt;Generate long-form content with Claude&lt;/li&gt; &lt;li&gt;Validate formatting and SEO requirements&lt;/li&gt; &lt;li&gt;Generate meta title and meta description&lt;/li&gt; &lt;li&gt;Create URL slug automatically&lt;/li&gt; &lt;li&gt;Suggest internal links&lt;/li&gt; &lt;li&gt;Store everything in MySQL&lt;/li&gt; &lt;li&gt;Publish or save as draft through the CMS&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The project is built using:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;PHP 8&lt;/li&gt; &lt;li&gt;MySQL&lt;/li&gt; &lt;li&gt;CKEditor 5&lt;/li&gt; &lt;li&gt;Claude API&lt;/li&gt; &lt;li&gt;Bootstrap 5&lt;/li&gt; &lt;li&gt;JavaScript/jQuery&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Some things I learned while building it:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Prompt engineering matters much more than I expected.&lt;/li&gt; &lt;li&gt;Separating generation and validation into different steps significantly improved output quality.&lt;/li&gt; &lt;li&gt;Allowing manual review before publishing catches most AI mistakes.&lt;/li&gt; &lt;li&gt;Caching prompts and responses reduced API costs.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;I&amp;#39;m now working on adding:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Automatic image generation&lt;/li&gt; &lt;li&gt;AI-powered content scoring&lt;/li&gt; &lt;li&gt;Schema markup generation&lt;/li&gt; &lt;li&gt;Multi-language publishing&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;I&amp;#39;d love to hear how others are integrating LLMs into their PHP applications. Are you using Claude, GPT, Gemini, or local models?&lt;/p&gt; &lt;/div&gt;&lt;!-- SC_ON --&gt; &amp;#32; submitted by &amp;#32; &lt;a href=&quot;https://www.reddit.com/user/NoseStock4944&quot;&gt; /u/NoseStock4944 &lt;/a&gt; &lt;br/&gt; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1v4c1tn/i_built_an_ai_content_workflow_using_claude_php/&quot;&gt;[link]&lt;/a&gt;&lt;/span&gt; &amp;#32; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1v4c1tn/i_built_an_ai_content_workflow_using_claude_php/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1v4c1tn</id><link href="https://www.reddit.com/r/PHP/comments/1v4c1tn/i_built_an_ai_content_workflow_using_claude_php/" /><updated>2026-07-23T12:08:15+00:00</updated><published>2026-07-23T12:08:15+00:00</published><title>I built an AI content workflow using Claude + PHP to automate blog publishing</title></entry><entry><author><name>/u/EGreg</name><uri>https://www.reddit.com/user/EGreg</uri></author><category term="PHP" label="r/PHP"/><content type="html">&lt;!-- SC_OFF --&gt;&lt;div class=&quot;md&quot;&gt;&lt;h1&gt;Qbix Server&lt;/h1&gt; &lt;p&gt;Yesterday, I posted on Reddit about a web server I launched that&amp;#39;s written in pure userland PHP, managed its own preforked workers, and removed the need for NGINX and PHP-FPM.&lt;/p&gt; &lt;p&gt;It was already able to run 10x more concurrent workers (e.g. 1600 workers on an 8GB server).&lt;/p&gt; &lt;p&gt;The biggest bottleneck in PHP hosting is *memory*. Each php-fpm worker loads your entire framework independently: 30–60MB per worker. On an 8GB server, that&amp;#39;s ~160 workers max. That&amp;#39;s your ceiling for concurrent PHP requests.&lt;/p&gt; &lt;p&gt;Well, Qbix Server forks workers *after* preloading your classes. Thanks to copy-on-write from the operating system, all that shared code (framework, config, autoloader) uses memory only once. Each worker adds maybe 3-6MB for its per-request data.&lt;/p&gt; &lt;p&gt;This means you get to run 10x more workers, and each worker actually loads much *faster* because you don&amp;#39;t have to bootstrap your entire framework, config, etc. on every request.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://github.com/Qbix/webserver&quot;&gt;&lt;strong&gt;https://github.com/Qbix/webserver&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt; &lt;h1&gt;But wait... it got faster.&lt;/h1&gt; &lt;p&gt;Yesterday, some people were complaining that a userland-PHP server was &amp;quot;only&amp;quot; 70% as fast as NGINX for serving static files. Well, it&amp;#39;s 24 hours later, and I&amp;#39;m back, baby! After caching more, it turns out that it&amp;#39;s now 25-35% FASTER than NGINX even for static files (as long as you keepalive connections). &lt;/p&gt; &lt;p&gt;Don&amp;#39;t believe me? Run the benchmarks. It comes with a test suite now.&lt;/p&gt; &lt;h1&gt;But wait... it now supports sockets&lt;/h1&gt; &lt;p&gt;Yes, it is wire-compatible with &lt;a href=&quot;http://socket.io&quot;&gt;socket.io&lt;/a&gt;, and bundles it out of the box (no need for npm). Now you can just drop PHP files into folders, in order to:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;p&gt;Handle HTTP Requests. (Cleanup after request is handled.)&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;Handle Web Sockets. (Long-lived, cleanup after disconnect.)&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;Handle Rooms. (Long-lived, cleanup after last websocket leaves.)&lt;/p&gt;&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;In my opinion, the coolest thing is that this retains all the things that made PHP great: &lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;p&gt;Shared-nothing. No way to have memory or secrets leak between requests.&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;Normie-friendly. Just drop files into folders and things just work! No need for hot-reload even. Not even for websockets and rooms -- the old handler will work for the old connections, while the new one is loaded for the new ones.&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;Sequential processing, sure it means you occasionally miss out on fanning out concurrent I/O races, but it&amp;#39;s much easier to understand the code.&lt;/p&gt;&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;Give it a try! It&amp;#39;s MIT licensed. Enjoy 😄 &lt;/p&gt; &lt;p&gt;&lt;strong&gt;Who this is for:&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;PHP Developers who want to host things&lt;/li&gt; &lt;li&gt;Normies who don&amp;#39;t want to install and configure apache/nginx/varnish/go/ssl certificates/mysql/etc.&lt;/li&gt; &lt;li&gt;People who just get the standalone binary and can host on their computer, without the internet even.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;This was taken from the much larger all-in-one PHP platform:&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://github.com/Qbix/Platform&quot;&gt;&lt;strong&gt;https://github.com/Qbix/Platform&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt; &lt;/div&gt;&lt;!-- SC_ON --&gt; &amp;#32; submitted by &amp;#32; &lt;a href=&quot;https://www.reddit.com/user/EGreg&quot;&gt; /u/EGreg &lt;/a&gt; &lt;br/&gt; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1v2xe3w/pure_php_websocket_server_serves_10x_more/&quot;&gt;[link]&lt;/a&gt;&lt;/span&gt; &amp;#32; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1v2xe3w/pure_php_websocket_server_serves_10x_more/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1v2xe3w</id><link href="https://www.reddit.com/r/PHP/comments/1v2xe3w/pure_php_websocket_server_serves_10x_more/" /><updated>2026-07-21T22:26:33+00:00</updated><published>2026-07-21T22:26:33+00:00</published><title>Pure PHP web+socket server, serves 10x more concurrent PHP than NginX+FPM</title></entry><entry><author><name>/u/HolyPad</name><uri>https://www.reddit.com/user/HolyPad</uri></author><category term="PHP" label="r/PHP"/><content type="html">&amp;#32; submitted by &amp;#32; &lt;a href=&quot;https://www.reddit.com/user/HolyPad&quot;&gt; /u/HolyPad &lt;/a&gt; &lt;br/&gt; &lt;span&gt;&lt;a href=&quot;https://laraplugins.io/lists/ai-ready-plugins&quot;&gt;[link]&lt;/a&gt;&lt;/span&gt; &amp;#32; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1v41i7f/a_collection_of_laravel_plugins_integrating_with/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1v41i7f</id><link href="https://www.reddit.com/r/PHP/comments/1v41i7f/a_collection_of_laravel_plugins_integrating_with/" /><updated>2026-07-23T02:55:41+00:00</updated><published>2026-07-23T02:55:41+00:00</published><title>A collection of Laravel plugins integrating with the Laravel AI SDK</title></entry><entry><author><name>/u/elizabethn</name><uri>https://www.reddit.com/user/elizabethn</uri></author><category term="PHP" label="r/PHP"/><content type="html">&lt;!-- SC_OFF --&gt;&lt;div class=&quot;md&quot;&gt;&lt;p&gt;In an effort to increase transparency about the things we work on, we are happy to start sharing quarterly progress reports with the community. 🚀 &lt;/p&gt; &lt;/div&gt;&lt;!-- SC_ON --&gt; &amp;#32; submitted by &amp;#32; &lt;a href=&quot;https://www.reddit.com/user/elizabethn&quot;&gt; /u/elizabethn &lt;/a&gt; &lt;br/&gt; &lt;span&gt;&lt;a href=&quot;https://thephp.foundation/blog/2026/07/21/quarterly-report-q2-2026/&quot;&gt;[link]&lt;/a&gt;&lt;/span&gt; &amp;#32; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1v2n7hw/quarterly_progress_report_q2_2026/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1v2n7hw</id><link href="https://www.reddit.com/r/PHP/comments/1v2n7hw/quarterly_progress_report_q2_2026/" /><updated>2026-07-21T16:21:07+00:00</updated><published>2026-07-21T16:21:07+00:00</published><title>Quarterly Progress Report - Q2 2026</title></entry><entry><author><name>/u/TrainSensitive6646</name><uri>https://www.reddit.com/user/TrainSensitive6646</uri></author><category term="PHP" label="r/PHP"/><content type="html">&lt;!-- SC_OFF --&gt;&lt;div class=&quot;md&quot;&gt;&lt;p&gt;Hi everyone,&lt;/p&gt; &lt;p&gt;Over the past few months, we&amp;#39;ve been building &lt;strong&gt;TadreebLMS&lt;/strong&gt;, an open-source Learning Management System focused on enterprise and corporate training.&lt;/p&gt; &lt;p&gt;We&amp;#39;ve recently completed a major restructuring of the project&lt;/p&gt; &lt;p&gt;How can we use AI in our product and process to speedup the development, process and customer support ?&lt;/p&gt; &lt;p&gt;The project is built with:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;PHP / Laravel&lt;/li&gt; &lt;li&gt;MySQL&lt;/li&gt; &lt;li&gt;Bootstrap / JavaScript&lt;/li&gt; &lt;li&gt;Docker&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;GitHub:&lt;br/&gt; &lt;a href=&quot;https://github.com/Tadreeb-LMS/tadreeblms&quot;&gt;https://github.com/Tadreeb-LMS/tadreeblms&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Issues:&lt;br/&gt; &lt;a href=&quot;https://github.com/Tadreeb-LMS/tadreeblms/issues&quot;&gt;https://github.com/Tadreeb-LMS/tadreeblms/issues&lt;/a&gt;&lt;/p&gt; &lt;p&gt;We have a huge roadmap like SCRUM Integration, UI upgrade as per FIGMA, Gap Analysis Module Integration, Integrations with HR Systems etc...&lt;/p&gt; &lt;p&gt;Please anyone experience or architect in PHP can give recommendation on best practices, gaps in the system etc..&lt;/p&gt; &lt;/div&gt;&lt;!-- SC_ON --&gt; &amp;#32; submitted by &amp;#32; &lt;a href=&quot;https://www.reddit.com/user/TrainSensitive6646&quot;&gt; /u/TrainSensitive6646 &lt;/a&gt; &lt;br/&gt; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1v3p8oe/opensource_phplaravel_lms_system_feedback/&quot;&gt;[link]&lt;/a&gt;&lt;/span&gt; &amp;#32; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1v3p8oe/opensource_phplaravel_lms_system_feedback/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1v3p8oe</id><link href="https://www.reddit.com/r/PHP/comments/1v3p8oe/opensource_phplaravel_lms_system_feedback/" /><updated>2026-07-22T18:48:48+00:00</updated><published>2026-07-22T18:48:48+00:00</published><title>Opensource PHP/Laravel LMS system feedback</title></entry><entry><author><name>/u/n3rveous</name><uri>https://www.reddit.com/user/n3rveous</uri></author><category term="PHP" label="r/PHP"/><content type="html">&lt;!-- SC_OFF --&gt;&lt;div class=&quot;md&quot;&gt;&lt;p&gt;I wanted something like pyenv or nvm but for PHP. Couldn&amp;#39;t find one that actually works the way those do — resolve deps, build from source, switch versions cleanly. The existing options either wrap pre-built binaries or half-ass the dependency resolution.&lt;/p&gt; &lt;p&gt;So I built phpv: &lt;a href=&quot;https://github.com/supanadit/phpv&quot;&gt;https://github.com/supanadit/phpv&lt;/a&gt;&lt;/p&gt; &lt;p&gt;`phpv install 8.4` checks your system, builds whatever deps are missing from source, compiles PHP with the right flags. 25 default extensions, out of the box. Supports PHP 4.x through 8.x, version switching, per-project pinning via .php-version, PECL extensions, PHAR tools, portable bundles you can export and import across machines. Linux amd64/arm64 + macOS Intel/Apple Silicon.&lt;/p&gt; &lt;p&gt;Install:&lt;/p&gt; &lt;p&gt;curl -fsSL &lt;a href=&quot;https://raw.githubusercontent.com/supanadit/phpv/main/install.sh&quot;&gt;https://raw.githubusercontent.com/supanadit/phpv/main/install.sh&lt;/a&gt; | bash&lt;/p&gt; &lt;p&gt;Then:&lt;/p&gt; &lt;p&gt;eval &amp;quot;$(phpv init bash)&amp;quot;&lt;/p&gt; &lt;p&gt;phpv install 8&lt;/p&gt; &lt;p&gt;Honest con: it compiles from source, so first install is slow. There&amp;#39;s no pre-built PHP binary cache yet — working on portable musl-static bundles so you can skip compiling entirely, but that&amp;#39;s not done. What&amp;#39;s there now works, it just takes a few minutes on first run.&lt;/p&gt; &lt;p&gt;It works. I&amp;#39;ve been using it on Ubuntu and macOS daily. But I know there are distros and edge cases I haven&amp;#39;t hit — Alpine, Arch, weird setups. If you&amp;#39;re on any of those, try it and file an issue if it breaks. I want to know.&lt;/p&gt; &lt;p&gt;Repo: &lt;a href=&quot;https://github.com/supanadit/phpv&quot;&gt;https://github.com/supanadit/phpv&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Issues: &lt;a href=&quot;https://github.com/supanadit/phpv/issues&quot;&gt;https://github.com/supanadit/phpv/issues&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Break it and tell me.&lt;/p&gt; &lt;/div&gt;&lt;!-- SC_ON --&gt; &amp;#32; submitted by &amp;#32; &lt;a href=&quot;https://www.reddit.com/user/n3rveous&quot;&gt; /u/n3rveous &lt;/a&gt; &lt;br/&gt; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1v3cmd4/theres_no_pyenvnvm_equivalent_for_php_that_works/&quot;&gt;[link]&lt;/a&gt;&lt;/span&gt; &amp;#32; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1v3cmd4/theres_no_pyenvnvm_equivalent_for_php_that_works/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1v3cmd4</id><link href="https://www.reddit.com/r/PHP/comments/1v3cmd4/theres_no_pyenvnvm_equivalent_for_php_that_works/" /><updated>2026-07-22T10:51:32+00:00</updated><published>2026-07-22T10:51:32+00:00</published><title>There's no pyenv/nvm equivalent for PHP that works out of the box, so I built one</title></entry><entry><author><name>/u/lizzyman04</name><uri>https://www.reddit.com/user/lizzyman04</uri></author><category term="PHP" label="r/PHP"/><content type="html">&lt;!-- SC_OFF --&gt;&lt;div class=&quot;md&quot;&gt;&lt;p&gt;A few weeks ago I posted a &lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1u3yjpi/i_built_a_zerodependency_php_framework_with/&quot;&gt;small framework&lt;/a&gt; here and got a lot of honest feedback. The clearest point, from several people, was that the file-based routing was the interesting part and would be more useful as a standalone library than baked into a whole framework. So I built that.&lt;/p&gt; &lt;p&gt;&lt;code&gt;file-router&lt;/code&gt; is a zero-dependency package that maps your directory structure to routes, Next.js style: &lt;code&gt;users/[id].php&lt;/code&gt; → &lt;code&gt;/users/{id}&lt;/code&gt;, &lt;code&gt;[...slug]&lt;/code&gt; for catch-all, route groups, compiled route cache. PHP 8.1+.&lt;/p&gt; &lt;p&gt;The part I think is actually useful: it&amp;#39;s framework-agnostic. It runs standalone, but there are thin adapters so it plugs into Laravel (registers as native routes, inherits middleware/container) or Symfony (as a custom route loader, uses Symfony&amp;#39;s own matcher and cache). So you can get file-based routing without adopting a new framework.&lt;/p&gt; &lt;p&gt;It&amp;#39;s tested across PHP 8.1–8.5, and the migrations in the example template are verified on SQLite, MySQL and Postgres (not assumed; actually run end to end).&lt;/p&gt; &lt;p&gt;Repo: &lt;a href=&quot;https://github.com/lizzyman04/file-router&quot;&gt;github.com/lizzyman04/file-router&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Genuinely looking for feedback again, especially on the adapter approach. Does registering into the host framework&amp;#39;s own router feel right to you, or would you expect it to work differently?&lt;/p&gt; &lt;/div&gt;&lt;!-- SC_ON --&gt; &amp;#32; submitted by &amp;#32; &lt;a href=&quot;https://www.reddit.com/user/lizzyman04&quot;&gt; /u/lizzyman04 &lt;/a&gt; &lt;br/&gt; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1v2m919/i_extracted_filebased_routing_into_a_standalone/&quot;&gt;[link]&lt;/a&gt;&lt;/span&gt; &amp;#32; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1v2m919/i_extracted_filebased_routing_into_a_standalone/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1v2m919</id><link href="https://www.reddit.com/r/PHP/comments/1v2m919/i_extracted_filebased_routing_into_a_standalone/" /><updated>2026-07-21T15:47:03+00:00</updated><published>2026-07-21T15:47:03+00:00</published><title>I extracted file-based routing into a standalone PHP package (works in Laravel and Symfony too)</title></entry><entry><author><name>/u/Embarrassed-Total609</name><uri>https://www.reddit.com/user/Embarrassed-Total609</uri></author><category term="PHP" label="r/PHP"/><content type="html">&lt;!-- SC_OFF --&gt;&lt;div class=&quot;md&quot;&gt;&lt;p&gt;recently I released xphp v0.3.0 -- and since a language is only as alive as its ecosystem, I also released:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;language server&lt;/li&gt; &lt;li&gt;phpstorm and vscode plugins&lt;/li&gt; &lt;li&gt;collections: the first xphp library, using generics and variance-aware.&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;I wrote the whole story up here: &lt;a href=&quot;https://math3usmartins.hashnode.dev/a-language-is-only-as-alive-as-its-ecosystem&quot;&gt;https://math3usmartins.hashnode.dev/a-language-is-only-as-alive-as-its-ecosystem&lt;/a&gt;&lt;/p&gt; &lt;p&gt;I&amp;#39;m looking for criticism and skeptical feedback as much as I&amp;#39;m looking for contributors. &lt;code&gt;xphp&lt;/code&gt; can&amp;#39;t / shouldn&amp;#39;t be maintained by a single person.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;p.s.&lt;/strong&gt; xphp is a superset of php. meaning it compiles into php like typescript compiles into javascript. the most relevant feature so far is generics with variance support. but it also supports closure signature types and other features are coming.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;important:&lt;/strong&gt; xphp is part of the php ecosystem by design. its goal is to help the ecosystem grow bigger and stronger. find more about that at &lt;a href=&quot;https://github.com/xphp-lang/xphp/blob/main/README.md#ecosystem-and-community-first&quot;&gt;https://github.com/xphp-lang/xphp/blob/main/README.md#ecosystem-and-community-first&lt;/a&gt;&lt;/p&gt; &lt;/div&gt;&lt;!-- SC_ON --&gt; &amp;#32; submitted by &amp;#32; &lt;a href=&quot;https://www.reddit.com/user/Embarrassed-Total609&quot;&gt; /u/Embarrassed-Total609 &lt;/a&gt; &lt;br/&gt; &lt;span&gt;&lt;a href=&quot;https://math3usmartins.hashnode.dev/a-language-is-only-as-alive-as-its-ecosystem&quot;&gt;[link]&lt;/a&gt;&lt;/span&gt; &amp;#32; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1v2z2y8/xphp_v030_a_language_is_only_as_alive_as_its/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1v2z2y8</id><link href="https://www.reddit.com/r/PHP/comments/1v2z2y8/xphp_v030_a_language_is_only_as_alive_as_its/" /><updated>2026-07-21T23:35:17+00:00</updated><published>2026-07-21T23:35:17+00:00</published><title>xphp v0.3.0: A language is only as alive as its ecosystem</title></entry></feed>