php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Request #50526 stat() needs Context parameter
Submitted: 2009-12-18 21:36 UTC Modified: 2021-07-21 09:44 UTC
Votes:2
Avg. Score:3.5 ± 0.5
Reproduced:2 of 2 (100.0%)
Same Version:0 (0.0%)
Same OS:1 (50.0%)
From: codeslinger at compsalot dot com Assigned: cmb (profile)
Status: Closed Package: Streams related
PHP Version: 5.2.12 OS: any
Private report: No CVE-ID: None
View Developer Edit
Welcome! If you don't have a Git account, you can't do anything here.
If you reported this bug, you can edit this bug over here.
(description)
Block user comment
Status: Assign to:
Package:
Bug Type:
Summary:
From: codeslinger at compsalot dot com
New email:
PHP Version: OS:

 

 [2009-12-18 21:36 UTC] codeslinger at compsalot dot com
Description:
------------
Feature Request:

the stream wrapper functions are *totally awesome*  :-)  !!!

but the "stat" family of functions is limited by the lack of a "context" param.

For instance I need to be able to provide a user name and password for a particular connection.  for opendir mkdir fopen etc.  I am able to pass a context with that info and everything works.  But then when I try to do a "stat" or "fstat"  it fails because there is no way to pass the $context.

Thank you for making PHP such a fantastic programming language!


Reproduce code:
---------------
---
From manual page: streamwrapper.stream-stat#Description
---


Actual result:
--------------
also see related 
Bug #42965  	copy() should support context parameters for URLs



Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2009-12-21 22:37 UTC] lbarnaud@php.net
For stream_wrappers, by calling fopen() with a context parameter and then fstat() on the opened stream, you should be able to pass a context (the ->context attribute in the wrapper's instance).
 [2010-08-16 23:58 UTC] kalle@php.net
-Status: Open +Status: Assigned -Package: Feature/Change Request +Package: *General Issues -Assigned To: +Assigned To: kalle
 [2013-10-04 13:00 UTC] matti dot jarvinen at nitroid dot fi
And it seems that StreamWrapper stat doesn't use default context either.

$options = array('testfs'=> array(
   'storagePath'=>dirname(ROOTPATH).DIRECTORY_SEPARATOR.'storage'
   )
);

$defaultContext = stream_context_get_options(stream_context_get_default());

$newContext = array_replace_recursive($defaultContext, $options);

stream_context_set_default($newContext);

stream_wrapper_register('testfs', 'Test_StreamWrapper');

class Test_StreamWrapper
{
  public $context;

  public function url_stat()
  {
    if($this->context === null)
    {
       print 'No Context!';   
    }
    return false;
  }
}

file_exists('testfs://foobar');

Expected:

Got:
No Context!
 [2016-07-31 04:25 UTC] kalle@php.net
-Status: Assigned +Status: Open -Assigned To: kalle +Assigned To:
 [2021-07-21 09:44 UTC] cmb@php.net
-Status: Open +Status: Closed -Package: *General Issues +Package: Streams related -Assigned To: +Assigned To: cmb
 [2021-07-21 09:44 UTC] cmb@php.net
> but the "stat" family of functions is limited by the lack of a
> "context" param.

You should be able to use stream_context_set_default()[1].

> And it seems that StreamWrapper stat doesn't use default context
> either.

The behavior is documented[2].

[1] <https://www.php.net/stream_context_set_default>
[2] <https://www.php.net/manual/en/class.streamwrapper.php#streamwrapper.props>
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sun Dec 01 21:01:32 2024 UTC