ID: 22517 Updated by: [EMAIL PROTECTED] Reported By: [EMAIL PROTECTED] -Status: Bogus +Status: Closed Bug Type: cURL related Operating System: FreeBSD 4.7-(STABLE|RELEASE) PHP Version: 4.3.0/4.3.1/4.3.2-dev New Comment:
I've developed a quick test using the http://www.php.net/mirror-test.php [EMAIL PROTECTED]:/tmp$ php -q test.curlfpisbroken.php Array ( ) [EMAIL PROTECTED]:/tmp$ php -v 4.2.1 [EMAIL PROTECTED]:/tmp$ cat test.curlfpisbroken.php <?php // +----------------------------------------------------------------------+ // | PHP version 4.0 | // +----------------------------------------------------------------------+ // | Copyright (c) 1997, 1998, 1999, 2000, 2001, 2002, 2003 The PHP Group | // +----------------------------------------------------------------------+ // | This source file is subject to version 2.0 of the PHP license, | // | that is bundled with this package in the file LICENSE, and is | // | available at through the world-wide-web at | // | http://www.php.net/license/2_02.txt. | // | If you did not receive a copy of the PHP license and are unable to | // | obtain it through the world-wide-web, please send a note to | // | [EMAIL PROTECTED] so we can mail you a copy immediately. | // +----------------------------------------------------------------------+ // | Authors: Jacques Marneweck <[EMAIL PROTECTED]> | // +----------------------------------------------------------------------+// // $Id:$ /* Test for php4 to prove that CURLOPT_FILE is broken in PHP 4.3.x including * the 4.3.2-dev (PHP Bug #22517) */ $php_url = "http://www.php.net/mirror-info.php"; $fp = tmpfile(); $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $php_url); curl_setopt($curl, CURLOPT_TIMEOUT, 20); curl_setopt($curl, CURLOPT_FILE, $fp); #curl_setopt($curl, CURLOPT_PROXY, "http://192.168.254.14:3128/"); curl_exec($curl); $response['http_code'] = curl_getinfo($curl, CURLINFO_HTTP_CODE); rewind($fp); while ($str = fgets($fp, 4096)) { $pairs .= $str; } fclose($fp); $response['data'] = $pairs; asort($response); $expecteddata = explode ("|", "http://www.php.net/|4.3.0-dev|1047661845|1|2|en"); $datawehave = explode ("|", $response['data']); $diff = array_diff ($expecteddata, $datawehave); print_r ($diff); ?> Okay it the CURLOPT_FILE works nicely on php 4.2.1 :) Now testing 4.3.0: Array ( [0] => http://www.php.net/ [1] => 4.3.0-dev [2] => 1047661845 [3] => 1 [4] => 2 [5] => en ) [EMAIL PROTECTED]:~/test# php -v PHP 4.3.0 (cli) (built: Feb 19 2003 13:51:54) Copyright (c) 1997-2002 The PHP Group Zend Engine v1.3.0, Copyright (c) 1998-2002 Zend Technologies with Zend Optimizer v2.1.0, Copyright (c) 1998-2003, by Zend Technologies Now going to test the latest stable build: Looks like Ilia Alshanetsky's patch to ext/curl/interface.c yesterday fixes my issues :) su-2.05b# ./php -v PHP 4.3.2-RC (cli) (built: Mar 14 2003 19:43:26) Copyright (c) 1997-2003 The PHP Group Zend Engine v1.3.0, Copyright (c) 1998-2003 Zend Technologies with Zend Optimizer v2.1.0, Copyright (c) 1998-2003, by Zend Technologies su-2.05b# ./php -q test.curlfpisborken.php Array ( ) Thanks Ilia Alshanetsky :) Previous Comments: ------------------------------------------------------------------------ [2003-03-03 19:02:59] [EMAIL PROTECTED] Apart from (b) with the SSL stuff, part (a) where $fp does not get anything from the CURL session for example if I do something like following, $fp does not get any data using the CURLOPT_FILE setopt setting: <?php $saix_url = "http://isp.saix.net/cgi-bin/ISPUserHistory.pl"; $fp = tmpfile(); $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $saix_url); curl_setopt($curl, CURLOPT_TIMEOUT, 2000); curl_setopt($curl, CURLOPT_FILE, $fp); curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data); curl_setopt($curl, CURLOPT_USERPWD, $saix['login']); curl_setopt($curl, CURLOPT_PROXY, "http://192.168.253.14:3128/"); curl_exec($curl); curl_close($curl); Adding the following option and adding a $get_ouptut_since_fp_contains_no_data = in front of the curl_exec call seems to get the data that $fp should have contained. $fp = tmpfile(); $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $saix_url); curl_setopt($curl, CURLOPT_TIMEOUT, 2000); curl_setopt($curl, CURLOPT_FILE, $fp); curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data); curl_setopt($curl, CURLOPT_USERPWD, $saix['login']); curl_setopt($curl, CURLOPT_PROXY, "http://192.168.253.14:3128/"); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $get_output_since_fp_contains_no_data = curl_exec($curl); curl_close($curl); ... I'm going to play around with the curl extension and see if I can come up with a patch to fix the CURLOPT_FILE stuff. ------------------------------------------------------------------------ [2003-03-03 17:18:15] [EMAIL PROTECTED] Not a PHP bug but a feature of the new version of libcurl. As Daniel pointed out have a look at: http://curl.haxx.se/docs/sslcerts.html ------------------------------------------------------------------------ [2003-03-03 17:13:53] daniel at haxx dot se http://curl.haxx.se/docs/sslcerts.html ------------------------------------------------------------------------ [2003-03-03 14:46:14] [EMAIL PROTECTED] Still same problems with the latest php4 STABLE which I downloaded this afternoon. [EMAIL PROTECTED]:/usr/local/src/php4-STABLE-200303031230/sapi/cli# ./php -v PHP 4.3.2-dev (cli) (built: Mar 3 2003 21:54:28) Copyright (c) 1997-2003 The PHP Group Zend Engine v1.3.0, Copyright (c) 1998-2003 Zend Technologies with Zend Optimizer v2.1.0, Copyright (c) 1998-2003, by Zend Technologies ------------------------------------------------------------------------ [2003-03-03 13:35:24] [EMAIL PROTECTED] Busy building the latest stable which I downloaded earlier today. Will keep you guys posted on the status. ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/22517 -- Edit this bug report at http://bugs.php.net/?id=22517&edit=1