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
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
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: Fri Dec 27 00:01:30 2024 UTC