Я работал над добавлением функциональности на сайт, изначально написанный на PHP 4.4.9. Перенос сайта на PHP5 не в их бюджете, так что даже не предлагайте этого. (Хотя это сильно нужно). Проблема, с которой я сталкиваюсь, заключается в том, как скопировать двоичные данные из запроса GET в расположение файла на сервере. Код, который в настоящее время написан для поддержки этого метода, выглядит следующим образом:
function save($path) {
$input = fopen("php://input", "r");
$temp = tmpfile();
$realSize = stream_copy_to_stream($input, $temp);
fclose($input);
if ($realSize != $this->getSize()){
return false;
}
$target = fopen($path, "w");
fseek($temp, 0, SEEK_SET);
stream_copy_to_stream($temp, $target);
fclose($target);
}
Проблема, с которой я сталкиваюсь, заключается в том, что функция stream_copy_to_stream
поддерживается только в PHP 5. Вот что у меня есть, но кажется, что я создаю только файлы размером 8 КБ, и я не уверен Зачем. Теоретически он должен допускать до 20 млн.
function save($path) {
$input = fopen("php://input", "rb");
$temp = tmpfile();
fwrite($temp, fread($input, 20971520));
fclose($input);
$target = fopen($path, "w");
fseek($temp, 0, SEEK_SET);
#stream_copy_to_stream($temp, $target);
fwrite($target, fread($temp, 20971520));
fclose($target);
echo $path;
return true;
}
Я удалил проверку размера, потому что я не мог найти способ получить размер файла при чтении. Любая помощь очень ценится в этом. Я буквально часами ломал голову и знаю, что есть кто-то, скорее всего, на стеке, который может ответить на мой вопрос, вероятно, очень легко.
Заранее всем спасибо за помощь!
Кроме того, я отправляю данные через GET, чтобы разрешить загрузку нескольких файлов с индикаторами выполнения и т. Д.