php获取对象的字节长度,用于标头

时间:2013-01-15 05:13:00

标签: php soap content-length

我需要设置php header("Content-Length: length"),其中length是一个字节值。由于我的发布请求的大小可变,我现在任意将其设置为1兆字节,但我想动态生成它,以便没有错误的数据。

在将对象发送到服务器之前,如何获取对象的字节大小。我正在制作soapCall所以我必须在拨打电话之前设置标头,而不是向curl或其他内容添加参数。

2 个答案:

答案 0 :(得分:2)

你可以做以下事情(我应该知道更好的事情):

$before = memory_get_usage(TRUE);
$objectClone = clone $yourObject;
$after = memory_get_usage(TRUE);
$objectSize = $after - $before;  #size of your object
$objectClone = $null; #dispose of clone

答案 1 :(得分:0)

我不熟悉SOAP,如果这不适用于您的情况,请原谅我。

我不得不在不久前为我的个人项目解决了这个问题,我动态生成并将大型ZIP流式传输给用户。我的解决方案是通过生成一次并记录其大小来预先计算对象的大小。这个解决方案的缺点是,如果对象的内容发生变化,则需要重新计算大小,但是如果你有大量不经常更改的有限数量的对象,它可能适合你。

我使用的代码看起来像这样:

ob_start();
$zip_length = 0;
$zip = new ZipStream();
foreach ($files as $virtual_path => $file_path) {
    $zip->add_file_from_path($virtual_path, $file_path);
    $zip_length += strlen(ob_get_contents());
    ob_clean(); /* prevent excessive memory usage */
}
$zip->finish();
$zip_length += strlen(ob_get_contents());
ob_end_clean();
/* Store $zip_length somewhere */

如果这种情况过于笼统,可以考虑指定您发送给用户的“对象”。