任务是从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);
}
也很好。
所以我有点困惑,为什么如果将相同的资源存储在内存中,同一资源就不应该有效?
第二条评论使我提出了正确的问题。然后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);
}