0

phpを設定する必要がありheader("Content-Length: length")ます。ここで、lengthはバイト値です。現在、POSTリクエストのサイズが可変であるため、任意に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 に答える