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