Commit:    15c351cc52971eb9a1a6c16a760cc0f7777681c5
Author:    Michael Wallner <m...@php.net>         Mon, 5 Aug 2013 13:53:35 +0200
Parents:   69aed1b61fd87633a4decc75e190abc24848172a
Branches:  master

Link:       
http://git.php.net/?p=php-src.git;a=commitdiff;h=15c351cc52971eb9a1a6c16a760cc0f7777681c5

Log:
add NEWS entry; add simple test

Changed paths:
  M  NEWS
  M  sapi/cli/tests/php_cli_server.inc
  A  sapi/cli/tests/upload_2G.phpt


Diff:
diff --git a/NEWS b/NEWS
index c679b90..3ef4a97 100644
--- a/NEWS
+++ b/NEWS
@@ -6,6 +6,7 @@ PHP                                                             
           NEWS
   . Improved IS_VAR operands fetching. (Laruence, Dmitry)
   . Implemented internal operator overloading
     (RFC: https://wiki.php.net/rfc/operator_overloading_gmp). (Nikita)
+  . Enabled file uploads greater than 2G (Ralf Lang, Mike)
 
 - mysqlnd:
   . Disabled flag for SP OUT variables for 5.5+ servers as they are not 
natively
diff --git a/sapi/cli/tests/php_cli_server.inc 
b/sapi/cli/tests/php_cli_server.inc
index 40c5361..77a79e0 100644
--- a/sapi/cli/tests/php_cli_server.inc
+++ b/sapi/cli/tests/php_cli_server.inc
@@ -3,7 +3,7 @@ define ("PHP_CLI_SERVER_HOSTNAME", "localhost");
 define ("PHP_CLI_SERVER_PORT", 8964);
 define ("PHP_CLI_SERVER_ADDRESS", 
PHP_CLI_SERVER_HOSTNAME.":".PHP_CLI_SERVER_PORT);
 
-function php_cli_server_start($code = 'echo "Hello world";', $no_router = 
FALSE) {
+function php_cli_server_start($code = 'echo "Hello world";', $no_router = 
FALSE, $cmd_args = null) {
        $php_executable = getenv('TEST_PHP_EXECUTABLE');
        $doc_root = __DIR__;
        $router = "index.php";
@@ -19,14 +19,14 @@ function php_cli_server_start($code = 'echo "Hello 
world";', $no_router = FALSE)
        );
 
        if (substr(PHP_OS, 0, 3) == 'WIN') {
-               $cmd = "{$php_executable} -t {$doc_root} -n -S " . 
PHP_CLI_SERVER_ADDRESS;
+               $cmd = "{$php_executable} -t {$doc_root} -n {$cmd_args} -S " . 
PHP_CLI_SERVER_ADDRESS;
                if (!$no_router) {
                        $cmd .= " {$router}";
                }
 
                $handle = proc_open(addslashes($cmd), $descriptorspec, $pipes, 
$doc_root, NULL, array("bypass_shell" => true,  "suppress_errors" => true));
        } else {
-               $cmd = "exec {$php_executable} -t {$doc_root} -n -S " . 
PHP_CLI_SERVER_ADDRESS;
+               $cmd = "exec {$php_executable} -t {$doc_root} -n {$cmd_args} -S 
" . PHP_CLI_SERVER_ADDRESS;
                if (!$no_router) {
                        $cmd .= " {$router}";
                }
diff --git a/sapi/cli/tests/upload_2G.phpt b/sapi/cli/tests/upload_2G.phpt
new file mode 100644
index 0000000..c7ae5c6
--- /dev/null
+++ b/sapi/cli/tests/upload_2G.phpt
@@ -0,0 +1,99 @@
+--TEST--
+file upload greater than 2G
+--SKIPIF--
+<?php
+include "skipif.inc";
+
+if (PHP_INT_SIZE < 8) {
+       die("skip need PHP_INT_SIZE>=8");
+}
+
+if ($f = fopen("/proc/meminfo","r")) {
+       while (!feof($f)) {
+               if (!strncmp($line = fgets($f), "MemFree", 7)) {
+                       if (substr($line,8)/1024/1024 > 3) {
+                               $enough_free_ram = true;
+                       }
+               }
+       }
+}
+                               
+if (empty($enough_free_ram)) {
+       die("need +3G free RAM");
+}
+?>
+--FILE--
+<?php
+
+echo "Test\n";
+
+include "php_cli_server.inc";
+
+php_cli_server_start("var_dump(\$_FILES);", false, 
+       "-d post_max_size=3G -d upload_max_filesize=3G");
+
+list($host, $port) = explode(':', PHP_CLI_SERVER_ADDRESS);
+$port = intval($port)?:80;
+$length = 2150000000;
+$output = "";
+
+$fp = fsockopen($host, $port, $errno, $errstr, 0.5);
+if (!$fp) {
+  die("connect failed");
+}
+
+$prev = "----123
+Content-Type: text/plain
+Content-Disposition: form-data; name=\"file1\"; filename=\"file1.txt\"\n\n";
+$post = "\n----123--\n";
+$total = $length + strlen($prev) + strlen($post);
+
+fwrite($fp, <<<EOF
+POST /index.php HTTP/1.1
+Host: {$host}
+Content-Type: multipart/form-data; boundary=--123
+Content-Length: {$total}
+
+{$prev}
+EOF
+) or die("write prev failed");
+
+$data = str_repeat("0123456789", 10000);
+for ($i = 0; $i < $length; $i += 10000 * 10) {
+       fwrite($fp, $data) or die("write failed @ ($i)");
+}
+
+fwrite($fp, $post) or die("write post failed");
+
+while (!feof($fp)) {
+       $output .= fgets($fp);
+}
+echo $output;
+fclose($fp);
+?>
+Done
+--EXPECTF--
+Test
+
+HTTP/1.1 200 OK
+Host: %s
+Connection: close
+X-Powered-By: PHP/%s
+Content-type: text/html
+
+array(1) {
+  ["file1"]=>
+  array(5) {
+    ["name"]=>
+    string(9) "file1.txt"
+    ["type"]=>
+    string(10) "text/plain"
+    ["tmp_name"]=>
+    string(14) "/tmp/php%s"
+    ["error"]=>
+    int(0)
+    ["size"]=>
+    int(2150000000)
+  }
+}
+Done


--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to