Edit report at http://bugs.php.net/bug.php?id=52820&edit=1

 ID:                 52820
 User updated by:    klawd+phpbugs at kamundo dot de
 Reported by:        klawd+phpbugs at kamundo dot de
 Summary:            curl doesn't write to php://temp or /memory
 Status:             Verified
 Type:               Bug
 Package:            Sockets related
 Operating System:   Ubuntu
 PHP Version:        5.3.3
 Block user comment: N

 New Comment:

I didn't get the warning in my latest run. It could stem from the
missing open modes which would be weird but possible.


Previous Comments:
------------------------------------------------------------------------
[2010-09-12 21:37:43] cataphr...@php.net

Right.



The problem was that I was testing on Windows, where this works.



I've just tested in Ubuntu, and indeed the string was empty there.
However, I didn't get the warning you've described.

------------------------------------------------------------------------
[2010-09-12 19:31:26] klawd+phpbugs at kamundo dot de

Fixed test script, now with example.com.



$handle=curl_init('http://example.com');

curl_setopt($handle, CURLOPT_VERBOSE, true);

curl_setopt($handle, CURLOPT_STDERR, fopen('php://output', "w+"));

curl_exec($handle);

curl_setopt($handle, CURLOPT_STDERR, $output=fopen('php://temp',
"w+"));

curl_exec($handle);

rewind($output);

var_dump(stream_get_contents($output));



Please use var_dump. You will see that it's empty. There should be two
outputs:

- the one directly written to STDOUT

- one with string(n) and wrapped by var_dump's quotes

but the latter is empty:

string(0) ""



I tried both memory and temp

------------------------------------------------------------------------
[2010-09-12 13:37:48] cataphr...@php.net

Anyway, this works here:



<?php

$handle=curl_init('http://www.google.com/');

curl_setopt($handle, CURLOPT_VERBOSE, true);

curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);

curl_setopt($handle, CURLOPT_STDERR, $o = fopen('php://temp', "w+"));

curl_exec($handle);

rewind($o);

echo "output: ".stream_get_contents($o);



php://memory doesn't work because that stream cannot be cast into a
stdio FILE, which curl apparently requires.

------------------------------------------------------------------------
[2010-09-12 13:21:41] cataphr...@php.net

Your description and your test script don't match. The first mentions
"php://memory", the script uses "php://temp".



Additionally, you don't specify open modes in the test script.



Seeing the source code, there's a small error in that persistent
resources are not accepted (ZEND_FETCH_RESOURCE2 should have been used),
but it should not cause the problem you're describing.



Please fix the problems with your bug report.

------------------------------------------------------------------------
[2010-09-12 02:05:23] klawd+phpbugs at kamundo dot de

Description:
------------
Setting CURLOPT_STDERR to fopen('php://output', 'w') will write curl
debug output.



One would await that setting it to fopen('php://memory', 'w') would
store it in the memory and it would be available after a rewind. That is
not the case, instead, a warning is raised:



Warning: curl_setopt(): supplied argument is not a valid File-Handle
resource in



is php://output a valid file handle resource?



This is very confusing and it should be possible to store the output in
the memory.

Test script:
---------------
$handle=curl_init('http://google.com');

curl_setopt($handle, CURLOPT_STDERR, fopen('php://output'));

curl_exec($handle);

curl_setopt($handle, CURLOPT_STDERR, $output=fopen('php://temp'));

curl_exec($handle);

rewind($output);

var_dump($output);



------------------------------------------------------------------------



-- 
Edit this bug report at http://bugs.php.net/bug.php?id=52820&edit=1

Reply via email to