ID: 22517
Updated by: jacques@php.net
Reported By: jacques@php.net
-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
jacques@phantom:/tmp$ php -q test.curlfpisbroken.php
Array
(
)
jacques@phantom:/tmp$ php -v
4.2.1
jacques@phantom:/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
|
// | license@php.net so we can mail you a copy immediately.
|
//
+----------------------------------------------------------------------+
// | Authors: Jacques Marneweck <jacques@php.net>
|
//
+----------------------------------------------------------------------+//
// $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
)
root@mimbari:~/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] jacques@php.net
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] edink@php.net
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] jacques@php.net
Still same problems with the latest php4 STABLE which I downloaded this
afternoon.
root@mimbari:/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] jacques@php.net
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