1--TEST--
2PUT multipart
3--EXTENSIONS--
4zend_test
5--SKIPIF--
6<?php include "skipif.inc"; ?>
7--FILE--
8<?php
9
10require_once "tester.inc";
11
12$cfg = <<<EOT
13[global]
14error_log = {{FILE:LOG}}
15[unconfined]
16listen = {{ADDR}}
17pm = dynamic
18pm.max_children = 5
19pm.start_servers = 1
20pm.min_spare_servers = 1
21pm.max_spare_servers = 3
22EOT;
23
24$code = <<<'EOT'
25<?php
26$_POST = ['post_global'];
27$_FILES = ['files_global'];
28[$post, $files] = request_parse_body();
29$file_path = __DIR__ . '/put_multipart_uploaded_file.txt';
30move_uploaded_file($files[0]['tmp_name'], $file_path);
31$file_content = file_get_contents($file_path);
32unlink($file_path);
33echo json_encode([
34    'post' => $post,
35    'files' => $files,
36    'file_content' => $file_content,
37    'post_global' => $_POST,
38    'files_global' => $_FILES,
39], JSON_PRETTY_PRINT);
40EOT;
41
42$tester = new FPM\Tester($cfg, $code);
43$tester->start();
44$tester->expectLogStartNotices();
45echo $tester
46    ->request(method: 'PUT', stdin: [
47        'parts' => [
48            [
49                "disposition" => "form-data",
50                "param" => "name",
51                "name" => "get_parameter",
52                "value" => "foo",
53            ],
54            [
55                "disposition" => "form-data",
56                "param" => "filename",
57                "name" => "uploaded_file",
58                "value" => "bar",
59            ],
60        ],
61    ])
62    ->getBody();
63$tester->terminate();
64$tester->expectLogTerminatingNotices();
65$tester->close();
66
67?>
68--EXPECTF--
69{
70    "post": {
71        "get_parameter": "foo"
72    },
73    "files": [
74        {
75            "name": "uploaded_file",
76            "full_path": "uploaded_file",
77            "type": "",
78            "tmp_name": "%s",
79            "error": 0,
80            "size": 3
81        }
82    ],
83    "file_content": "bar",
84    "post_global": [
85        "post_global"
86    ],
87    "files_global": [
88        "files_global"
89    ]
90}
91--CLEAN--
92<?php
93require_once "tester.inc";
94FPM\Tester::clean();
95$file_path = __DIR__ . '/put_multipart_uploaded_file.txt';
96@unlink($file_path);
97?>
98