PHP загрузка с PUT требует вдвое большего размера файла в / tmp - PullRequest
0 голосов
/ 21 апреля 2020

Возьмите следующий случай:

Создайте файл remote.php обработайте загрузки как:

<?php
$datosPUT = fopen("php://input", "r");
$fp = fopen("/data/uploaded_file", "w");
while ($datos = fread($datosPUT, 1024))
  fwrite($fp, $datos);
fclose($fp);
fclose($datosPUT);

Чем:

  1. fallocate -l 20G 20G.img для генерации файл размером 20 ГБ
  2. curl -v -T 20G.img "http://test.lan/remote.php" для его загрузки (дождитесь сообщения We are completely uploaded and fine here, возвращаемого curl, и проверьте /tmp содержимое и размер папки)
  3. Проверьте /tmp содержимое (других действий нет) на сервере)
root@nc:/tmp# ll
total 44231688
drwxrwxrwt  9 root    root            4096 Apr 21 17:08 ./
drwxr-xr-x 23 root    root            4096 Apr 21 13:05 ../
-rw-------  1 test www-data   524288000 Apr 21 17:07 php0Bl5R0
-rw-------  1 test www-data   524288000 Apr 21 17:04 php1I3GXF
-rw-------  1 test www-data   524288000 Apr 21 17:02 php5hBopR
-rw-------  1 test www-data   524288000 Apr 21 17:07 php6GdBl1
-rw-------  1 test www-data   524288000 Apr 21 17:02 php8SoZP8
-rw-------  1 test www-data   524288000 Apr 21 16:55 php94C1P7
-rw-------  1 test www-data   524288000 Apr 21 17:01 phpAj4E6K
-rw-------  1 test www-data   524288000 Apr 21 17:00 phpbFMioX
-rw-------  1 test www-data   524288000 Apr 21 16:57 phpbpMui8
-rw-------  1 test www-data   524288000 Apr 21 17:08 phpbr44Fm
-rw-------  1 test www-data   524288000 Apr 21 17:00 phpC7eAlS
-rw-------  1 test www-data   524288000 Apr 21 17:06 phpDqkjJA
-rw-------  1 test www-data   503316480 Apr 21 17:08 phpE3WWF8
-rw-------  1 test www-data   524288000 Apr 21 16:59 phpgg58CF
-rw-------  1 test www-data   524288000 Apr 21 16:57 phpgTn7yU
-rw-------  1 test www-data   524288000 Apr 21 16:59 phpH5Rofn
-rw-------  1 test www-data   524288000 Apr 21 17:02 phpHB2eXd
-rw-------  1 test www-data   524288000 Apr 21 16:58 phphB2RRt
-rw-------  1 test www-data   524288000 Apr 21 17:04 phpHFsJ93
-rw-------  1 test www-data   524288000 Apr 21 17:06 phpIXaJuR
-rw-------  1 test www-data   524288000 Apr 21 17:01 phpjM1Odf
-rw-------  1 test www-data 21474836480 Apr 21 17:08 phpkbPZho
-rw-------  1 test www-data   524288000 Apr 21 16:57 phpkpFvIV
-rw-------  1 test www-data   524288000 Apr 21 17:07 phpKxwy4v
-rw-------  1 test www-data   524288000 Apr 21 16:55 phpliytUl
-rw-------  1 test www-data   524288000 Apr 21 17:06 phpLvOcDN
-rw-------  1 test www-data   524288000 Apr 21 17:01 phpLXjWwW
-rw-------  1 test www-data   524288000 Apr 21 16:59 phpMIhuqB
-rw-------  1 test www-data   524288000 Apr 21 16:57 phpORClLm
-rw-------  1 test www-data   524288000 Apr 21 16:55 phpPmZnEN
-rw-------  1 test www-data   524288000 Apr 21 17:02 phprygofc
-rw-------  1 test www-data   524288000 Apr 21 17:05 phps1bH65
-rw-------  1 test www-data   524288000 Apr 21 17:07 phptMDOMB
-rw-------  1 test www-data   524288000 Apr 21 17:00 phpU6EVla
-rw-------  1 test www-data   524288000 Apr 21 16:55 phpubJd7r
-rw-------  1 test www-data   524288000 Apr 21 17:03 phpuDOvG2
-rw-------  1 test www-data   524288000 Apr 21 16:55 phpVoUm9U
-rw-------  1 test www-data   524288000 Apr 21 17:05 phpwL1OFG
-rw-------  1 test www-data   524288000 Apr 21 17:04 phpwN7SBU
-rw-------  1 test www-data   524288000 Apr 21 17:06 phpyi8xnZ
-rw-------  1 test www-data   524288000 Apr 21 17:01 phpZ44p88
-rw-------  1 test www-data   524288000 Apr 21 17:05 phpzoLawe

Я ожидал только phpkbPZho файла, но не других.

Как видите, мой /tmp имеет размер 40 Гб для 20 Гб загрузки, почему это поведение? Временные файлы очищаются после загрузки, но нам нужно 40 ГБ свободного места для загрузки файла 20 ГБ ...

...