diff options
author | Christoph M. Becker <cmbecker69@gmx.de> | 2019-04-29 10:21:07 +0200 |
---|---|---|
committer | Christoph M. Becker <cmbecker69@gmx.de> | 2019-12-09 10:30:00 +0100 |
commit | 17a9f1401aeb35fe1e3657b38102a410d151d42f (patch) | |
tree | 6072761475ccb857be4c6b535101934eb94536c4 /ext/curl/tests | |
parent | e1202733a50eada07c1b0b934f626aaf2d3179dc (diff) | |
download | php-git-17a9f1401aeb35fe1e3657b38102a410d151d42f.tar.gz |
Extend CURLFile to support streams
Due to former restrictions of the libcurl API, curl multipart/formdata
file uploads supported only proper files. However, as of curl 7.56.0
the new `curl_mime_*()` API is available (and already supported by
PHP[1]), which allows us to support arbitrary *seekable* streams, which
is generally desirable, and particularly resolves issues with the
transparent Unicode and long part support on Windows (see bug #77711).
Note that older curl versions are still supported, but CURLFile is
still restricted to proper files in this case.
[1] <http://git.php.net/?p=php-src.git;a=commit;h=a83b68ba56714bfa06737a61af795460caa4a105>
(cherry picked from commit c68dc6b5e37e74d89e0a387079139c054c8faa81)
Diffstat (limited to 'ext/curl/tests')
-rw-r--r-- | ext/curl/tests/bug77711.phpt | 32 | ||||
-rw-r--r-- | ext/curl/tests/curl_copy_handle_variation3.phpt | 38 | ||||
-rw-r--r-- | ext/curl/tests/curl_file_upload_stream.phpt | 28 |
3 files changed, 98 insertions, 0 deletions
diff --git a/ext/curl/tests/bug77711.phpt b/ext/curl/tests/bug77711.phpt new file mode 100644 index 0000000000..148c26322a --- /dev/null +++ b/ext/curl/tests/bug77711.phpt @@ -0,0 +1,32 @@ +--TEST-- +FR #77711 (CURLFile should support UNICODE filenames) +--SKIPIF-- +<?php include 'skipif.inc'; ?> +--FILE-- +<?php +include 'server.inc'; +$host = curl_cli_server_start(); + +$ch = curl_init(); +curl_setopt($ch, CURLOPT_SAFE_UPLOAD, 1); +curl_setopt($ch, CURLOPT_URL, "{$host}/get.php?test=file"); +curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + +$filename = __DIR__ . '/АБВ.txt'; +file_put_contents($filename, "Test."); +$file = curl_file_create($filename); +$params = array('file' => $file); +var_dump(curl_setopt($ch, CURLOPT_POSTFIELDS, $params)); + +var_dump(curl_exec($ch)); +curl_close($ch); +?> +===DONE=== +--EXPECTF-- +bool(true) +string(%d) "АБВ.txt|application/octet-stream" +===DONE=== +--CLEAN-- +<?php +@unlink(__DIR__ . '/АБВ.txt'); +?> diff --git a/ext/curl/tests/curl_copy_handle_variation3.phpt b/ext/curl/tests/curl_copy_handle_variation3.phpt new file mode 100644 index 0000000000..18f35f71b1 --- /dev/null +++ b/ext/curl/tests/curl_copy_handle_variation3.phpt @@ -0,0 +1,38 @@ +--TEST-- +curl_copy_handle() allows to post CURLFile multiple times +--SKIPIF-- +<?php include 'skipif.inc'; ?> +--FILE-- +<?php +include 'server.inc'; +$host = curl_cli_server_start(); + +$ch1 = curl_init(); +curl_setopt($ch1, CURLOPT_SAFE_UPLOAD, 1); +curl_setopt($ch1, CURLOPT_URL, "{$host}/get.php?test=file"); +curl_setopt($ch1, CURLOPT_RETURNTRANSFER, 1); + +$filename = __DIR__ . '/АБВ.txt'; +file_put_contents($filename, "Test."); +$file = curl_file_create($filename); +$params = array('file' => $file); +var_dump(curl_setopt($ch1, CURLOPT_POSTFIELDS, $params)); + +$ch2 = curl_copy_handle($ch1); + +var_dump(curl_exec($ch1)); +curl_close($ch1); + +var_dump(curl_exec($ch2)); +curl_close($ch2); +?> +===DONE=== +--EXPECTF-- +bool(true) +string(%d) "АБВ.txt|application/octet-stream" +string(%d) "АБВ.txt|application/octet-stream" +===DONE=== +--CLEAN-- +<?php +@unlink(__DIR__ . '/АБВ.txt'); +?> diff --git a/ext/curl/tests/curl_file_upload_stream.phpt b/ext/curl/tests/curl_file_upload_stream.phpt new file mode 100644 index 0000000000..03c85b4b82 --- /dev/null +++ b/ext/curl/tests/curl_file_upload_stream.phpt @@ -0,0 +1,28 @@ +--TEST-- +CURL file uploading from stream +--SKIPIF-- +<?php include 'skipif.inc'; ?> +<?php +if (curl_version()['version_number'] < 0x73800) die('skip requires curl >= 7.56.0'); +--FILE-- +<?php +include 'server.inc'; +$host = curl_cli_server_start(); + +$ch = curl_init(); +curl_setopt($ch, CURLOPT_SAFE_UPLOAD, 1); +curl_setopt($ch, CURLOPT_URL, "{$host}/get.inc?test=file"); +curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + +$file = curl_file_create('data://text/plain;base64,SSBsb3ZlIFBIUAo=', 'text/plain', 'i-love-php'); +$params = array('file' => $file); +var_dump(curl_setopt($ch, CURLOPT_POSTFIELDS, $params)); + +var_dump(curl_exec($ch)); +curl_close($ch); +?> +===DONE=== +--EXPECT-- +bool(true) +string(21) "i-love-php|text/plain" +===DONE=== |