felipe Fri Jul 3 00:09:08 2009 UTC
Added files: (Branch: PHP_5_3)
/php-src/ext/curl/tests bug48207.phpt curl_CURLOPT_READDATA.phpt
curl_close_basic.phpt
curl_copy_handle_basic_001.phpt
curl_copy_handle_basic_002.phpt
curl_copy_handle_basic_004.phpt
curl_copy_handle_basic_005.phpt
curl_copy_handle_basic_006.phpt
curl_error_basic.phpt
curl_multi_close_basic.phpt
curl_multi_getcontent_basic3.phpt
curl_multi_getcontent_error1.phpt
curl_multi_getcontent_error2.phpt
curl_multi_getcontent_error3.phpt
curl_multi_getcontent_error4.phpt
curl_multi_init_basic.phpt
curl_multi_select_basic1.phpt
curl_setopt_CURLOPT_FOLLOWLOCATION_open_basedir.phpt
curl_setopt_CURLOPT_READFUNCTION.phpt
curl_setopt_array_basic.phpt
curl_setopt_basic001.phpt
curl_setopt_basic002.phpt
curl_setopt_basic003.phpt
curl_setopt_basic004.phpt
curl_setopt_error.phpt curl_testdata1.txt
curl_testdata2.txt curl_write_callback.phpt
curl_write_file.phpt curl_write_return.phpt
curl_write_stdout.phpt
curl_writeheader_callback.phpt
Modified files:
/php-src/ext/curl/tests/responder get.php
Log:
- New tests (DutchUG testfest)
http://cvs.php.net/viewvc.cgi/php-src/ext/curl/tests/responder/get.php?r1=1.1.2.3&r2=1.1.2.4&diff_format=u
Index: php-src/ext/curl/tests/responder/get.php
diff -u php-src/ext/curl/tests/responder/get.php:1.1.2.3
php-src/ext/curl/tests/responder/get.php:1.1.2.4
--- php-src/ext/curl/tests/responder/get.php:1.1.2.3 Sat May 16 17:02:24 2009
+++ php-src/ext/curl/tests/responder/get.php Fri Jul 3 00:09:08 2009
@@ -1,5 +1,8 @@
<?php
switch($_GET['test']) {
+ case 'post':
+ var_dump($_POST);
+ break;
case 'getpost':
var_dump($_GET);
var_dump($_POST);
http://cvs.php.net/viewvc.cgi/php-src/ext/curl/tests/bug48207.phpt?view=markup&rev=1.1
Index: php-src/ext/curl/tests/bug48207.phpt
+++ php-src/ext/curl/tests/bug48207.phpt
--TEST--
Test curl_setopt() CURLOPT_FILE readonly file handle
--CREDITS--
Mark van der Velden
#testfest Utrecht 2009
--SKIPIF--
<?php if (!extension_loaded("curl")) print "skip"; ?>
--FILE--
<?php
/*
* Description : Adds a file which stores the received data from
curl_exec();
* Source code : ext/curl/multi.c
* Test documentation: http://wiki.php.net/qa/temp/ext/curl
*/
// Figure out what handler to use
if(!empty($_ENV['PHP_CURL_HTTP_REMOTE_SERVER'])) {
// Use the set Environment variable
$url = $_ENV['PHP_CURL_HTTP_REMOTE_SERVER'];
} else {
// Create a temporary file for the test
$tempname = tempnam(sys_get_temp_dir(), 'CURL_HANDLE');
$url = 'file://'. $tempname;
// add the test data to the file
file_put_contents($tempname, "Hello World!\nHello World!");
}
$tempfile = tempnam(sys_get_temp_dir(), 'CURL_FILE_HANDLE');
$ch = curl_init($url);
$fp = fopen($tempfile, "r"); // Opening 'fubar' with the incorrect readonly flag
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_exec($ch);
curl_close($ch);
is_file($tempfile) and @unlink($tempfile);
isset($tempname) and is_file($tempname) and @unlink($tempfile);
?>
--EXPECTF--
Warning: curl_setopt(): the provided file handle is not writable in %s on line
%d
%S
http://cvs.php.net/viewvc.cgi/php-src/ext/curl/tests/curl_CURLOPT_READDATA.phpt?view=markup&rev=1.1
Index: php-src/ext/curl/tests/curl_CURLOPT_READDATA.phpt
+++ php-src/ext/curl/tests/curl_CURLOPT_READDATA.phpt
--TEST--
Test CURLOPT_READDATA without a callback function
--CREDITS--
Mattijs Hoitink [email protected]
#Testfest Utrecht 2009
--SKIPIF--
<?php if (!extension_loaded("curl") ||
empty($_ENV['PHP_CURL_HTTP_REMOTE_SERVER'])) print "skip"; ?>
--FILE--
<?php
// The URL to POST to
$url = $_ENV['PHP_CURL_HTTP_REMOTE_SERVER'] . '/get.php?test=post';
// Create a temporary file to read the data from
$tempname = tempnam(sys_get_temp_dir(), 'CURL_DATA');
file_put_contents($tempname, "hello=world&smurf=blue");
ob_start();
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_READDATA, fopen($tempname, 'rb'));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Transfer-Encoding: chunked'));
if (false === $response = curl_exec($ch)) {
echo 'Error #' . curl_errno($ch) . ': ' . curl_error($ch);
} else {
echo $response;
}
curl_close($ch);
// Clean the temporary file
unset($tempname);
--EXPECT--
array(2) {
["hello"]=>
string(5) "world"
["smurf"]=>
string(4) "blue"
}
http://cvs.php.net/viewvc.cgi/php-src/ext/curl/tests/curl_close_basic.phpt?view=markup&rev=1.1
Index: php-src/ext/curl/tests/curl_close_basic.phpt
+++ php-src/ext/curl/tests/curl_close_basic.phpt
--TEST--
curl_close
--CREDITS--
Stefan Koopmanschap <[email protected]>
#testfest Utrecht 2009
--SKIPIF--
<?php
if (!extension_loaded('curl')) print 'skip';
?>
--FILE--
<?php
$ch = curl_init();
curl_close($ch);
var_dump($ch);
--EXPECT--
resource(4) of type (Unknown)
http://cvs.php.net/viewvc.cgi/php-src/ext/curl/tests/curl_copy_handle_basic_001.phpt?view=markup&rev=1.1
Index: php-src/ext/curl/tests/curl_copy_handle_basic_001.phpt
+++ php-src/ext/curl/tests/curl_copy_handle_basic_001.phpt
--TEST--
Test curl_copy_handle() with simple get
--CREDITS--
Rick Buitenman <[email protected]>
#testfest Utrecht 2009
--SKIPIF--
<?php if (!extension_loaded("curl") || false ===
getenv('PHP_CURL_HTTP_REMOTE_SERVER')) print "skip"; ?>
--FILE--
<?php
$host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
echo '*** Testing curl copy handle with simple GET ***' . "\n";
$url = "{$host}/get.php?test=getpost&get_param=Hello%20World";
$ch = curl_init();
ob_start(); // start output buffering
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url); //set the url we want to use
$copy = curl_copy_handle($ch);
curl_close($ch);
$curl_content = curl_exec($copy);
curl_close($copy);
var_dump( $curl_content );
?>
===DONE===
--EXPECTF--
*** Testing curl copy handle with simple GET ***
string(106) "array(2) {
["test"]=>
string(7) "getpost"
["get_param"]=>
string(11) "Hello World"
}
array(0) {
}
"
===DONE===
http://cvs.php.net/viewvc.cgi/php-src/ext/curl/tests/curl_copy_handle_basic_002.phpt?view=markup&rev=1.1
Index: php-src/ext/curl/tests/curl_copy_handle_basic_002.phpt
+++ php-src/ext/curl/tests/curl_copy_handle_basic_002.phpt
--TEST--
Test curl_copy_handle() with simple POST
--CREDITS--
Rick Buitenman <[email protected]>
#testfest Utrecht 2009
--SKIPIF--
<?php if (!extension_loaded("curl") || false ===
getenv('PHP_CURL_HTTP_REMOTE_SERVER')) print "skip"; ?>
--FILE--
<?php
$host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
echo '*** Testing curl copy handle with simple POST ***' . "\n";
$url = "{$host}/get.php?test=getpost";
$ch = curl_init();
ob_start(); // start output buffering
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "Hello=World&Foo=Bar&Person=John%20Doe");
curl_setopt($ch, CURLOPT_URL, $url); //set the url we want to use
$copy = curl_copy_handle($ch);
curl_close($ch);
$curl_content = curl_exec($copy);
curl_close($copy);
var_dump( $curl_content );
?>
===DONE===
--XFAIL--
This test fails, the copy seems to be missing the CURLOPT_POSTFIELDS after the
original is closed
--EXPECTF--
*** Testing curl copy handle with simple POST ***
string(163) "array(1) {
["test"]=>
string(7) "getpost"
}
array(3) {
["Hello"]=>
string(5) "World"
["Foo"]=>
string(3) "Bar"
["Person"]=>
string(8) "John Doe"
}
"
===DONE===
http://cvs.php.net/viewvc.cgi/php-src/ext/curl/tests/curl_copy_handle_basic_004.phpt?view=markup&rev=1.1
Index: php-src/ext/curl/tests/curl_copy_handle_basic_004.phpt
+++ php-src/ext/curl/tests/curl_copy_handle_basic_004.phpt
--TEST--
Test curl_copy_handle() after exec()
--CREDITS--
Rick Buitenman <[email protected]>
#testfest Utrecht 2009
--SKIPIF--
<?php if (!extension_loaded("curl") || false ===
getenv('PHP_CURL_HTTP_REMOTE_SERVER')) print "skip"; ?>
--FILE--
<?php
$host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
echo '*** Test curl_copy_handle() after exec() ***' . "\n";
$url = "{$host}/get.php?test=getpost&get_param=Hello%20World";
$ch = curl_init();
ob_start(); // start output buffering
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url); //set the url we want to use
$curl_content = curl_exec($ch);
$copy = curl_copy_handle($ch);
curl_close($ch);
$curl_content_copy = curl_exec($copy);
curl_close($copy);
var_dump( $curl_content_copy );
?>
===DONE===
--EXPECTF--
*** Test curl_copy_handle() after exec() ***
string(106) "array(2) {
["test"]=>
string(7) "getpost"
["get_param"]=>
string(11) "Hello World"
}
array(0) {
}
"
===DONE===
http://cvs.php.net/viewvc.cgi/php-src/ext/curl/tests/curl_copy_handle_basic_005.phpt?view=markup&rev=1.1
Index: php-src/ext/curl/tests/curl_copy_handle_basic_005.phpt
+++ php-src/ext/curl/tests/curl_copy_handle_basic_005.phpt
--TEST--
Test curl_copy_handle() after exec() with POST
--CREDITS--
Rick Buitenman <[email protected]>
#testfest Utrecht 2009
--SKIPIF--
<?php if (!extension_loaded("curl") || false ===
getenv('PHP_CURL_HTTP_REMOTE_SERVER')) print "skip"; ?>
--FILE--
<?php
$host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
echo '*** Test curl_copy_handle() after exec() with POST ***' . "\n";
$url = "{$host}/get.php?test=getpost";
$ch = curl_init();
ob_start(); // start output buffering
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "Hello=World&Foo=Bar&Person=John%20Doe");
curl_setopt($ch, CURLOPT_URL, $url); //set the url we want to use
$curl_content = curl_exec($ch);
$copy = curl_copy_handle($ch);
curl_close($ch);
$curl_content_copy = curl_exec($copy);
curl_close($copy);
var_dump( $curl_content_copy );
?>
===DONE===
--XFAIL--
This test fails, the output of the copy seems to be corrupted if the original
is closed after exec()
--EXPECTF--
*** Test curl_copy_handle() after exec() with POST ***
string(163) "array(1) {
["test"]=>
string(7) "getpost"
}
array(3) {
["Hello"]=>
string(5) "World"
["Foo"]=>
string(3) "Bar"
["Person"]=>
string(8) "John Doe"
}
"
===DONE===
http://cvs.php.net/viewvc.cgi/php-src/ext/curl/tests/curl_copy_handle_basic_006.phpt?view=markup&rev=1.1
Index: php-src/ext/curl/tests/curl_copy_handle_basic_006.phpt
+++ php-src/ext/curl/tests/curl_copy_handle_basic_006.phpt
--TEST--
Test curl_copy_handle() with User Agent
--CREDITS--
Rick Buitenman <[email protected]>
#testfest Utrecht 2009
--SKIPIF--
<?php if (!extension_loaded("curl") || false ===
getenv('PHP_CURL_HTTP_REMOTE_SERVER')) print "skip"; ?>
--FILE--
<?php
$host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
echo '*** Testing curl copy handle with User Agent ***' . "\n";
$url = "{$host}/get.php?test=useragent";
$ch = curl_init();
ob_start(); // start output buffering
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, 'cURL phpt');
curl_setopt($ch, CURLOPT_URL, $url); //set the url we want to use
$copy = curl_copy_handle($ch);
curl_close($ch);
$curl_content = curl_exec($copy);
curl_close($copy);
var_dump( $curl_content );
?>
===DONE===
--EXPECTF--
*** Testing curl copy handle with User Agent ***
string(9) "cURL phpt"
===DONE===
http://cvs.php.net/viewvc.cgi/php-src/ext/curl/tests/curl_error_basic.phpt?view=markup&rev=1.1
Index: php-src/ext/curl/tests/curl_error_basic.phpt
+++ php-src/ext/curl/tests/curl_error_basic.phpt
--TEST--
curl_error() function - basic test for curl_error using a fake url
--CREDITS--
Mattijs Hoitink [email protected]
#Testfest Utrecht 2009
--SKIPIF--
<?php if (!extension_loaded("curl")) print "skip"; ?>
--FILE--
<?php
/*
* Prototype: string curl_error(resource $ch)
* Description: Returns a clear text error message for the last cURL
operation.
* Source: ext/curl/interface.c
* Documentation: http://wiki.php.net/qa/temp/ext/curl
*/
// Fake URL to trigger an error
$url = "fakeURL";
echo "== Testing curl_error with a fake URL ==\n";
// cURL handler
$ch = curl_init($url);
ob_start(); // start output buffering
curl_exec($ch);
echo "Error: " . curl_error($ch);
curl_close($ch);
?>
--EXPECT--
== Testing curl_error with a fake URL ==
Error: Couldn't resolve host 'fakeURL'
http://cvs.php.net/viewvc.cgi/php-src/ext/curl/tests/curl_multi_close_basic.phpt?view=markup&rev=1.1
Index: php-src/ext/curl/tests/curl_multi_close_basic.phpt
+++ php-src/ext/curl/tests/curl_multi_close_basic.phpt
--TEST--
curl_multi_close
--CREDITS--
Stefan Koopmanschap <[email protected]>
#testfest Utrecht 2009
--SKIPIF--
<?php
if (!extension_loaded('curl')) print 'skip';
?>
--FILE--
<?php
$ch = curl_multi_init();
curl_multi_close($ch);
var_dump($ch);
--EXPECT--
resource(4) of type (Unknown)
http://cvs.php.net/viewvc.cgi/php-src/ext/curl/tests/curl_multi_getcontent_basic3.phpt?view=markup&rev=1.1
Index: php-src/ext/curl/tests/curl_multi_getcontent_basic3.phpt
+++ php-src/ext/curl/tests/curl_multi_getcontent_basic3.phpt
--TEST--
Curl_multi_getcontent() basic test with different sources (local file/http)
--CREDITS--
Rein Velt ([email protected])
#TestFest Utrecht 20090509
--SKIPIF--
<?php
if (!extension_loaded('curl')) print 'skip';
?>
--FILE--
<?php
//CURL_MULTI_GETCONTENT TEST
//CREATE RESOURCES
$ch1=curl_init();
$ch2=curl_init();
//SET URL AND OTHER OPTIONS
curl_setopt($ch1, CURLOPT_URL, "http://php.net/robots.txt");
curl_setopt($ch2, CURLOPT_URL,
"file://".dirname(__FILE__)."/curl_testdata2.txt");
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
//CREATE MULTIPLE CURL HANDLE
$mh=curl_multi_init();
//ADD THE 2 HANDLES
curl_multi_add_handle($mh,$ch1);
curl_multi_add_handle($mh,$ch2);
//EXECUTE
$running=0;
do {
curl_multi_exec($mh,$running);
} while ($running>0);
$results1=curl_multi_getcontent($ch1);
$results2=curl_multi_getcontent($ch2);
//CLOSE
curl_multi_remove_handle($mh,$ch1);
curl_multi_remove_handle($mh,$ch2);
curl_multi_close($mh);
echo $results1;
echo $results2;
?>
--EXPECT--
User-agent: *
Disallow: /backend/
Disallow: /distributions/
Disallow: /stats/
Disallow: /source.php
Disallow: /search.php
Disallow: /mod.php
Disallow: /manual/add-note.php
CURL2
http://cvs.php.net/viewvc.cgi/php-src/ext/curl/tests/curl_multi_getcontent_error1.phpt?view=markup&rev=1.1
Index: php-src/ext/curl/tests/curl_multi_getcontent_error1.phpt
+++ php-src/ext/curl/tests/curl_multi_getcontent_error1.phpt
--TEST--
Curl_multi_getcontent() error test
--CREDITS--
Rein Velt ([email protected])
#TestFest Utrecht 20090509
--SKIPIF--
<?php
if (!extension_loaded('curl')) print 'skip';
?>
--FILE--
<?php
//CURL_MULTI_GETCONTENT TEST
//CREATE RESOURCES
$ch1=curl_init();
$ch2=curl_init();
//SET URL AND OTHER OPTIONS
curl_setopt($ch1, CURLOPT_URL,
"file://".dirname(__FILE__)."/curl_testdata1.txt");
curl_setopt($ch2, CURLOPT_URL,
"file://".dirname(__FILE__)."/curl_testdata2.txt");
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
//CREATE MULTIPLE CURL HANDLE
$mh=curl_multi_init();
//ADD THE 2 HANDLES
curl_multi_add_handle($mh,$ch1);
curl_multi_add_handle($mh,$ch2);
//EXECUTE
$running=0;
do {
curl_multi_exec($mh,$running);
} while ($running>0);
$results1=curl_multi_getcontent(); //no parameter
$results2=curl_multi_getcontent($ch2);
//CLOSE
curl_multi_remove_handle($mh,$ch1);
curl_multi_remove_handle($mh,$ch2);
curl_multi_close($mh);
echo $results1;
echo $results2;
?>
--EXPECTF--
Warning: curl_multi_getcontent() expects exactly 1 parameter, 0 given in %s on
line %d
CURL2
http://cvs.php.net/viewvc.cgi/php-src/ext/curl/tests/curl_multi_getcontent_error2.phpt?view=markup&rev=1.1
Index: php-src/ext/curl/tests/curl_multi_getcontent_error2.phpt
+++ php-src/ext/curl/tests/curl_multi_getcontent_error2.phpt
--TEST--
Curl_multi_getcontent() error test
--CREDITS--
Rein Velt ([email protected])
#TestFest Utrecht 20090509
--SKIPIF--
<?php
if (!extension_loaded('curl')) print 'skip';
?>
--FILE--
<?php
//CURL_MULTI_GETCONTENT TEST
//CREATE RESOURCES
$ch1=curl_init();
$ch2=curl_init();
//SET URL AND OTHER OPTIONS
curl_setopt($ch1, CURLOPT_URL,
"file://".dirname(__FILE__)."/curl_testdata1.txt");
curl_setopt($ch2, CURLOPT_URL,
"file://".dirname(__FILE__)."/curl_testdata2.txt");
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
//CREATE MULTIPLE CURL HANDLE
$mh=curl_multi_init();
//ADD THE 2 HANDLES
curl_multi_add_handle($mh,$ch1);
curl_multi_add_handle($mh,$ch2);
//EXECUTE
$running=0;
do {
curl_multi_exec($mh,$running);
} while ($running>0);
$results1=curl_multi_getcontent($ch1,$ch2); //no parameter
$results2=curl_multi_getcontent($ch2);
//CLOSE
curl_multi_remove_handle($mh,$ch1);
curl_multi_remove_handle($mh,$ch2);
curl_multi_close($mh);
echo $results1;
echo $results2;
?>
--EXPECTF--
Warning: curl_multi_getcontent() expects exactly 1 parameter, 2 given in %s on
line %d
CURL2
http://cvs.php.net/viewvc.cgi/php-src/ext/curl/tests/curl_multi_getcontent_error3.phpt?view=markup&rev=1.1
Index: php-src/ext/curl/tests/curl_multi_getcontent_error3.phpt
+++ php-src/ext/curl/tests/curl_multi_getcontent_error3.phpt
--TEST--
Curl_multi_getcontent() error test
--CREDITS--
Rein Velt ([email protected])
#TestFest Utrecht 20090509
--SKIPIF--
<?php
if (!extension_loaded('curl')) print 'skip';
?>
--FILE--
<?php
//CURL_MULTI_GETCONTENT TEST
//CREATE RESOURCES
$ch1=curl_init();
$ch2=curl_init();
//SET URL AND OTHER OPTIONS
curl_setopt($ch1, CURLOPT_URL,
"file://".dirname(__FILE__)."/curl_testdata1.txt");
curl_setopt($ch2, CURLOPT_URL,
"file://".dirname(__FILE__)."/curl_testdata2.txt");
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
//CREATE MULTIPLE CURL HANDLE
$mh=curl_multi_init();
//ADD THE 2 HANDLES
curl_multi_add_handle($mh,$ch1);
curl_multi_add_handle($mh,$ch2);
//EXECUTE
$running=0;
do {
curl_multi_exec($mh,$running);
} while ($running>0);
$ch1="string";
$results1=curl_multi_getcontent($ch1); //incorrect parameter type
$results2=curl_multi_getcontent($ch2);
//CLOSE
//curl_multi_remove_handle($mh,$ch1);
curl_multi_remove_handle($mh,$ch2);
curl_multi_close($mh);
echo $results1;
echo $results2;
?>
--EXPECTF--
Warning: curl_multi_getcontent() expects parameter 1 to be resource,
%unicode_string_optional% given in %s on line %d
CURL2
http://cvs.php.net/viewvc.cgi/php-src/ext/curl/tests/curl_multi_getcontent_error4.phpt?view=markup&rev=1.1
Index: php-src/ext/curl/tests/curl_multi_getcontent_error4.phpt
+++ php-src/ext/curl/tests/curl_multi_getcontent_error4.phpt
--TEST--
Curl_multi_getcontent() error test with undefined handle
--CREDITS--
Rein Velt ([email protected])
#TestFest Utrecht 20090509
--SKIPIF--
<?php
if (!extension_loaded('curl')) print 'skip';
?>
--FILE--
<?php
//CURL_MULTI_GETCONTENT TEST
//CREATE RESOURCES
//$ch1=undefined;
$ch2=curl_init();
//SET URL AND OTHER OPTIONS
curl_setopt($ch1, CURLOPT_URL,
"file://".dirname(__FILE__)."/curl_testdata1.txt");
curl_setopt($ch2, CURLOPT_URL,
"file://".dirname(__FILE__)."/curl_testdata2.txt");
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
//CREATE MULTIPLE CURL HANDLE
$mh=curl_multi_init();
//ADD THE 2 HANDLES
curl_multi_add_handle($mh,$ch1);
curl_multi_add_handle($mh,$ch2);
//EXECUTE
$running=0;
do {
curl_multi_exec($mh,$running);
} while ($running>0);
$results1=curl_multi_getcontent($ch1); //incorrect parameter type
$results2=curl_multi_getcontent($ch2);
//CLOSE
//curl_multi_remove_handle($mh,$ch1);
curl_multi_remove_handle($mh,$ch2);
curl_multi_close($mh);
echo $results1;
echo $results2;
?>
--EXPECTF--
Notice: Undefined variable: ch1 in %s on line %d
Warning: curl_setopt() expects parameter 1 to be resource, null given in %s on
line %d
Notice: Undefined variable: ch1 in %s on line %d
Warning: curl_setopt() expects parameter 1 to be resource, null given in %s on
line %d
Notice: Undefined variable: ch1 in %s on line %d
Warning: curl_multi_add_handle() expects parameter 2 to be resource, null given
in %s on line %d
Notice: Undefined variable: ch1 in %s on line %d
Warning: curl_multi_getcontent() expects parameter 1 to be resource, null given
in %s on line %d
CURL2
http://cvs.php.net/viewvc.cgi/php-src/ext/curl/tests/curl_multi_init_basic.phpt?view=markup&rev=1.1
Index: php-src/ext/curl/tests/curl_multi_init_basic.phpt
+++ php-src/ext/curl/tests/curl_multi_init_basic.phpt
--TEST--
Test curl_multi_init()
--CREDITS--
Mark van der Velden
#testfest Utrecht 2009
--SKIPIF--
<?php if (!extension_loaded("curl")) print "skip"; ?>
--FILE--
<?php
/* Prototype : resource curl_multi_init(void)
* Description : Returns a new cURL multi handle
* Source code : ext/curl/multi.c
* Test documentation: http://wiki.php.net/qa/temp/ext/curl
*/
// start testing
echo "*** Testing curl_multi_init(void); ***\n";
//create the multiple cURL handle
$mh = curl_multi_init();
var_dump($mh);
curl_multi_close($mh);
var_dump($mh);
?>
===DONE===
--EXPECTF--
*** Testing curl_multi_init(void); ***
resource(%d) of type (curl_multi)
resource(%d) of type (Unknown)
===DONE===
http://cvs.php.net/viewvc.cgi/php-src/ext/curl/tests/curl_multi_select_basic1.phpt?view=markup&rev=1.1
Index: php-src/ext/curl/tests/curl_multi_select_basic1.phpt
+++ php-src/ext/curl/tests/curl_multi_select_basic1.phpt
--TEST--
Test curl_multi_select()
--CREDITS--
Ivo Jansch <[email protected]>
#testfest Utrecht 2009
--SKIPIF--
<?php if (!extension_loaded("curl")) print "skip"; ?>
--FILE--
<?php
/* Prototype : resource curl_multi_select($mh, $timeout=1.0])
* Description : Get all the sockets associated with the cURL extension,
which can then be
* "selected"
* Source code : ?
* Test documentation: http://wiki.php.net/qa/temp/ext/curl
*/
//create the multiple cURL handle
$mh = curl_multi_init();
echo curl_multi_select($mh)."\n";
curl_multi_close($mh);
?>
--EXPECT--
0
http://cvs.php.net/viewvc.cgi/php-src/ext/curl/tests/curl_setopt_CURLOPT_FOLLOWLOCATION_open_basedir.phpt?view=markup&rev=1.1
Index:
php-src/ext/curl/tests/curl_setopt_CURLOPT_FOLLOWLOCATION_open_basedir.phpt
+++ php-src/ext/curl/tests/curl_setopt_CURLOPT_FOLLOWLOCATION_open_basedir.phpt
--TEST--
CURLOPT_FOLLOWLOCATION case check safe_mode and open_basedir
--CREDITS--
WHITE new media architects - Dennis
--INI--
open_basedir = DIRECTORY_SEPARATOR."tmp";
--SKIPIF--
<?php
if (!extension_loaded("curl")) print "skip cURL not loaded";
?>
--FILE--
<?php
print (ini_get("OPEN_BASEDIR"));
$ch = curl_init();
$succes = curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_close($ch);
var_dump($succes);
?>
--EXPECTF--
Warning: curl_setopt(): CURLOPT_FOLLOWLOCATION cannot be activated when %r(in
safe_mode or an )?%ropen_basedir is set in %s.php on line %d
bool(false)
http://cvs.php.net/viewvc.cgi/php-src/ext/curl/tests/curl_setopt_CURLOPT_READFUNCTION.phpt?view=markup&rev=1.1
Index: php-src/ext/curl/tests/curl_setopt_CURLOPT_READFUNCTION.phpt
+++ php-src/ext/curl/tests/curl_setopt_CURLOPT_READFUNCTION.phpt
--TEST--
cURL option CURLOPT_READFUNCTION
--CREDITS--
WHITE new media architects - Jeroen Vermeulen
#testfest Utrecht 2009
--SKIPIF--
<?php
if (!extension_loaded("curl")) print "skip cURL extension not loaded";
?>
--FILE--
<?php
function custom_readfunction($oCurl, $hReadHandle, $iMaxOut)
{
$sData = fread($hReadHandle,$iMaxOut-10); # -10 to have space to add "custom:"
if (!empty($sData))
{
$sData = "custom:".$sData;
}
return $sData;
}
$sFileBase =
dirname(__FILE__).DIRECTORY_SEPARATOR.'curl_opt_CURLOPT_READFUNCTION';
$sReadFile = $sFileBase.'_in.tmp';
$sWriteFile = $sFileBase.'_out.tmp';
$sWriteUrl = 'file://'.$sWriteFile;
file_put_contents($sReadFile,'contents of tempfile');
$hReadHandle = fopen($sReadFile, 'r');
$oCurl = curl_init();
curl_setopt($oCurl, CURLOPT_URL, $sWriteUrl);
curl_setopt($oCurl, CURLOPT_UPLOAD, 1);
curl_setopt($oCurl, CURLOPT_READFUNCTION, "custom_readfunction" );
curl_setopt($oCurl, CURLOPT_INFILE, $hReadHandle );
curl_exec($oCurl);
curl_close($oCurl);
fclose ($hReadHandle);
$sOutput = file_get_contents($sWriteFile);
var_dump($sOutput);
?>
===DONE===
--CLEAN--
<?php
$sFileBase =
dirname(__FILE__).DIRECTORY_SEPARATOR.'curl_opt_CURLOPT_READFUNCTION';
$sReadFile = $sFileBase.'_in.tmp';
$sWriteFile = $sFileBase.'_out.tmp';
unlink($sReadFile);
unlink($sWriteFile);
?>
--EXPECT--
string(27) "custom:contents of tempfile"
===DONE===
http://cvs.php.net/viewvc.cgi/php-src/ext/curl/tests/curl_setopt_array_basic.phpt?view=markup&rev=1.1
Index: php-src/ext/curl/tests/curl_setopt_array_basic.phpt
+++ php-src/ext/curl/tests/curl_setopt_array_basic.phpt
--TEST--
curl_setopt_array() function - tests setting multiple cURL options with
curl_setopt_array()
--CREDITS--
Mattijs Hoitink [email protected]
#Testfest Utrecht 2009
--SKIPIF--
<?php if (!extension_loaded("curl")) print "skip"; ?>
--FILE--
<?php
/*
* Prototype: bool curl_setopt_array(resource $ch, array $options)
* Description: Sets multiple options for a cURL session.
* Source: ext/curl/interface.c
* Documentation: http://wiki.php.net/qa/temp/ext/curl
*/
// Figure out what handler to use
if(!empty($_ENV['PHP_CURL_HTTP_REMOTE_SERVER'])) {
// Use the set Environment variable
$host = $_ENV['PHP_CURL_HTTP_REMOTE_SERVER'];
$url = "{$host}/get.php?test=get";
} else {
// Create a temporary file for the test
$tempname = tempnam(sys_get_temp_dir(), 'CURL_HANDLE');
$url = 'file://'. $tempname;
// add the test data to the file
file_put_contents($tempname, "Hello World!\nHello World!");
}
// Start the test
echo '== Starting test curl_setopt_array($ch, $options); ==' . "\n";
// curl handler
$ch = curl_init();
// options for the curl handler
$options = array (
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => 1
);
ob_start(); // start output buffering
curl_setopt_array($ch, $options);
$returnContent = curl_exec($ch);
curl_close($ch);
var_dump($returnContent);
?>
--EXPECT--
== Starting test curl_setopt_array($ch, $options); ==
string(25) "Hello World!
Hello World!"
http://cvs.php.net/viewvc.cgi/php-src/ext/curl/tests/curl_setopt_basic001.phpt?view=markup&rev=1.1
Index: php-src/ext/curl/tests/curl_setopt_basic001.phpt
+++ php-src/ext/curl/tests/curl_setopt_basic001.phpt
--TEST--
curl_setopt basic tests.
--CREDITS--
Paul Sohier
#phptestfest utrecht
--INI--
safe_mode=On
--SKIPIF--
<?php if (!extension_loaded("curl") || false ===
getenv('PHP_CURL_HTTP_REMOTE_SERVER')) print "skip"; ?>
--FILE--
<?php
$host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
// start testing
echo "*** Testing curl_setopt with CURLOPT_FOLLOWLOCATION in safemode\n";
$url = "{$host}/";
$ch = curl_init();
ob_start(); // start output buffering
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$curl_content = curl_exec($ch);
curl_close($ch);
var_dump( $curl_content );
?>
--EXPECTF--
PHP Warning: Directive 'safe_mode' is deprecated in PHP 5.3 and greater in
Unknown on line 0
*** Testing curl_setopt with CURLOPT_FOLLOWLOCATION in safemode
Warning: curl_setopt(): CURLOPT_FOLLOWLOCATION cannot be activated when in
safe_mode or an open_basedir is set in %s on line %d
bool(false)
http://cvs.php.net/viewvc.cgi/php-src/ext/curl/tests/curl_setopt_basic002.phpt?view=markup&rev=1.1
Index: php-src/ext/curl/tests/curl_setopt_basic002.phpt
+++ php-src/ext/curl/tests/curl_setopt_basic002.phpt
--TEST--
curl_setopt basic tests with CURLOPT_STDERR.
--CREDITS--
Paul Sohier
#phptestfest utrecht
--SKIPIF--
<?php if (!extension_loaded("curl") || false ===
getenv('PHP_CURL_HTTP_REMOTE_SERVER')) print "skip"; ?>
--FILE--
<?php
$host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
// start testing
echo "*** Testing curl_setopt with CURLOPT_STDERR\n";
$temp_file = tempnam(sys_get_temp_dir(), '');
$handle = fopen($temp_file, 'w');
$url = "{$host}/";
$ch = curl_init();
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_STDERR, $handle);
$curl_content = curl_exec($ch);
fclose($handle);
var_dump( curl_error($ch) );
var_dump( file_get_contents($temp_file));
@unlink ($temp_file);
$handle = fopen($temp_file, 'w');
ob_start(); // start output buffering
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_STDERR, $handle);
curl_setopt($ch, CURLOPT_URL, $url); //set the url we want to use
$data = curl_exec($ch);
fclose($handle);
ob_end_clean();
var_dump(file_get_contents($temp_file));
curl_close($ch);
@unlink($temp_file);
?>
--EXPECTF--
*** Testing curl_setopt with CURLOPT_STDERR
string(%d) "%S"
string(%d) "%S"
string(%d) "%S"
http://cvs.php.net/viewvc.cgi/php-src/ext/curl/tests/curl_setopt_basic003.phpt?view=markup&rev=1.1
Index: php-src/ext/curl/tests/curl_setopt_basic003.phpt
+++ php-src/ext/curl/tests/curl_setopt_basic003.phpt
--TEST--
curl_setopt() call with CURLOPT_HTTPHEADER
--CREDITS--
Paul Sohier
#phptestfest utrecht
--SKIPIF--
<?php if (!extension_loaded("curl") || false ===
getenv('PHP_CURL_HTTP_REMOTE_SERVER')) print "skip"; ?>
--FILE--
<?php
$host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
// start testing
echo "*** curl_setopt() call with CURLOPT_HTTPHEADER\n";
$url = "{$host}/";
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, 1);
$curl_content = curl_exec($ch);
curl_close($ch);
var_dump( $curl_content );
$ch = curl_init();
ob_start(); // start output buffering
curl_setopt($ch, CURLOPT_HTTPHEADER, array());
curl_setopt($ch, CURLOPT_URL, $host);
$curl_content = curl_exec($ch);
ob_end_clean();
curl_close($ch);
var_dump( $curl_content );
?>
--EXPECTF--
*** curl_setopt() call with CURLOPT_HTTPHEADER
Warning: curl_setopt(): You must pass either an object or an array with the
CURLOPT_HTTPHEADER, CURLOPT_QUOTE, CURLOPT_HTTP200ALIASES and CURLOPT_POSTQUOTE
arguments in %s on line %d
bool(false)
bool(true)
http://cvs.php.net/viewvc.cgi/php-src/ext/curl/tests/curl_setopt_basic004.phpt?view=markup&rev=1.1
Index: php-src/ext/curl/tests/curl_setopt_basic004.phpt
+++ php-src/ext/curl/tests/curl_setopt_basic004.phpt
--TEST--
curl_setopt() call with CURLOPT_RETURNTRANSFER
--CREDITS--
Paul Sohier
#phptestfest utrecht
--SKIPIF--
<?php if (!extension_loaded("curl") || false ===
getenv('PHP_CURL_HTTP_REMOTE_SERVER')) print "skip"; ?>
--FILE--
<?php
$host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
// start testing
echo "*** curl_setopt() call with CURLOPT_RETURNTRANSFER set to 1\n";
$url = "{$host}/";
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
$curl_content = curl_exec($ch);
curl_close($ch);
var_dump( $curl_content );
echo "*** curl_setopt() call with CURLOPT_RETURNTRANSFER set to 0\n";
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
curl_setopt($ch, CURLOPT_URL, $url);
ob_start();
$curl_content = curl_exec($ch);
ob_end_clean();
curl_close($ch);
var_dump( $curl_content );
?>
--EXPECTF--
*** curl_setopt() call with CURLOPT_RETURNTRANSFER set to 1
string(%d) "%a"
*** curl_setopt() call with CURLOPT_RETURNTRANSFER set to 0
bool(true)
http://cvs.php.net/viewvc.cgi/php-src/ext/curl/tests/curl_setopt_error.phpt?view=markup&rev=1.1
Index: php-src/ext/curl/tests/curl_setopt_error.phpt
+++ php-src/ext/curl/tests/curl_setopt_error.phpt
--TEST--
curl_setopt() basic parameter test
--CREDITS--
Paul Sohier
#phptestfest utrecht
--SKIPIF--
<?php if (!extension_loaded("curl")) print "skip"; ?>
--FILE--
<?php
echo "*** curl_setopt() call with incorrect parameters\n";
$ch = curl_init();
curl_setopt();
curl_setopt(false);
curl_setopt($ch);
curl_setopt($ch, false);
curl_setopt($ch, -1);
curl_setopt($ch, '');
curl_setopt($ch, 1, false);
curl_setopt(false, false, false);
curl_setopt($ch, '', false);
curl_setopt($ch, 1, '');
curl_setopt($ch, -1, 0);
?>
--EXPECTF--
*** curl_setopt() call with incorrect parameters
Warning: curl_setopt() expects exactly 3 parameters, 0 given in %s on line %d
Warning: curl_setopt() expects exactly 3 parameters, 1 given in %s on line %d
Warning: curl_setopt() expects exactly 3 parameters, 1 given in %s on line %d
Warning: curl_setopt() expects exactly 3 parameters, 2 given in %s on line %d
Warning: curl_setopt() expects exactly 3 parameters, 2 given in %s on line %d
Warning: curl_setopt() expects exactly 3 parameters, 2 given in %s on line %d
Warning: curl_setopt() expects parameter 1 to be resource, boolean given in %s
on line %d
Warning: curl_setopt() expects parameter 2 to be long,
%unicode_string_optional% given in %s on line %d
http://cvs.php.net/viewvc.cgi/php-src/ext/curl/tests/curl_testdata1.txt?view=markup&rev=1.1
Index: php-src/ext/curl/tests/curl_testdata1.txt
+++ php-src/ext/curl/tests/curl_testdata1.txt
http://cvs.php.net/viewvc.cgi/php-src/ext/curl/tests/curl_testdata2.txt?view=markup&rev=1.1
Index: php-src/ext/curl/tests/curl_testdata2.txt
+++ php-src/ext/curl/tests/curl_testdata2.txt
http://cvs.php.net/viewvc.cgi/php-src/ext/curl/tests/curl_write_callback.phpt?view=markup&rev=1.1
Index: php-src/ext/curl/tests/curl_write_callback.phpt
+++ php-src/ext/curl/tests/curl_write_callback.phpt
--TEST--
Test curl option CURLOPT_WRITEFUNCTION
--CREDITS--
Mathieu Kooiman <[email protected]>
Dutch UG, TestFest 2009, Utrecht
--DESCRIPTION--
Writes the value 'test' to a temporary file. Use curl to access this file,
passing the output into a callback. Tests the PHP_CURL_USER case in curl_write.
--SKIPIF--
<?php if (!extension_loaded("curl")) print "skip"; ?>
--FILE--
<?php
function curl_callback($curl_handle, $received_data)
{
echo $received_data;
return strlen($received_data);
}
$log_file = tempnam(sys_get_temp_dir(), 'php-curl-test');
$fp = fopen($log_file, 'w+');
fwrite($fp, "test");
fclose($fp);
$ch = curl_init();
curl_setopt($ch, CURLOPT_WRITEFUNCTION, 'curl_callback');
curl_setopt($ch, CURLOPT_URL, 'file://' . $log_file);
curl_exec($ch);
curl_close($ch);
// cleanup
unlink($log_file);
?>
--EXPECT--
test
http://cvs.php.net/viewvc.cgi/php-src/ext/curl/tests/curl_write_file.phpt?view=markup&rev=1.1
Index: php-src/ext/curl/tests/curl_write_file.phpt
+++ php-src/ext/curl/tests/curl_write_file.phpt
--TEST--
Test curl option CURLOPT_FILE
--CREDITS--
Mathieu Kooiman <[email protected]>
Dutch UG, TestFest 2009, Utrecht
--DESCRIPTION--
Writes the value 'test' to a temporary file. Use curl to access this file and
store the output in another temporary file. Tests the PHP_CURL_FILE case in
curl_write().
--SKIPIF--
<?php if (!extension_loaded("curl")) print "skip"; ?>
--FILE--
<?php
$test_file = tempnam(sys_get_temp_dir(), 'php-curl-test');
$log_file = tempnam(sys_get_temp_dir(), 'php-curl-test');
$fp = fopen($log_file, 'w+');
fwrite($fp, "test");
fclose($fp);
$testfile_fp = fopen($test_file, 'w+');
$ch = curl_init();
curl_setopt($ch, CURLOPT_FILE, $testfile_fp);
curl_setopt($ch, CURLOPT_URL, 'file://' . $log_file);
curl_exec($ch);
curl_close($ch);
fclose($testfile_fp);
echo file_get_contents($test_file);
// cleanup
unlink($test_file);
unlink($log_file);
?>
--EXPECT--
test
http://cvs.php.net/viewvc.cgi/php-src/ext/curl/tests/curl_write_return.phpt?view=markup&rev=1.1
Index: php-src/ext/curl/tests/curl_write_return.phpt
+++ php-src/ext/curl/tests/curl_write_return.phpt
--TEST--
Test curl option CURLOPT_RETURNTRANSFER
--CREDITS--
Mathieu Kooiman <[email protected]>
Dutch UG, TestFest 2009, Utrecht
--DESCRIPTION--
Writes the value 'test' to a temporary file. Use curl to access this file and
have it return the content from curl_exec(). Tests the PHP_CURL_RETURN case
of curl_write().
--SKIPIF--
<?php if (!extension_loaded("curl")) print "skip"; ?>
--FILE--
<?php
$log_file = tempnam(sys_get_temp_dir(), 'php-curl-test');
$fp = fopen($log_file, 'w+');
fwrite($fp, "test");
fclose($fp);
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, 'file://' . $log_file);
$result = curl_exec($ch);
curl_close($ch);
echo $result;
// cleanup
unlink($log_file);
?>
--EXPECT--
test
http://cvs.php.net/viewvc.cgi/php-src/ext/curl/tests/curl_write_stdout.phpt?view=markup&rev=1.1
Index: php-src/ext/curl/tests/curl_write_stdout.phpt
+++ php-src/ext/curl/tests/curl_write_stdout.phpt
--TEST--
Test curl option CURLOPT_FILE with STDOUT handle
--CREDITS--
Mathieu Kooiman <[email protected]>
Dutch UG, TestFest 2009, Utrecht
--DESCRIPTION--
Writes the value 'test' to a temporary file. Use curl to access this file and
store the output in another temporary file. Tests the PHP_CURL_FILE case in
curl_write().
--SKIPIF--
<?php if (!extension_loaded("curl")) print "skip"; ?>
--FILE--
<?php
$log_file = tempnam(sys_get_temp_dir(), 'php-curl-test');
$fp = fopen($log_file, 'w+');
fwrite($fp, "test");
fclose($fp);
$ch = curl_init();
curl_setopt($ch, CURLOPT_FILE, STDOUT);
curl_setopt($ch, CURLOPT_URL, 'file://' . $log_file);
curl_exec($ch);
curl_close($ch);
// cleanup
unlink($log_file);
?>
--EXPECT--
test
http://cvs.php.net/viewvc.cgi/php-src/ext/curl/tests/curl_writeheader_callback.phpt?view=markup&rev=1.1
Index: php-src/ext/curl/tests/curl_writeheader_callback.phpt
+++ php-src/ext/curl/tests/curl_writeheader_callback.phpt
--TEST--
Test curl option CURLOPT_HEADERFUNCTION
--CREDITS--
Mathieu Kooiman <[email protected]>
Dutch UG, TestFest 2009, Utrecht
--DESCRIPTION--
Hit the host identified by PHP_CURL_HTTP_REMOTE_SERVER and determine that the
headers are sent to the callback specified for CURLOPT_HEADERFUNCTION.
Different test servers specified for PHP_CURL_HTTP_REMOTE_SERVER might return
different sets of headers. Just test for HTTP/1.1 200 OK.
--SKIPIF--
<?php if (!extension_loaded("curl") || false ===
getenv('PHP_CURL_HTTP_REMOTE_SERVER')) print "skip"; ?>
--FILE--
<?php
function curl_header_callback($curl_handle, $data)
{
if (strtolower(substr($data,0, 4)) == 'http')
echo $data;
}
$host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADERFUNCTION, 'curl_header_callback');
curl_setopt($ch, CURLOPT_URL, $host);
curl_exec($ch);
curl_close($ch);
?>
--EXPECT--
HTTP/1.1 200 OK
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php