summaryrefslogtreecommitdiff
path: root/ext/curl/tests
diff options
context:
space:
mode:
authorChristoph M. Becker <cmbecker69@gmx.de>2019-04-29 10:21:07 +0200
committerChristoph M. Becker <cmbecker69@gmx.de>2019-12-09 10:30:00 +0100
commit17a9f1401aeb35fe1e3657b38102a410d151d42f (patch)
tree6072761475ccb857be4c6b535101934eb94536c4 /ext/curl/tests
parente1202733a50eada07c1b0b934f626aaf2d3179dc (diff)
downloadphp-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.phpt32
-rw-r--r--ext/curl/tests/curl_copy_handle_variation3.phpt38
-rw-r--r--ext/curl/tests/curl_file_upload_stream.phpt28
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===