1--TEST-- 2file upload greater than 2G 3--SKIPIF-- 4<?php 5include "skipif.inc"; 6 7if (PHP_INT_SIZE < 8) { 8 die("skip need PHP_INT_SIZE>=8"); 9} 10 11if ($f = fopen("/proc/meminfo","r")) { 12 while (!feof($f)) { 13 if (!strncmp($line = fgets($f), "MemFree", 7)) { 14 if (substr($line,8)/1024/1024 > 3) { 15 $enough_free_ram = true; 16 } 17 } 18 } 19} 20 21if (empty($enough_free_ram)) { 22 die("skip need +3G free RAM"); 23} 24 25if (getenv('TRAVIS')) { 26 die("skip Fails intermittently on travis"); 27} 28?> 29--FILE-- 30<?php 31 32echo "Test\n"; 33 34include "php_cli_server.inc"; 35 36php_cli_server_start("var_dump(\$_FILES);", false, 37 "-d post_max_size=3G -d upload_max_filesize=3G"); 38 39list($host, $port) = explode(':', PHP_CLI_SERVER_ADDRESS); 40$port = intval($port)?:80; 41$length = 2150000000; 42$output = ""; 43 44$fp = fsockopen($host, $port, $errno, $errstr, 0.5); 45if (!$fp) { 46 die("connect failed"); 47} 48 49$prev = "----123 50Content-Type: text/plain; charset=UTF-8 51Content-Disposition: form-data; name=\"file1\"; filename=\"file1.txt\"\n\n"; 52$post = "\n----123--\n"; 53$total = $length + strlen($prev) + strlen($post); 54 55fwrite($fp, <<<EOF 56POST /index.php HTTP/1.1 57Host: {$host} 58Content-Type: multipart/form-data; boundary=--123 59Content-Length: {$total} 60 61{$prev} 62EOF 63) or die("write prev failed"); 64 65$data = str_repeat("0123456789", 10000); 66for ($i = 0; $i < $length; $i += 10000 * 10) { 67 fwrite($fp, $data) or die("write failed @ ($i)"); 68} 69 70fwrite($fp, $post) or die("write post failed"); 71 72while (!feof($fp)) { 73 $output .= fgets($fp); 74} 75echo $output; 76fclose($fp); 77?> 78Done 79--EXPECTF-- 80Test 81HTTP/1.1 200 OK 82Host: %s 83Date: %s 84Connection: close 85X-Powered-By: PHP/%s 86Content-type: text/html; charset=UTF-8 87 88array(1) { 89 ["file1"]=> 90 array(5) { 91 ["name"]=> 92 string(9) "file1.txt" 93 ["type"]=> 94 string(10) "text/plain" 95 ["tmp_name"]=> 96 string(%d) "%s" 97 ["error"]=> 98 int(0) 99 ["size"]=> 100 int(2150000000) 101 } 102} 103Done 104