我需要设置 php header("Content-Length: length")
,其中 length 是一个字节值。现在,由于我的发布请求的大小可变,我已将其任意设置为 1 兆字节,但我想动态生成它,以免出现错误数据。
在将对象发送到服务器之前,如何获取对象的字节大小。我正在做一个soapCall
,所以我必须在调用之前设置标题,而不是添加参数curl
或其他东西。
我需要设置 php header("Content-Length: length")
,其中 length 是一个字节值。现在,由于我的发布请求的大小可变,我已将其任意设置为 1 兆字节,但我想动态生成它,以免出现错误数据。
在将对象发送到服务器之前,如何获取对象的字节大小。我正在做一个soapCall
,所以我必须在调用之前设置标题,而不是添加参数curl
或其他东西。
您可以执行以下操作(应该有更好的,我知道):
$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
我不熟悉 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 */
如果这对于您的目的来说太笼统了,也许可以考虑指定您要发送给用户的“对象”。