PHP从ftp位置编码JPEG,没有本地文件

问题描述 投票:0回答:1

任务是从ftp位置读取JPEG并将其编码为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);
}

也很好。

所以我有点困惑,为什么如果将相同的资源存储在内存中,同一资源就不应该有效?

php image jpeg in-memory
1个回答
0
投票

第二条评论使我提出了正确的问题。然后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);
}
© www.soinside.com 2019 - 2024. All rights reserved.