Я обнаружил, что метод HTTP PUT хорош для подобных вещей. Вам, конечно, не нужно кодировать файл, и, скорее всего, не следует беспокоиться о сжатии и т. Д. Практического ограничения размера не существует. Он быстрый и использует фиксированный объем памяти независимо от размера файла.
Эта функция будет HTTP PUT файл с локального диска на удаленный URL
//Specify the location of a tmp file
function PutFile($sName, $sFile)
{
$URL = "http://MY-SERVER/PutFile.php?FileName=" . urlencode($sName);
$FILE = fopen($sFile, 'rb');
$curl = curl_init($URL);
curl_setopt($curl, CURLOPT_HEADER,0);
curl_setopt($curl, CURLOPT_PUT, 1);
curl_setopt($curl, CURLOPT_INFILE, $FILE);
ob_start();
curl_exec($curl);
$sReturn = ob_get_contents();
ob_end_clean();
curl_close($curl);
fclose($FILE);
return $sReturn;
}
На удаленном конце это PutFile.php
<?php
$Name = (get and **validate** file name from $_GET['FileName'];
$Path = /somewhere/to/put/the/file/ + $Name
set_time_limit(3);
$f1 = fopen('php://input', 'rb');
$f2 = fopen($Path, 'wb');
while($data = fread($f1, 4096))
{
fwrite($f2, $data);
}
fclose($f1);
fclose($f2);
echo "Success\n";
Если вы не хотите записывать его на диск, а работаете с ним в памяти, вы можете просто использовать file_get_contents('php://stdin')
.