PHP кодирование JPEG из местоположения ftp без локального файла - PullRequest
0 голосов
/ 27 января 2020

Задача состоит в том, чтобы прочитать JPEG из местоположения ftp и закодировать его в base64 без какого-либо локального сохранения между ними.

Пока это мое кодирование:

$memstream = fopen('php://memory', 'r+');
if (ftp_fget($ftp_conn, $memstream, $imgLocation, FTP_BINARY)) {
    rewind($memstream);
    ob_start();
        imagejpeg($memstream);
        $contents = ob_get_contents(); 
    ob_end_clean();
    $vCard->add('PHOTO', base64_encode($contents), ['TYPE' => 'JPEG', 'ENCODING' => 'b']);
    fclose($memstream);
}

Но я получаю в строке imagejpeg($memstream); ошибка: предоставленный ресурс не является допустимым ресурсом изображения ...

Я проверяю ресурс с сохранением загруженного образа локально:

$imgFile = fopen('test.jpg', 'r+');
if (ftp_fget($ftp_conn, $imgFile, $imgLocation, FTP_BINARY)) {
    fclose($imgFile);
}

и это хорошо.

Так что я немного озадачен, почему тот же ресурс не должен быть действительным, если я храню его в памяти?

1 Ответ

0 голосов
/ 27 января 2020

Второй комментарий привел меня к правильному вопросу. Тогда Google был достаточно любезен, чтобы указать мне на stream_get_contents:

if (ftp_fget($ftp_conn, $memStream, $imgLocation, FTP_BINARY)) {
    rewind($memStream);
    $contents = stream_get_contents($memStream);
    $vCard->add('PHOTO', base64_encode($contents), ['TYPE' => 'JPEG', 'ENCODING' => 'b']);
    fclose($memStream);
}
...