Re: Why does `setcookie` send header before throwing `Error` exception?
| From: | JEFFRY KILLEN | Date: | Sun, 04 Apr 2021 23:51:12 +0000 |
| Subject: | Re: Why does `setcookie` send header before throwing `Error` exception? | ||
| References: | 1 2 3 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-327537@lists.php.net to get a copy of this message | ||
> On Apr 4, 2021, at 4:39 PM, JEFFRY KILLEN <jekillen@prodigy.net> wrote:
>
>
>
>> On Apr 4, 2021, at 3:07 PM, Jair López <jair_lopez4321@hotmail.com> wrote:
>>
>> Sorry for the typos in my previous message. I stand corrected, it is
>>
>>> setcookie('name', 'value', 1, new Foo());
>>
>> instead of
>>
>>> setcookie('name', 'value', 1, => new Foo());
>>
>> and here is the fixed test file:
>> --TEST--
>> setcookie() sends header before throwing
Error exception
>> --FILE--
>> <?php
>> ob_start();
>>
>> class Foo{
>> }
>>
>> try {
>> setcookie('name', 'value', array(
>> 'expires' => 1,
>> 'path' => new Foo()
>> ));
>> } catch (\Error $e) {
>> echo $e->getMessage() . "\n";
>> }
>>
>> var_dump(headers_list());
>> echo "Done\n";
>> ?>
>> --EXPECTHEADERS--
>>
>> --EXPECTF--
>> Object of class Foo could not be converted to string
>> array(1) {
>> [0]=>
>> string(23) "X-Powered-By: PHP/8.0.3"
>> }
>> Done
>
>
> Hello;
> This may not make the difference but the line:
>> 'path' => new Foo()
> ‘path’=>needs a string, so how is ‘new foo()’
> returning a string?
>
> Could it be sending the header and then choking
> because ‘path’ doesn’t have a valid value assignment?
As a matter of fact, as you have the class def it looks
like calling new foo() from within the class def would
make it recursively trying to set the cookie.
JK