<?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-06-24T21:58:17+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/1uccclg/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/1uccclg/weekly_help_thread/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1uccclg</id><link href="https://www.reddit.com/r/PHP/comments/1uccclg/weekly_help_thread/" /><updated>2026-06-22T06:00:19+00:00</updated><published>2026-06-22T06:00:19+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;In this monthly thread you can share whatever code or projects you&amp;#39;re working on, ask for reviews, get people&amp;#39;s input and general thoughts, … anything goes as long as it&amp;#39;s PHP related. &lt;/p&gt; &lt;p&gt;Let&amp;#39;s make this a place where people are encouraged to share their work, and where we can learn from each other 😁&lt;/p&gt; &lt;p&gt;Link to the previous edition: &lt;a href=&quot;/u/brendt_gd&quot;&gt;/u/brendt_gd&lt;/a&gt; should provide a link&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/1u9vul4/pitch_your_project/&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/1u9vul4/pitch_your_project/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1u9vul4</id><link href="https://www.reddit.com/r/PHP/comments/1u9vul4/pitch_your_project/" /><updated>2026-06-19T08:00:29+00:00</updated><published>2026-06-19T08:00:29+00:00</published><title>Pitch Your Project 🐘</title></entry><entry><author><name>/u/BrilliantImpossible8</name><uri>https://www.reddit.com/user/BrilliantImpossible8</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;I’ve been using the Rust-based typos CLI for spellchecking codebases, but wanted a setup that fits more naturally into PHP projects and CI pipelines alongside tools like Pint, PHPStan, Rector, etc. The primary use case is CI - no global installs required on runners, and consistent spellchecking across teams.&lt;/p&gt; &lt;p&gt;To solve this, I built a lightweight wrapper that ships with the correct platform binary, so nothing needs to be installed globally. The actual spellchecking is handled by the Rust &lt;a href=&quot;https://crates.io/crates/typos-cli&quot;&gt;typos&lt;/a&gt; project, which does all the heavy lifting.&lt;/p&gt; &lt;p&gt;Feedback welcome, especially from anyone already running typos in PHP projects. Cheers!&lt;/p&gt; &lt;p&gt;GitHub: &lt;a href=&quot;https://github.com/chr15k/php-typos&quot;&gt;https://github.com/chr15k/php-typos&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/BrilliantImpossible8&quot;&gt; /u/BrilliantImpossible8 &lt;/a&gt; &lt;br/&gt; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1uefthd/tired_of_typos_slipping_through_code_review_built/&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/1uefthd/tired_of_typos_slipping_through_code_review_built/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1uefthd</id><link href="https://www.reddit.com/r/PHP/comments/1uefthd/tired_of_typos_slipping_through_code_review_built/" /><updated>2026-06-24T14:56:18+00:00</updated><published>2026-06-24T14:56:18+00:00</published><title>Tired of typos slipping through code review - built a wrapper around Rust typos-cli</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;If you&amp;#39;re curious about what our Ecosystem Security Team has been up to the past month, you&amp;#39;re in luck! Volker Dusch has provided an update in our recent blog post.&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/06/23/one-month-of-ecosystem-security-engineering/&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/1udeojm/one_month_of_ecosystem_security_engineering/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1udeojm</id><link href="https://www.reddit.com/r/PHP/comments/1udeojm/one_month_of_ecosystem_security_engineering/" /><updated>2026-06-23T11:36:36+00:00</updated><published>2026-06-23T11:36:36+00:00</published><title>One Month of Ecosystem Security Engineering</title></entry><entry><author><name>/u/nunomaduro</name><uri>https://www.reddit.com/user/nunomaduro</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/nunomaduro&quot;&gt; /u/nunomaduro &lt;/a&gt; &lt;br/&gt; &lt;span&gt;&lt;a href=&quot;https://youtu.be/FBtPOg5GxYA?si=k2xfi-twwsIwczhH&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/1uedcr8/how_to_contribute_to_phps_source_code/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1uedcr8</id><link href="https://www.reddit.com/r/PHP/comments/1uedcr8/how_to_contribute_to_phps_source_code/" /><updated>2026-06-24T13:21:01+00:00</updated><published>2026-06-24T13:21:01+00:00</published><title>How to Contribute to PHP’s Source Code</title></entry><entry><author><name>/u/funkycitizen</name><uri>https://www.reddit.com/user/funkycitizen</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;The firm I work for has a very old PHP codebase based on ZF1. It works but its got a lot of dark corners and tech debt that I hear vague mystical things about.&lt;/p&gt; &lt;p&gt;Deployment is complicated. Its a SASS app with a lot of individual customer databases and no way to deploy to a single pilot customer after a risky refactoring ... all customers are at risk of regressions during a deploy, and there is no automated testing at all to mitigate those risks.&lt;/p&gt; &lt;p&gt;The dev team is weak and dependent on a contractor who is the big giant head.&lt;/p&gt; &lt;p&gt;We need to find a super strong developer to replace the contractor who can stand up to a couple of strong personalities, take total ownership and responsibility for unwinding tech debt, implementing new features, and building a much strong development culture.&lt;/p&gt; &lt;p&gt;So far all resumes and interviews have been very underwhelming and I&amp;#39;m wondering whether the broader PHP ecosystem actually contains developers of this seniority simply due to lack of PHP in this market segment.&lt;/p&gt; &lt;p&gt;I may be deep in the weeds in thinking that PHP is not applied to big enterprise-scale SASS apps, but that is my intuition and I&amp;#39;m looking for some opinions on the matter to help me decide how to modify my recuiting strategy or even my long term architectural plans.&lt;/p&gt; &lt;p&gt;Any thoughts on this?&lt;/p&gt; &lt;p&gt;EDIT: I should have considered that this would be taken as a job post so I must say this is USA based. Its is full-time remote, but you gotta be based in the USA. Sorry!&lt;/p&gt; &lt;p&gt;EDIT: I&amp;#39;m overwhelmed by the outreach. I will slowly work through all the DMs and replies during the day.&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/funkycitizen&quot;&gt; /u/funkycitizen &lt;/a&gt; &lt;br/&gt; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1uculok/is_it_hard_to_find_very_senior_php_developers/&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/1uculok/is_it_hard_to_find_very_senior_php_developers/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1uculok</id><link href="https://www.reddit.com/r/PHP/comments/1uculok/is_it_hard_to_find_very_senior_php_developers/" /><updated>2026-06-22T19:37:55+00:00</updated><published>2026-06-22T19:37:55+00:00</published><title>Is it hard to find very senior PHP developers with experience in complex, highly regulated environments?</title></entry><entry><author><name>/u/gaborj</name><uri>https://www.reddit.com/user/gaborj</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/gaborj&quot;&gt; /u/gaborj &lt;/a&gt; &lt;br/&gt; &lt;span&gt;&lt;a href=&quot;https://wiki.php.net/rfc/duration_class&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/1ubzzsr/php_rfc_duration_class/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1ubzzsr</id><link href="https://www.reddit.com/r/PHP/comments/1ubzzsr/php_rfc_duration_class/" /><updated>2026-06-21T20:13:51+00:00</updated><published>2026-06-21T20:13:51+00:00</published><title>PHP RFC: Duration class</title></entry><entry><author><name>/u/Mastodont_XXX</name><uri>https://www.reddit.com/user/Mastodont_XXX</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 noticed that, after a hiatus of about a year, new releases of Zephir have appeared (mainly bug fixes, but also new features, such as support for variadic functions/methods). Do you think it makes sense to revive this language for developing PHP extensions?&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://github.com/zephir-lang/zephir&quot;&gt;https://github.com/zephir-lang/zephir&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/Mastodont_XXX&quot;&gt; /u/Mastodont_XXX &lt;/a&gt; &lt;br/&gt; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1uccdcj/new_zephir_releases/&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/1uccdcj/new_zephir_releases/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1uccdcj</id><link href="https://www.reddit.com/r/PHP/comments/1uccdcj/new_zephir_releases/" /><updated>2026-06-22T06:01:11+00:00</updated><published>2026-06-22T06:01:11+00:00</published><title>New Zephir releases</title></entry><entry><author><name>/u/Ilia0001</name><uri>https://www.reddit.com/user/Ilia0001</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;DuckDB is the in-process analytical database, roughly SQLite for OLAP work: columnar, vectorized, no server, one file. PHP has shipped PDO_SQLite in core for twenty years but had nothing equivalent for DuckDB. If you wanted DuckDB from PHP, your options were FFI against its C API or shelling out to the CLI, neither of which looks anything like the rest of your data layer.&lt;/p&gt; &lt;p&gt;So I wrote pdo_duckdb, a native PDO driver. You connect with a DSN and use the same PDO API you already use for SQLite, MySQL, and Postgres: prepared statements, positional and named params, transactions, foreach over results.&lt;/p&gt; &lt;p&gt;&lt;code&gt;php $db = new PDO(&amp;#39;duckdb:/path/to/analytics.duckdb&amp;#39;); $stmt = $db-&amp;gt;prepare(&amp;#39;SELECT region, SUM(amount) AS total FROM sales WHERE year = ? GROUP BY region&amp;#39;); $stmt-&amp;gt;execute([2026]); foreach ($stmt as $row) { /* ... */ } &lt;/code&gt;&lt;/p&gt; &lt;p&gt;A few things beyond the standard surface:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;a native Appender for bulk loads, much faster than row-by-row INSERT, and it accepts PHP arrays for LIST/STRUCT/MAP columns&lt;/li&gt; &lt;li&gt;result streaming for large scans via &lt;code&gt;PDO::DUCKDB_ATTR_UNBUFFERED&lt;/code&gt;, so a huge SELECT isn&amp;#39;t bounded by memory&lt;/li&gt; &lt;li&gt;DuckDB&amp;#39;s own extensions (httpfs, json, and so on) load through plain SQL, no special API&lt;/li&gt; &lt;li&gt;when &lt;code&gt;open_basedir&lt;/code&gt; is set, the driver disables DuckDB&amp;#39;s SQL-level file access (read_csv, COPY, ATTACH) so the sandbox holds at the SQL layer, not just for the database file path&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;It&amp;#39;s honest-early. The query path, appender, transactions, and type decoding all work and are tested, but it&amp;#39;s young, and I haven&amp;#39;t published benchmarks because the speed here is DuckDB&amp;#39;s and the driver&amp;#39;s job is to stay out of its way. lastInsertId isn&amp;#39;t supported, since DuckDB has no rowid.&lt;/p&gt; &lt;p&gt;This is also the first PDO driver I&amp;#39;ve written since I was one of the original authors of PDO back around 2005. The driver model itself has barely changed; the world around it has. The thing that actually cost me a release was static-linking DuckDB&amp;#39;s C++ runtime into a C extension so the prebuilt Linux binary loads on a clean host. PIE ships prebuilt binaries now, so install is just:&lt;/p&gt; &lt;p&gt;&lt;code&gt; pie install iliaal/pdo_duckdb &lt;/code&gt;&lt;/p&gt; &lt;p&gt;Free, BSD-3 licensed. Repo: &lt;a href=&quot;https://github.com/iliaal/pdo_duckdb&quot;&gt;https://github.com/iliaal/pdo_duckdb&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Longer write-up with the details: &lt;a href=&quot;https://ilia.ws/blog/pdo-duckdb-a-pdo-driver-for-duckdb&quot;&gt;https://ilia.ws/blog/pdo-duckdb-a-pdo-driver-for-duckdb&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Happy to answer questions, and I&amp;#39;d welcome feedback from anyone running DuckDB for analytics off a PHP stack.&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/Ilia0001&quot;&gt; /u/Ilia0001 &lt;/a&gt; &lt;br/&gt; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1ubwh6i/pdo_duckdb_a_pdo_driver_for_duckdb_and_my_first/&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/1ubwh6i/pdo_duckdb_a_pdo_driver_for_duckdb_and_my_first/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1ubwh6i</id><link href="https://www.reddit.com/r/PHP/comments/1ubwh6i/pdo_duckdb_a_pdo_driver_for_duckdb_and_my_first/" /><updated>2026-06-21T17:52:30+00:00</updated><published>2026-06-21T17:52:30+00:00</published><title>pdo_duckdb: a PDO driver for DuckDB, and my first PDO driver in 15+ years</title></entry><entry><author><name>/u/rc0604</name><uri>https://www.reddit.com/user/rc0604</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 everyone, I just wanted to share that I finally able to finished building the entire Hibla Async Database Ecosystem..&lt;/p&gt; &lt;p&gt;Sqlite Client: &lt;a href=&quot;https://github.com/hiblaphp/sqlite&quot;&gt;https://github.com/hiblaphp/sqlite&lt;/a&gt;&lt;br/&gt; Mysql Client: &lt;a href=&quot;https://github.com/hiblaphp/mysql&quot;&gt;https://github.com/hiblaphp/mysql&lt;/a&gt;&lt;br/&gt; PostgreSQL Client: &lt;a href=&quot;https://github.com/hiblaphp/postgres&quot;&gt;https://github.com/hiblaphp/postgres&lt;/a&gt;&lt;br/&gt; Standalone Query Builder: &lt;a href=&quot;https://github.com/hiblaphp/query-builder&quot;&gt;https://github.com/hiblaphp/query-builder&lt;/a&gt;&lt;br/&gt; Schema Manager and CLI tooling extension library for the query builder: &lt;a href=&quot;https://github.com/hiblaphp/schema-manager&quot;&gt;https://github.com/hiblaphp/schema-manager&lt;/a&gt;&lt;br/&gt; Meta-package for Hibla database ecosystem: &lt;a href=&quot;https://github.com/hiblaphp/database&quot;&gt;https://github.com/hiblaphp/database&lt;/a&gt;&lt;/p&gt; &lt;p&gt;With these pieces finally in place, I can now focus on building a high-performance, multi-core RFC compliant HTTP server designed to take full advantage of the entire Hibla stack.&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/rc0604&quot;&gt; /u/rc0604 &lt;/a&gt; &lt;br/&gt; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1ucjudv/hibla_database_chapter_completed/&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/1ucjudv/hibla_database_chapter_completed/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1ucjudv</id><link href="https://www.reddit.com/r/PHP/comments/1ucjudv/hibla_database_chapter_completed/" /><updated>2026-06-22T12:56:31+00:00</updated><published>2026-06-22T12:56:31+00:00</published><title>Hibla Database Chapter Completed</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">&lt;!-- SC_OFF --&gt;&lt;div class=&quot;md&quot;&gt;&lt;p&gt;Running a PHP app that processes a lot of background work? Here is what happened when my 8 GB Hetzner VPS hit its limit and what actually fixed it.&lt;/p&gt; &lt;p&gt;The app: &lt;a href=&quot;http://LaraPlugins.io&quot;&gt;LaraPlugins.io&lt;/a&gt;, a PHP 8.5 + Laravel Octane + FrankenPHP stack with Horizon workers running health checks, GitHub syncs, and package indexing 24/7.&lt;/p&gt; &lt;p&gt;The problems were embarrassingly basic once I looked:&lt;/p&gt; &lt;p&gt;12 Horizon workers with unlimited job processing, each grabbing 500 MB. Set maxJobs to 100 per worker so memory gets released regularly. Combined memory ceiling dropped by ~2 GB.&lt;/p&gt; &lt;p&gt;One queue job type dispatching 50,000 individual HTTP calls to Cloudflare every week. Replaced it with a Redis set + bulk API approach. One self-rescheduling job handles the entire batch now. The Redis set deduplicates naturally.&lt;/p&gt; &lt;p&gt;MySQL sort buffer was too small for sorting-heavy queries. The default sort_buffer_size causes disk-based sorts when you query 76,000 rows by downloads, stars, or health score. A single config bump in the Docker Compose file fixed it.&lt;/p&gt; &lt;p&gt;A JSON blob column loaded on every query when most queries never read it. Global scope to exclude the column by default, load it explicitly only when needed.&lt;/p&gt; &lt;p&gt;GitHub API rate limits causing crash-retry loops. Added explicit 429 detection with proper backoff matching the retry-after window instead of relying on Horizon&amp;#39;s retry mechanism.&lt;/p&gt; &lt;p&gt;Observability tooling ingesting everything. Laravel Nightwatch was logging every queue job and request. Cut the event ingestion to what I actually monitor. The agent container stopped being a resource drain.&lt;/p&gt; &lt;p&gt;The 8 GB VPS went from 90%+ memory with constant New Relic alerts to a stable 65-80% with no regressions. Response times stayed under 100 ms average.&lt;/p&gt; &lt;p&gt;Full write-up with before/after numbers on y blog. &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/HolyPad&quot;&gt; /u/HolyPad &lt;/a&gt; &lt;br/&gt; &lt;span&gt;&lt;a href=&quot;https://danielpetrica.com/laraplugins-performance-audit/&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/1ucqzxy/90_memory_usage_constant_alerts_50k_redundant/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1ucqzxy</id><link href="https://www.reddit.com/r/PHP/comments/1ucqzxy/90_memory_usage_constant_alerts_50k_redundant/" /><updated>2026-06-22T17:26:09+00:00</updated><published>2026-06-22T17:26:09+00:00</published><title>90% memory usage, constant alerts, 50K redundant queue jobs — here is how I fixed my PHP server in one week</title></entry><entry><author><name>/u/FrameOne2009</name><uri>https://www.reddit.com/user/FrameOne2009</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;PHP 8.5.7, IonCube Loader 15.5.0, Linux, Apache + PHP-FPM&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Symptom:&lt;/strong&gt; PHP-FPM worker crashes with &lt;code&gt;general protection fault in ioncube_loader_lin_8.5.so&lt;/code&gt; when a static method is called with named arguments where a required parameter is missing &lt;em&gt;that is not the last parameter&lt;/em&gt;. Apache returns 503 or 500. No PHP error handlers, shutdown functions, or exception handlers are called.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Reproduced with this script:&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;php&lt;/p&gt; &lt;pre&gt;&lt;code&gt;class Testtesttest { static function IneedThreeParams( ?string $param1, mixed $param2, int $param3, ) {} } function missAnArgument() { Testtesttest::IneedThreeParams( param1: &amp;#39;Test&amp;#39;, param3: 1, ); } missAnArgument(); &lt;/code&gt;&lt;/pre&gt; &lt;p&gt;&lt;strong&gt;Expected:&lt;/strong&gt; PHP handles this with an ArgumentCountError. &lt;/p&gt; &lt;p&gt;&lt;strong&gt;Found result:&lt;/strong&gt; &lt;/p&gt; &lt;ul&gt; &lt;li&gt;Without IonCube loaded, PHP handles this with an ArgumentCountError. (correct)&lt;/li&gt; &lt;li&gt;With IonCube loaded: Apache return 503 or 500; PHP-FPM worker crashes with &lt;code&gt;general protection fault in ioncube_loader_lin_8.5.so&lt;/code&gt;&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;strong&gt;My solution:&lt;/strong&gt; disabling Ioncube.&lt;br/&gt; &lt;strong&gt;Another solution:&lt;/strong&gt; never forget arguments. &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/FrameOne2009&quot;&gt; /u/FrameOne2009 &lt;/a&gt; &lt;br/&gt; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1ucnhpa/phpfpm_segfault_general_protection_fault_with/&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/1ucnhpa/phpfpm_segfault_general_protection_fault_with/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1ucnhpa</id><link href="https://www.reddit.com/r/PHP/comments/1ucnhpa/phpfpm_segfault_general_protection_fault_with/" /><updated>2026-06-22T15:19:26+00:00</updated><published>2026-06-22T15:19:26+00:00</published><title>PHP-FPM segfault (general protection fault) with IonCube Loader PHP 8.5 on missing named argument</title></entry><entry><author><name>/u/iamsamaritan300</name><uri>https://www.reddit.com/user/iamsamaritan300</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;&lt;strong&gt;Day #01 working with Slim PHP microframework&lt;/strong&gt; &lt;/p&gt; &lt;p&gt;&amp;#x200B;&lt;/p&gt; &lt;p&gt;Working with logic data modeling, so far I&amp;#39;ve covered &lt;/p&gt; &lt;p&gt;- Entities&lt;/p&gt; &lt;p&gt;- Attributes&lt;/p&gt; &lt;p&gt;- Relationships&lt;/p&gt; &lt;p&gt;&amp;#x200B;&lt;/p&gt; &lt;p&gt;Looking forward to:&lt;/p&gt; &lt;p&gt;- Object mapping&lt;/p&gt; &lt;p&gt;- Use of Repository pattern&lt;/p&gt; &lt;p&gt;- PDO connection and prepared statements &lt;/p&gt; &lt;p&gt;- Authorization and Authentication using JWT&lt;/p&gt; &lt;p&gt;&amp;#x200B;&lt;/p&gt; &lt;p&gt;Slim is freedom throgh plug and play, but if one is not careful, it can be hell, &amp;quot;freedom of plugging&amp;quot; cause !!&lt;/p&gt; &lt;p&gt;&amp;#x200B;&lt;/p&gt; &lt;p&gt;What are you currently working on ? Please share and lets build together &amp;quot;building in public&amp;quot;&lt;/p&gt; &lt;p&gt;&amp;#x200B;&lt;/p&gt; &lt;p&gt;Happy coding 😃 &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/iamsamaritan300&quot;&gt; /u/iamsamaritan300 &lt;/a&gt; &lt;br/&gt; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1ucexzd/working_on_job_listing_website/&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/1ucexzd/working_on_job_listing_website/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1ucexzd</id><link href="https://www.reddit.com/r/PHP/comments/1ucexzd/working_on_job_listing_website/" /><updated>2026-06-22T08:35:37+00:00</updated><published>2026-06-22T08:35:37+00:00</published><title>Working On Job Listing Website 🌐🌎👨🏾‍💻</title></entry><entry><author><name>/u/Omar_Ess</name><uri>https://www.reddit.com/user/Omar_Ess</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/Omar_Ess&quot;&gt; /u/Omar_Ess &lt;/a&gt; &lt;br/&gt; &lt;span&gt;&lt;a href=&quot;/r/laravel/comments/1ubytth/need_cleaner_statistics_in_laravel_dashboards_i/&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/1ubyu9v/need_cleaner_statistics_in_laravel_dashboards_i/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1ubyu9v</id><link href="https://www.reddit.com/r/PHP/comments/1ubyu9v/need_cleaner_statistics_in_laravel_dashboards_i/" /><updated>2026-06-21T19:26:47+00:00</updated><published>2026-06-21T19:26:47+00:00</published><title>Need cleaner statistics in Laravel dashboards? I built Laravel Statistician</title></entry><entry><author><name>/u/Agreeable-Pace2487</name><uri>https://www.reddit.com/user/Agreeable-Pace2487</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/Agreeable-Pace2487&quot;&gt; /u/Agreeable-Pace2487 &lt;/a&gt; &lt;br/&gt; &lt;span&gt;&lt;a href=&quot;/r/filament/comments/1ubhaxn/a_filament_plugin_that_turns_scattered_activity/&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/1ubhbbt/a_filament_plugin_that_turns_scattered_activity/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1ubhbbt</id><link href="https://www.reddit.com/r/PHP/comments/1ubhbbt/a_filament_plugin_that_turns_scattered_activity/" /><updated>2026-06-21T05:09:47+00:00</updated><published>2026-06-21T05:09:47+00:00</published><title>A Filament plugin that turns scattered activity logs into one clean timeline for any model</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;You can now join the PHP Ambassador Special Interest Group if you want to help improve the perception of PHP in spaces outside our bubble. Help us help the community tell the real story of modern PHP development! &lt;a href=&quot;https://www.linkedin.com/search/results/all/?keywords=%23php&amp;amp;origin=HASH_TAG_FROM_FEED&quot;&gt;hashtag#php&lt;/a&gt; &lt;a href=&quot;https://www.linkedin.com/search/results/all/?keywords=%23phpc&amp;amp;origin=HASH_TAG_FROM_FEED&quot;&gt;hashtag#phpc&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/elizabethn&quot;&gt; /u/elizabethn &lt;/a&gt; &lt;br/&gt; &lt;span&gt;&lt;a href=&quot;https://thephp.foundation/blog/2026/06/19/the-php-ambassador-program-is-open/&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/1ua4ywk/the_php_ambassador_program_is_open/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1ua4ywk</id><link href="https://www.reddit.com/r/PHP/comments/1ua4ywk/the_php_ambassador_program_is_open/" /><updated>2026-06-19T15:25:44+00:00</updated><published>2026-06-19T15:25:44+00:00</published><title>The PHP Ambassador Program is Open</title></entry><entry><author><name>/u/CauliflowerSlight838</name><uri>https://www.reddit.com/user/CauliflowerSlight838</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/CauliflowerSlight838&quot;&gt; /u/CauliflowerSlight838 &lt;/a&gt; &lt;br/&gt; &lt;span&gt;&lt;a href=&quot;https://jorgsowa.me/posts/2026-06-16-securing-php-session-defaults/&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/1u9jhft/harden_your_session_cookie_configuration_in_php/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1u9jhft</id><link href="https://www.reddit.com/r/PHP/comments/1u9jhft/harden_your_session_cookie_configuration_in_php/" /><updated>2026-06-18T21:47:08+00:00</updated><published>2026-06-18T21:47:08+00:00</published><title>Harden Your Session Cookie Configuration in PHP, PHP 8.6 RFC</title></entry><entry><author><name>/u/Goldziher</name><uri>https://www.reddit.com/user/Goldziher</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 Peeps,&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://github.com/Goldziher&quot;&gt;Goldziher&lt;/a&gt;, CTO at &lt;a href=&quot;https://kreuzberg.dev&quot;&gt;kreuzberg.dev&lt;/a&gt;. I posted &lt;a href=&quot;https://github.com/kreuzberg-dev/tree-sitter-language-pack&quot;&gt;tree-sitter-language-pack&lt;/a&gt; here back at v1.0 when it had ~170 parsers. It&amp;#39;s at 306 now and just hit 1.9, so here&amp;#39;s an update.&lt;/p&gt; &lt;p&gt;It&amp;#39;s a native PHP extension (ext-php-rs) that gives you tree-sitter parsing for 306 languages without vendoring grammar sources or matching ABI versions yourself. Parsers download on demand and cache locally. Past plain parsing you get functions, classes, imports, symbols, docstrings and syntax-aware chunking, which is useful if you&amp;#39;re feeding code into an LLM.&lt;/p&gt; &lt;p&gt;&lt;code&gt; composer require kreuzberg-dev/tree-sitter-language-pack &lt;/code&gt;&lt;/p&gt; &lt;p&gt;On methodology, since it comes up: yes, built with AI agents, but on a strict harness - TDD, benchmark-driven hot paths, strict linting and high coverage in every language. The PHP extension is generated from the Rust core by our binding generator &lt;a href=&quot;https://github.com/kreuzberg-dev/alef&quot;&gt;alef&lt;/a&gt; and verified, not hand-rubber-stamped.&lt;/p&gt; &lt;p&gt;MIT licensed. Feedback 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/Goldziher&quot;&gt; /u/Goldziher &lt;/a&gt; &lt;br/&gt; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1u9wj01/treesitterlanguagepack_19_306_treesitter_parsers/&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/1u9wj01/treesitterlanguagepack_19_306_treesitter_parsers/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1u9wj01</id><link href="https://www.reddit.com/r/PHP/comments/1u9wj01/treesitterlanguagepack_19_306_treesitter_parsers/" /><updated>2026-06-19T08:41:50+00:00</updated><published>2026-06-19T08:41:50+00:00</published><title>tree-sitter-language-pack 1.9 - 306 tree-sitter parsers as a native PHP extension</title></entry><entry><author><name>/u/Andreww-carnegie</name><uri>https://www.reddit.com/user/Andreww-carnegie</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/Andreww-carnegie&quot;&gt; /u/Andreww-carnegie &lt;/a&gt; &lt;br/&gt; &lt;span&gt;&lt;a href=&quot;/r/laraveltutorials/comments/1ua26pz/hosting_laravel_sites_on_dirt_cheap_wordpress/&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/1ua27qs/hosting_laravel_sites_on_dirt_cheap_wordpress/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1ua27qs</id><link href="https://www.reddit.com/r/PHP/comments/1ua27qs/hosting_laravel_sites_on_dirt_cheap_wordpress/" /><updated>2026-06-19T13:35:55+00:00</updated><published>2026-06-19T13:35:55+00:00</published><title>Hosting Laravel sites on dirt cheap WordPress hosting, saves me money and I built a package to make the workflow not terrible</title></entry><entry><author><name>/u/Old-Illustrator-8692</name><uri>https://www.reddit.com/user/Old-Illustrator-8692</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/Old-Illustrator-8692&quot;&gt; /u/Old-Illustrator-8692 &lt;/a&gt; &lt;br/&gt; &lt;span&gt;&lt;a href=&quot;https://tomj.pro/i-replaced-json-with-a-custom-binary-format-in-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/1ua8a87/i_replaced_json_with_a_custom_binary_format_in_php/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1ua8a87</id><link href="https://www.reddit.com/r/PHP/comments/1ua8a87/i_replaced_json_with_a_custom_binary_format_in_php/" /><updated>2026-06-19T17:31:50+00:00</updated><published>2026-06-19T17:31:50+00:00</published><title>I Replaced JSON With a Custom Binary Format. In PHP.</title></entry><entry><author><name>/u/Ilia0001</name><uri>https://www.reddit.com/user/Ilia0001</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 maintain a set of native PHP extensions: php_excel, mdparser, php_clickhouse, fastchart, fastjson, phpser. Each has had a release or three since I last posted it here, and rather than drop six separate release threads on you, here is one roundup of what actually changed.&lt;/p&gt; &lt;p&gt;The thing that cuts across most of them: I lowered the minimum PHP version. php_excel, fastchart and fastjson now build on 8.1; phpser and mdparser on 8.2. All of them had required 8.3. Most libraries raise their floor over time rather than lower it, but for a native extension the minimum is a packaging decision, not a language one. None of these needed an 8.3-only engine API. So if you are pinned to 8.1 or 8.2 by your distro or your employer, you can run them now.&lt;/p&gt; &lt;p&gt;What else shipped, briefly:&lt;/p&gt; &lt;p&gt;mdparser had the biggest internal change. I swapped the parsing backend from cmark-gfm to md4c, a single-file streaming parser compiled into the extension, which roughly doubled throughput: the old backend benchmarked at ~5-9x the fastest pure-PHP parsers, md4c is ~10-20x. It also brought CommonMark 0.31 conformance (652/652) and a set of opt-in dialect extensions (LaTeX math, wiki links, ==highlight==, super/subscript, GitHub-style admonitions). The public API did not change, so it is a drop-in upgrade.&lt;/p&gt; &lt;p&gt;php_excel added libxl 5.2.0 support, so you can now read the data validations stored in an xlsx file, and a new AS_TEXT write mode that writes a value verbatim, so untrusted input starting with &amp;#39;=&amp;#39; cannot turn into a live formula when someone opens the file. Plus a sweep of bounds checks on the libxl integer arguments.&lt;/p&gt; &lt;p&gt;php_clickhouse got insertFromStream(), which stream-parses a TSV or CSV file and INSERTs it in C++ batches without buffering the whole file in PHP memory. The release after was a hardening round: fixed a heap use-after-free reading Map columns, a clone-corrupts-the-heap bug, and setDatabase() now survives a reconnect instead of silently reverting to the constructor database.&lt;/p&gt; &lt;p&gt;fastchart changed the most by version number, 0.2 to 1.3, so it is past 1.0 now. The recent highlights are vector PDF output (renderToFile(&amp;#39;out.pdf&amp;#39;) renders every chart type as real vector geometry, no rasterization) and structured image-map data for click regions.&lt;/p&gt; &lt;p&gt;fastjson grew document-surgery functions: RFC 6901 JSON Pointer reads that pull one value out of a large document without decoding the whole thing, RFC 7386 merge-patch, and a relaxed decode mode that accepts JSONC (comments, trailing commas). All backed by yyjson.&lt;/p&gt; &lt;p&gt;phpser, my binary serializer aimed at cache workloads, got a faster decoder: it installs declared object properties straight into their slots instead of building a properties hashtable per object, about 22-25% faster on same-class DTO batches. It also closed a correctness gap where a crafted numeric-string array key could slip past isset() / array_key_exists().&lt;/p&gt; &lt;p&gt;All of these are native C extensions, BSD-licensed, installable via PIE, and live at github.com/iliaal (each repo has its full changelog). I wrote up the minimum-version decision and most of these in more depth here: &lt;a href=&quot;https://ilia.ws/blog/lowering-the-php-floor-what-shipped-across-five-extensions&quot;&gt;https://ilia.ws/blog/lowering-the-php-floor-what-shipped-across-five-extensions&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Happy to answer questions, especially on the mdparser engine swap or the php_clickhouse streaming loader, which are the two I expect people will have opinions on.&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/Ilia0001&quot;&gt; /u/Ilia0001 &lt;/a&gt; &lt;br/&gt; &lt;span&gt;&lt;a href=&quot;https://www.reddit.com/r/PHP/comments/1u93zm6/what_shipped_across_my_native_php_extensions/&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/1u93zm6/what_shipped_across_my_native_php_extensions/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1u93zm6</id><link href="https://www.reddit.com/r/PHP/comments/1u93zm6/what_shipped_across_my_native_php_extensions/" /><updated>2026-06-18T11:44:01+00:00</updated><published>2026-06-18T11:44:01+00:00</published><title>What shipped across my native PHP extensions since I last posted here, and why five of them lowered their minimum PHP version</title></entry><entry><author><name>/u/StrangeR_825</name><uri>https://www.reddit.com/user/StrangeR_825</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/StrangeR_825&quot;&gt; /u/StrangeR_825 &lt;/a&gt; &lt;br/&gt; &lt;span&gt;&lt;a href=&quot;https://medium.com/@ynikki123/authenticating-a-paypal-notification-is-not-the-same-as-trusting-what-it-says-cve-2026-9189-9a130bcaa8ac&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/1u9de75/authenticating_a_paypal_notification_is_not_the/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1u9de75</id><link href="https://www.reddit.com/r/PHP/comments/1u9de75/authenticating_a_paypal_notification_is_not_the/" /><updated>2026-06-18T17:56:47+00:00</updated><published>2026-06-18T17:56:47+00:00</published><title>Authenticating a PayPal notification is not the same as trusting what it says (CVE-2026-9189)</title></entry><entry><author><name>/u/One-Mongoose-6961</name><uri>https://www.reddit.com/user/One-Mongoose-6961</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 maintain php-opcua, a pure-PHP OPC UA client (talking to PLCs / industrial gear). Since the intro post, the question I keep getting isn&amp;#39;t about the protocol — it&amp;#39;s &lt;em&gt;&amp;quot;okay, but how do I actually wire this into a real Laravel app?&amp;quot;&lt;/em&gt; And it&amp;#39;s a fair question, because OPC UA subscriptions break PHP&amp;#39;s whole mental model.&lt;/p&gt; &lt;p&gt;The core tension: subscriptions are &lt;strong&gt;stateful&lt;/strong&gt;. The server keeps your session open and &lt;em&gt;pushes&lt;/em&gt; value changes to you. A PHP-FPM request lives for a few milliseconds and then dies, taking the session with it. So polling the PLC on every request means a full handshake (~150ms) each time, and you still can&amp;#39;t receive pushed data at all.&lt;/p&gt; &lt;p&gt;The pattern I&amp;#39;ve settled on, and that I think holds up in production:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;A small long-lived &lt;strong&gt;daemon&lt;/strong&gt; (ReactPHP) owns the OPC UA session and the subscriptions. One session, period.&lt;/li&gt; &lt;li&gt;Your web requests never touch the PLC. They talk to the daemon over local IPC (~5ms) instead.&lt;/li&gt; &lt;li&gt;Every value change the daemon receives gets dispatched as a normal &lt;strong&gt;Laravel event&lt;/strong&gt; (&lt;code&gt;DataChangeReceived&lt;/code&gt;). From the app&amp;#39;s point of view it&amp;#39;s just another event.&lt;/li&gt; &lt;li&gt;A tiny &lt;strong&gt;listener&lt;/strong&gt; mirrors the latest value into the cache.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Livewire just polls the cache&lt;/strong&gt; (&lt;code&gt;wire:poll.1s&lt;/code&gt;). It never knows OPC UA exists. So the expensive part — the plant network — is paid once by the daemon, no matter how many browsers are watching the dashboard. The whole thing is about 80 lines end to end.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Two things I didn&amp;#39;t expect to matter as much as they did:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Declaring subscriptions in config instead of code.&lt;/strong&gt; The daemon recreates them on its own boot, so the dashboard survives a daemon restart with zero application code. That resilience turned out to be the part people actually cared about.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;A &amp;quot;LIVE&amp;quot; badge that doesn&amp;#39;t lie.&lt;/strong&gt; A dashboard showing a frozen last-good value while the PLC is unreachable is worse than no dashboard. So the badge goes green only when &lt;em&gt;both&lt;/em&gt; the connection is up &lt;em&gt;and&lt;/em&gt; the last notification is fresh (heartbeat timestamp). Connection-up alone isn&amp;#39;t enough — a subscription can be silently dead on a healthy connection. Full writeup with all the code (config, listener, Livewire component, the badge logic): &lt;a href=&quot;https://www.php-opcua.com/blog/opcua-subscriptions-laravel-dashboard&quot;&gt;https://www.php-opcua.com/blog/opcua-subscriptions-laravel-dashboard&lt;/a&gt;&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;The daemon-owns-the-session part isn&amp;#39;t really up for debate — that&amp;#39;s how the package works, and it&amp;#39;s what makes subscriptions possible under PHP&amp;#39;s request model at all. Where there&amp;#39;s actually room for choice is the last hop: once a value lands in Laravel as a &lt;code&gt;DataChangeReceived&lt;/code&gt; event, how you get it to the browser. I went with listener → cache → Livewire polling because it&amp;#39;s the simplest thing that survives restarts, but broadcasting/websockets, SSE, or a queued listener writing to the DB are all reasonable depending on the load. If you&amp;#39;ve shipped one of those for a live dashboard, I&amp;#39;d like to hear how it held up — always looking for patterns worth adding to the docs.&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/One-Mongoose-6961&quot;&gt; /u/One-Mongoose-6961 &lt;/a&gt; &lt;br/&gt; &lt;span&gt;&lt;a href=&quot;https://www.php-opcua.com/blog/opcua-subscriptions-laravel-dashboard&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/1u9w1l4/the_pattern_i_landed_on_for_using_opc_ua/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1u9w1l4</id><link href="https://www.reddit.com/r/PHP/comments/1u9w1l4/the_pattern_i_landed_on_for_using_opc_ua/" /><updated>2026-06-19T08:12:12+00:00</updated><published>2026-06-19T08:12:12+00:00</published><title>The pattern I landed on for using OPC UA subscriptions in Laravel (after one too many &quot;but how do I actually use it?&quot; questions)</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;We hear a lot about coding PHP with AI, and PHP calling remote API to query them. &lt;/p&gt; &lt;p&gt;And there are tools maturing quickly in the ecosystem: transformers, home made LLM, FFI libraries and even Rasmus himself creating an extension to run models from within PHP. &lt;/p&gt; &lt;p&gt;So much new ideas poping up! &lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.exakat.io/php-and-ai-what-actually-exists-at-the-language-level/&quot;&gt;https://www.exakat.io/php-and-ai-what-actually-exists-at-the-language-level/&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/1u9z332/php_and_ai_what_actually_exists_at_the_language/&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/1u9z332/php_and_ai_what_actually_exists_at_the_language/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1u9z332</id><link href="https://www.reddit.com/r/PHP/comments/1u9z332/php_and_ai_what_actually_exists_at_the_language/" /><updated>2026-06-19T11:09:56+00:00</updated><published>2026-06-19T11:09:56+00:00</published><title>PHP and AI : what actually exists at the language level</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;pre&gt;&lt;code&gt;[SLIDE 01 — title] Hello world, it&amp;#39;s Wednesday, June 17, 2026, and here&amp;#39;s what happened This Week in PHP Internals. [SLIDE 02 — generics goes to a vote] We start where we left off last week: generics. Last week, this was the most traction generics had seen in years. This week, Seifeddine Gmati took his Bound-Erased Generics RFC to a vote — and he did it *over Larry Garfield&amp;#39;s explicit objection* . Here&amp;#39;s the thing about that vote: as of this recording, it&amp;#39;s **losing** . 7 in favor, 18 against, 5 abstaining. It needs a two-thirds majority, and it&amp;#39;s sitting around a quarter. Rowan Tommins summed up the No camp in one line: &amp;quot;I want PHP to have generic types, but I want to be able to trust those types. This RFC does not deliver that.&amp;quot; Erased generics let you write a type the engine **won&amp;#39;t enforce** — and 18 voters decided that&amp;#39;s a step they&amp;#39;re not willing to take. [SLIDE 03 — quote] Larry had warned them. He reposted this into the vote thread for visibility: &amp;quot;you don&amp;#39;t call the vote until you know you have the votes.&amp;quot; Right now, that looks *prescient* . [SLIDE 04 — the path forward] So what happens to generics now? Two camps are already sketching the next move. Larry&amp;#39;s pitch: *don&amp;#39;t* cram this into `8.6`. Make `8.6` the last of the `8.x` line, make PHP 2027 a `9.0`, and ship enforced generics there as the headline — &amp;quot;PHP 9, now with generics.&amp;quot; Levi Morrison surprised himself by voting yes anyway, as a &amp;quot;stepping stone&amp;quot; you tighten later. And a non-voter writing as wheakerd made the plea of the week: don&amp;#39;t let this collapse into &amp;quot;full reified generics now, or PHPDoc forever&amp;quot; — ship a smaller, **enforceable** subset first, interfaces and abstract classes, and grow from there. The vote runs through June 28. There&amp;#39;s also a secondary vote on syntax — `+T`/`-T` versus `in T`/`out T` — and the C#-style in-out spelling is winning 18 to 4. [SLIDE 05 — literal scalar types] And honestly, Seifeddine had a *week* . While his generics RFC was going down, he opened a brand-new one: Literal Scalar Types. The idea — let a parameter be typed as the literal values it actually accepts. `array_filter`&amp;#39;s `$mode` really only takes `0`, `1`, or `2`, but it&amp;#39;s typed `int`, because that&amp;#39;s all we can say today. Literal types let the signature say what it **means** . David Gebler&amp;#39;s first reaction was the obvious one — don&amp;#39;t enums already do this? Seifeddine&amp;#39;s answer: enums are a closed set in a new file with an import; a literal union describes existing scalar APIs and open value sets without any of that. And he found time to back a third proposal too — Jorg Sowa&amp;#39;s revival of case-sensitive PHP. *Busy man.* [SLIDE 06 — the php tag, again] Remember `.phpc` from last week — pure-code files with no `&amp;lt;?php`, the proposal that collapsed so thoroughly even its biggest defender conceded? Hendrik Mennen brought it back. As a full RFC this time, with a working patch — 50 lines of C, ninety-eight hundred thirty-six tests passing, and a sub-vote on the file extension. The reception? *Same as last time.* Matteo Beccati: &amp;quot;unnecessary complication for practically no real-world benefit.&amp;quot; Kamil Tekiela took the motivation apart piece by piece. But credit to Hendrik — instead of digging in, he conceded the weak arguments and sharpened to one honest sentence: most new PHP files are pure code, the `&amp;lt;?php` carries zero meaning in them, and PHP is the **only** modern mainstream language that still makes it mandatory. Then he asked the room to tell him plainly — is the friction worth solving, is the mechanism wrong, or is it just not a real problem? *That&amp;#39;s* how you run a discussion. [SLIDE 07 — function autoloading, mark 5] Paul Jones opened — and I&amp;#39;m quoting his own subject line — &amp;quot;Function Autoloading, mark 5.&amp;quot; The fifth crack at letting PHP autoload functions the way it autoloads classes. Rob Landers, who wrote mark 4, replied with the dry truth: &amp;quot;the consensus was that the SPL autoloader needs to go, and nobody wanted more added to it... maybe the list has changed its mind. Hopefully.&amp;quot; And the early replies bring real concerns: Anton Smirnov and Rowan Tommins both flagged the same footgun — lean on function autoloading, forget to fully-qualify a name, and your code might *accidentally* work, only because something else loaded that function first, then silently fall back to a global on the next refactor. Rowan&amp;#39;s fix: a `declare()` at the top of the file that pins how unqualified names resolve. Function autoloading is PHP&amp;#39;s *white whale* , and attempt 5 is already drawing the hard questions. [SLIDE 08 — the votes that failed] Now — voting season. A lot of votes were live this week, and it was *brutal* at the top end. We covered generics. Two more are going down with it. Nicolas Grekas put his `__exists()` method to a vote — a genuinely clever fix: a magic method that finally lets an object tell a property set to `null` apart from one that doesn&amp;#39;t exist at all, the way `array_key_exists()` does for arrays. Beautifully argued RFC. The result so far: 0 yes, 9 no, 5 abstain. Sometimes the list just doesn&amp;#39;t want the extra magic. And Daniel Scherzer&amp;#39;s `ReflectionAttribute::getCurrent()` — which lets an attribute know what it&amp;#39;s attached to — is failing 2 to 5, with Larry, Ocramius, and Benjamin Außenhofer all pushing an interface-based alternative instead. [SLIDE 09 — the votes that passed] But the smaller, focused stuff is *sailing through* . Tim Düsterhus&amp;#39;s RFC to deprecate returning values from constructors and destructors: 23 to nothing. Weilin Du&amp;#39;s `Locale` display-keyword additions: 6 to nothing. Jakub Zelenka&amp;#39;s Polling API already passed, 33 to 1, and it&amp;#39;s merged. And a **security win** — Sjoerd Langkemper&amp;#39;s RFC to cap `php://filter` chains at 16, which shuts down a nasty local-file-inclusion-to-remote-code-execution trick, is cruising at 26 to nothing. The pattern&amp;#39;s hard to miss: tight, well-scoped proposals pass easily; the ambitious, magic-heavy ones are getting turned away. [SLIDE 10 — SNMP, a follow-up] A human follow-up, and a good one. Last week we flagged Steven Wilton, who&amp;#39;d shipped an SNMP module RFC and gotten total silence — &amp;quot;someone go help the man.&amp;quot; This week, someone **did** . Tim Düsterhus picked it up: he leveled with Steven that SNMP is niche enough that reviewers are scarce, said he couldn&amp;#39;t do it himself — and then went and recruited one in the Foundation Slack. He left Steven a concrete checklist: rebase, undraft the ready PRs, link the RFC. Steven did all of it within 2 days. The PRs are now waiting on a reviewer. The list came through. [SLIDE 11 — working groups &amp;amp; the Foundation] On governance: Ben Ramsey&amp;#39;s Working Groups RFC came **roaring back** this week. The idea — let the project charter small teams with real authority, so not everything needs a full-list vote. Tim Düsterhus still isn&amp;#39;t sold; he thinks the RFC process already covers it. But the spicy moment came when Alex Rock floated whether PHP Foundation staff should be barred from voting on RFCs. Larry shut that down *hard* : &amp;quot;the Foundation employs a majority of the people who really understand the engine — excluding them from voting would be project suicide. The Foundation has no vote. The people who do half the work, who happen to work for the Foundation, have votes. As they should.&amp;quot; [SLIDE 12 — modules, still churning] The modules saga *refuses to die* , and it&amp;#39;s spinning off children. Alex Rock extended his proposal with Packages — Rust-style crates, with package-level visibility. And Michael Morris opened a whole new thread called &amp;quot;Containers,&amp;quot; arguing that &amp;quot;namespaces in PHP are a bit of a hack&amp;quot; and floating containers as cleaner encapsulation. Rowan Tommins and Alex Rock are both in there. No RFC yet — this one&amp;#39;s still at the whiteboard. But the appetite for **real encapsulation** in PHP clearly isn&amp;#39;t going away. [SLIDE 13 — closures &amp;amp; docs] Two quieter movers. Nicolas Grekas&amp;#39;s serializable-closures RFC — fixing the fact that `8.5`&amp;#39;s attribute closures silently break `serialize()`-based caches — got its first real review from Tim Düsterhus, who wants it split in two and thinks the security model is more cautious than it needs to be. And Jordi Kroon announced he&amp;#39;ll open voting **Friday, June 19** , on pulling third-party extension docs — `imagick`, `redis`, `mongodb` — out of the main PHP manual. Watch for that one to go live. [SLIDE 14 — quick hits] Quick hits. Xavier Leune wants to expose `libcurl`&amp;#39;s socket callbacks so you can do SSRF filtering natively — validate the peer IP before connect — without dropping to FFI. A newcomer pitched a `get_favicon()` function and got the classic welcome: Kamil Tekiela asking, politely, what problem it actually solves. Larry and Ilija&amp;#39;s 5-year-old Pattern Matching RFC picked up sharp new feedback on whether a failed match should be able to fail silently. And Roman Pronskiy revised his social-media policy to add a &amp;quot;discretion&amp;quot; principle — the team can refuse a platform that&amp;#39;s a bad fit — a quiet echo of the X.com fight from last week. And fresh overnight: Jorg Sowa&amp;#39;s case-sensitive-PHP revival drew immediate fire. Rob Landers, flatly — &amp;quot;I honestly can&amp;#39;t think of anything good that this RFC would bring&amp;quot; — while others flagged the *casing salad* in PHP&amp;#39;s own built-ins, where `DateTime`, `PDO`, and `mysqli` already disagree, as the real sticking point. [SLIDE 15 — end slate] That&amp;#39;s the week — and a heavy one: a generics vote going down, 3 RFCs rejected, 4 passed, and a modules debate that keeps multiplying. Links to every thread are below. We&amp;#39;re Artisan Build. See you next week. &lt;/code&gt;&lt;/pre&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://youtube.com/watch?v=6m3lCrJ7XsU&amp;amp;si=WecGOIOifFPFKxyL&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/1u8nrxb/this_week_in_php_internals_june_17_2026/&quot;&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content><id>t3_1u8nrxb</id><link href="https://www.reddit.com/r/PHP/comments/1u8nrxb/this_week_in_php_internals_june_17_2026/" /><updated>2026-06-17T21:50:11+00:00</updated><published>2026-06-17T21:50:11+00:00</published><title>This Week In PHP Internals | June 17, 2026</title></entry></feed>