我推荐jeroen的输出缓冲解决方案,但我会将其添加为一个很酷的选择。
从这里使用课程 http://www.php.net/manual/en/stream.streamwrapper.example-1.php
class VariableStream { var $position; var $varname; function stream_open($path, $mode, $options, &$opened_path) { $url = parse_url($path); $this->varname = $url["host"]; $this->position = 0; return true; } function stream_read($count) { $ret = substr($GLOBALS[$this->varname], $this->position, $count); $this->position += strlen($ret); return $ret; } function stream_write($data) { $left = substr($GLOBALS[$this->varname], 0, $this->position); $right = substr($GLOBALS[$this->varname], $this->position + strlen($data)); $GLOBALS[$this->varname] = $left . $data . $right; $this->position += strlen($data); return strlen($data); } function stream_tell() { return $this->position; } function stream_eof() { return $this->position >= strlen($GLOBALS[$this->varname]); } function stream_seek($offset, $whence) { switch ($whence) { case SEEK_SET: if ($offset < strlen($GLOBALS[$this->varname]) && $offset >= 0) { $this->position = $offset; return true; } else { return false; } break; case SEEK_CUR: if ($offset >= 0) { $this->position += $offset; return true; } else { return false; } break; case SEEK_END: if (strlen($GLOBALS[$this->varname]) + $offset >= 0) { $this->position = strlen($GLOBALS[$this->varname]) + $offset; return true; } else { return false; } break; default: return false; } } function stream_metadata($path, $option, $var) { if($option == STREAM_META_TOUCH) { $url = parse_url($path); $varname = $url["host"]; if(!isset($GLOBALS[$varname])) { $GLOBALS[$varname] = ''; } return true; } return false; } }
然后就可以了
stream_wrapper_register("var", "VariableStream") or die("Failed to register protocol"); $GLOBALS['binaryImageContent'] = ''; imagejpg($im, 'var://binaryImageContent'); $data = $GLOBALS['binaryImageContent']; echo strlen($data);
您可以使用输出缓冲:
ob_start(); imagejpeg($image, NULL, 100); $image_data = ob_get_contents(); ob_end_clean();
澄清一下,如果你看一下 imagejpeg的手册 ,您将看到可以使用它来写入文件或直接输出原始图像流,具体取决于第二个参数。我正在使用输出缓冲来捕获原始图像流。
你可以“生成内存”,但我不知道你打算如何存储图像供以后检索。如果您计划在每次有人加载页面时调整图像大小,那么您将耗费大量CPU时间。由于没有选项可以直接写入磁盘(真的吗?)让我建议您至少将图像存储为MySQL数据库中的BLOB。虽然这种方法效率低下并且不是很好的做法,但每次刷新页面时,一遍又一遍地做同样的工作仍然会更好。
更一般地说,我建议倾销“捐赠”提供商并获得真正的网络服务。几乎每个网络托管公司都提供一些MySQL和PHP的风格。对于使用率较低的共享主机,您可能会以10美元 - 20美元/月的价格购买。 PHP 4.3.9于2004年发布。要找到该特定版本的良好文档很难,你不能忽视从那时起修复的错误数量。