0

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

在将对象发送到服务器之前,如何获取对象的字节大小。我正在做一个soapCall,所以我必须在调用之前设置标题,而不是添加参数curl或其他东西。

4

2 回答 2

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
于 2013-01-15T05:35:19.623 回答
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 */

如果这对于您的目的来说太笼统了,也许可以考虑指定您要发送给用户的“对象”。

于 2013-01-15T05:28:00.223 回答