curl — PHP отправляет очень большой многокомпонентный файл на другой веб-сервер

Я написал некоторый код, используя потоки, которые отправляют файл через мультиформную запись на другой сайт. Так что это код php сервера для -> другого веб-сервера. В настоящее время я не могу использовать «curl», я ограничен потоками.

Моя проблема (комментарий ниже, проблема здесь) заключается в том, что если я столкнусь с очень большим файлом, он может исчерпать память на веб-сервере php.

Есть ли способ работы с потоками PHP для прямой записи в поток запросов при использовании потока php, который указывает на URL (конечная точка rest api)? сейчас, после того, как все собрано вместе, он выдает

file_get_contents (…)

Итак, вот фрагмент кода, который создает и отправляет файл.

    private function getOptionsForMulitPartFile($request, $cred, $file)
{

$mimeType = $this->getMimeType($file);
$contentType = 'Content-Type: multipart/form-data; boundary=' . MULTIPART_BOUNDARY;
$contentLength = "Content-Length: " . filesize($file->getFilePathAndName());

$file_contents = $file->readWholeFile(); //<----Concern here, that file maybe too large.

$data =  "--" . MULTIPART_BOUNDARY . "\r\n" .
"Content-Disposition: form-data; name=\"".FORM_FIELD."\"; filename=\"" . basename($file->getFilePathAndName()) . "\"\r\n" .
"Content-Type: " . $mimeType . "\r\n\r\n" . $file_contents."\r\n";

$data  .=  "--". MULTIPART_BOUNDARY . "--\r\n";

// set up the request context

return $this->createOption($request, $cred, $data, $contentType, $contentLength);
}

0

Решение

При чтении больших файлов вы можете использовать ob_flush () + stream_copy_to_stream методы, так что каждый X байт, который вы читаете из файла, вы можете перенести на другой сервер.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]