【发布时间】:2011-03-22 01:28:11
【问题描述】:
我有一些代码,简化后看起来像:
$fout = fsockopen($host, 80); stream_set_timeout($fout, 10*3600); // 10个小时 $fin = fopen($file, 'rb'); // 不是真正的文件流,但这里的代理足够好 $readbytes = stream_copy_to_stream($fin, $fout); if(!$readbytes) die('复制失败');但是,我有时会收到以下类型的错误:
注意:stream_copy_to_stream():发送 952 字节失败,errno=104 Connection reset by peer in ... 注意:stream_copy_to_stream(): 发送 952 字节失败,errno=32 Broken pipe in ...并且在那里检查 $readbytes 不会发现错误。 我知道可以通过复制的字节数检查文件的总长度,但这只有在可以提前确定流的总长度时才有效。
由于这种情况是随机发生的,我认为连接只是由于某种奇怪的原因而被断开(但如果有人有任何建议来减少这种情况发生的可能性,我会全力以赴)。但是很高兴能够知道转移是否完全成功。 无论如何都可以在没有以下情况下检测问题:
- 必须提前知道流的长度
- 挂钩到 PHP 错误处理程序以获取错误
...或者也许使用缓冲的 fread/fwrite 循环,检查写入的字节长度,这是最好的解决方案?
谢谢。
【问题讨论】:
标签: php