Delicious Bookmark this on Delicious Share on Facebook SlashdotSlashdot It! Digg! Digg



PHP : Function Reference : Stream Functions : stream_context_create

stream_context_create

Create a streams context (PHP 4 >= 4.3.0, PHP 5)
resource stream_context_create ( [array options [, array params]] )

Example 2371. Using stream_context_create()

<?php
$opts
= array(
 
'http'=>array(
   
'method'=>"GET",
   
'header'=>"Accept-language: en\r\n" .
             
"Cookie: foo=bar\r\n"
 
)
);

$context = stream_context_create($opts);

/* Sends an http request to www.example.com
  with additional headers shown above */
$fp = fopen('http://www.example.com', 'r', false, $context);
fpassthru($fp);
fclose($fp);
?>

Related Examples ( Source code ) » stream_context_create


Code Examples / Notes » stream_context_create

jrubenstein

Something to keep in mind when creating SSL streams (using https://):
<?php
$context = context_create_stream($context_options)
$fp = fopen('https://url', 'r', false, $context);
?>
One would think - the proper way to create a stream options array, would be as follows:
<?php
$context_options = array (
'https' => array (
'method' => 'POST',
'header'=> "Content-type: application/x-www-form-urlencoded\r\n"
. "Content-Length: " . strlen($data) . "\r\n",
'content' => $data
)
);
?>
THAT IS THE WRONG WAY!!!
Take notice to the 3rd line: 'https' => array (
The CORRECT way, is as follows:
<?php
$context_options = array (
'http' => array (
'method' => 'POST',
'header'=> "Content-type: application/x-www-form-urlencoded\r\n"
. "Content-Length: " . strlen($data) . "\r\n",
'content' => $data
)
);
?>
Notice, the NEW 3rd line: 'http' => array (
Now - keep this in mind - I spent several hours trying to trouble shoot my issue, when I finally stumbled upon this non-documented issue.
The complete code to post to a secure page is as follows:
<?php
$data = array ('foo' => 'bar', 'bar' => 'baz');
$data = http_build_query($data);
$context_options = array (
'http' => array (
'method' => 'POST',
'header'=> "Content-type: application/x-www-form-urlencoded\r\n"
. "Content-Length: " . strlen($data) . "\r\n",
'content' => $data
)
);
$context = context_create_stream($context_options)
$fp = fopen('https://url', 'r', false, $context);
?>


chris dot vigelius

It seems that the authorization example given below by"php at charlesconsulting dot com" does NOT work with PHP 5.2.1, since the 'header' option will be simply ignored if it is not an array (but a string).
The following works:
$url = 'http://protectedstuff.com';
$auth = base64_encode('user:password');
$header = array("Authorization: Basic $auth");
$opts = array( 'http' => array ('method'=>'GET',
                                          'header'=>$header));
$ctx = stream_context_create($opts);
file_get_contents($url,false,$ctx);
See also http://bugs.php.net/bug.php?id=41051


davep

In addition to the context options mentioned above (appendix N), lower down context options for sockets can be found in appendix P - http://www.php.net/manual/en/transports.php

net_navard

Hi,you can create an array of parameters(what it's called a stream context),which can be transmitted each time you read or write a stream through a socket.In the below example:
$opts =array('http'=>arra('method'=>"GET",
'header'=>"Accept-language:en\r\n"."Cookie: foo=bar\r\n");
What you're actually doing is create a set of parameters(the protocol to be used,the request method,additional http headers and a cookie) which will be used each time you open a socket connection to request www.example.com.This saves a lot of time if you want to use these parameters (called a stream context) whenever you include them when making a request to www.example.com,instead of having to specify them over and over again.
Using the previous example,say you want to create a stream context,which sends a "Content-Type" http header and utilize it when making a request to www.example.com.Take a look:
$opts = array('http'=>array('method'=>"GET",
'header'=>"Content-Type: text/xml; charset=utf-8");
$context = stream_context_create($opts);
$fp = fopen('http://www.example.com','r',false,$context);
fpassthru($fp);
fclose($fp);
Now,when you make a request to www.example.com,the above http header will be included within the socket and transmitted to the server.Best of luck for you friends,Hossein


php

Here's an example of retrieving a page which requests a username and password using the basic authorization scheme.  This calls the w3.org web page validator for a password protected page.
//$fileurl contains page to validate
$validateurl="http://validator.w3.org/check?uri=$fileurl";
$cred = sprintf('Authorization: Basic %s',
   base64_encode('username:password') );
$opts = array(
   'http'=>array(
'method'=>'GET',
'header'=>$cred)
);
$ctx = stream_context_create($opts);
$validate=file_get_contents($validateurl,false,$ctx);


sp0n9e

Here's a very simple way to do posts easily without need of cURL or writing an http request by hand using the tcp:// wrapper.  I like using contexts just because of their ubiquity and the lack of an optional library such as cURL (though one of the more popular libraries).
<?php
$options = array(
 'http'=>array(
   'method'=>"POST",
   'header'=>
     "Accept-language: en\r\n".
     "Content-type: application/x-www-form-urlencoded\r\n",
   'content'=>http_build_query(array('foo'=>'bar'))
));
$context = stream_context_create($options);
fopen('http://www.example.com/',false,$context);
?>


dev

Example of a stream for reading a string passed
via a context object.
<?php
/* ----------------------------------------
* Designed to read from a string
*/
class sfStreamStringRead
{
   const PROTOCOL = 'stringread'; /* Underscore not allowed */
       
   protected $dataPos  = NULL;
   protected $dataBuf  = NULL;
   protected $dataLen  = NULL;
   
   function stream_open($path, $mode, $options, &$opened_path)
   {
       /* Verify context has data */
       $contextOptions = stream_context_get_options($this->context);
       if (!isset($contextOptions[self::PROTOCOL]['data'])) {
           return FALSE;
       }
       $this->dataBuf = $contextOptions[self::PROTOCOL]['data'];
       $this->dataLen = strlen($this->dataBuf);
       $this->dataPos = 0;
       return TRUE;
   }
   function stream_read($count){
       $ret = substr($this->dataBuf, $this->dataPos, $count);
       $this->dataPos += strlen($ret);
       return $ret;
   }
   function stream_eof(){
       return $this->dataPos >= $this->dataLen;
   }
   function stream_tell(){
       return $this->dataPos;
   }
   /* ------------------------------------------
    * A few helper functions
    */
   static function genURL()
   {
       return self::PROTOCOL . '://';
   }
   static function genContext($dataBuf)
   {
       return stream_context_create(array(
           self::PROTOCOL => array(
               'data' => $dataBuf,
           ),
       ));
   }
   static function open($dataBuf)
   {
       return fopen(self::genURL(),'r',FALSE,self::genContext($dataBuf));
   }  
}
stream_wrapper_register(
   sfStreamStringRead::PROTOCOL,
  'sfStreamStringRead'
);
$sp = sfStreamStringRead::open("Some String Data\n");
echo fgets($sp);
fclose($sp);        
?>


Change Language


Follow Navioo On Twitter
stream_bucket_append
stream_bucket_make_writeable
stream_bucket_new
stream_bucket_prepend
stream_context_create
stream_context_get_default
stream_context_get_options
stream_context_set_option
stream_context_set_params
stream_copy_to_stream
stream_encoding
stream_filter_append
stream_filter_prepend
stream_filter_register
stream_filter_remove
stream_get_contents
stream_get_filters
stream_get_line
stream_get_meta_data
stream_get_transports
stream_get_wrappers
stream_register_wrapper
stream_resolve_include_path
stream_select
stream_set_blocking
stream_set_timeout
stream_set_write_buffer
stream_socket_accept
stream_socket_client
stream_socket_enable_crypto
stream_socket_get_name
stream_socket_pair
stream_socket_recvfrom
stream_socket_sendto
stream_socket_server
stream_socket_shutdown
stream_wrapper_register
stream_wrapper_restore
stream_wrapper_unregister
eXTReMe Tracker