脳みそスワップアウト

揮発性なもので。おもにPHPのこととか。

UPLOAD_ERR_PARTIALのシミュレーション

UPLOAD_ERR_PARTIAL を発生させる手順のメモ。

ファイルアップロードの途中でTCPセッションが切れた場合などにこれになる。
モバイル端末など、細い回線で発生しやすい。

このエラーを再現させるには、Content-Length に満たない multipart なリクエストを送り、途中で切断すればよい。
これで「ファイルの送信中に回線切れ」のような状況を作れる。
ncでできる。

$ nc <ipaddr> 80
POST /recvFile.php HTTP/1.1
Host: www.example.com
Content-Length: 500000
Content-Type: multipart/form-data; boundary=---------------------------12345

-----------------------------12345
Content-Disposition: form-data; name="img1"; filename="hoge.jpg"
Content-Type: image/jpeg

aaa

### ここで Ctrl+C で nc を止める(切断) すると、UPLOAD_ERR_PARTIAL が発生する

recvFile.php

<?php
$line = var_export($_FILES, true) . "\n";
$logfile = __DIR__ . '/test.log';

error_log($line, 3, $logfile);