用PHP测量网络带宽

用PHP测量网络带宽,php,network-programming,dropbox-api,Php,Network Programming,Dropbox Api,我正在将大文件(1gb+)从Dropbox传输到YouTube,并想告知用户交易大概需要多少时间。有什么方法可以用PHP测量网络流量吗 我确实找到了linux shell()的解决方案,但没有找到PHP的解决方案 除了通知用户,我还想检查保证的带宽(100 mbit/s),因为我有几次遇到网络问题(带宽太低)。创建一个linux bash脚本,并使用或函数从PHP运行它。我真的不知道您是否试图进行评估或向用户提供“实时”反馈 如果你正在做一个估计,我想你可以按照操作系统的路线做一个“exec”(

我正在将大文件(1gb+)从Dropbox传输到YouTube,并想告知用户交易大概需要多少时间。有什么方法可以用PHP测量网络流量吗

我确实找到了linux shell()的解决方案,但没有找到PHP的解决方案


除了通知用户,我还想检查保证的带宽(100 mbit/s),因为我有几次遇到网络问题(带宽太低)。

创建一个linux bash脚本,并使用或函数从PHP运行它。

我真的不知道您是否试图进行评估或向用户提供“实时”反馈

如果你正在做一个估计,我想你可以按照操作系统的路线做一个“exec”(比如@kost建议的),它会告诉你当前的负载。不用想太多了

那么,让我们转到实时解决方案:)

首先看一下ReactPHP(),然后看一下ReactPHP()的streams实现

我们的想法是创建一个可读的流,在这个流中,您将从您的源(DropBox?)读取数据块,并且在这样做的同时,您将不断计算剩余时间并将其写入可写的流,例如Web套接字

下面是一个从大型本地文件读取、计算%并写入stdoud的小示例:

<?php
require 'vendor/autoload.php';
$loop = React\EventLoop\Factory::create();
$read = new \React\Stream\Stream(fopen('hugefile.txt', 'r+'), $loop);
$fileStats = fstat($read->stream);
$totalSize = $fileStats['size'];
$chunkSize = $totalSize/100;
$currChunk = 1;
$write = new \React\Stream\Stream(fopen('php://stdout', 'w+'), $loop);
$totalReadBytes = 0;
$read->on('data', function ($data, $read) use ($write, &$totalReadBytes, $totalSize, &$currChunk, $chunkSize) {
  $totalReadBytes += strlen($data);
  if($totalReadBytes > ($chunkSize * $currChunk)){
    $currChunk = ceil(($totalReadBytes/$totalSize)*100);
    $write->write(sprintf('%010d',$totalReadBytes).'/'.sprintf('%010d',$totalSize).' - '.$currChunk.'%'.PHP_EOL);
  }
});
$loop->run();

这当然是可能的,但我一直在寻找一个纯PHP解决方案。所以,您想实时反馈进度(速度、剩余kb等)?因为我认为ReactPHP将是正确的工具:)如果是,我可以提供一个小例子。否则,如果您只想根据当前负载进行估算,请按照@kost所说的去做,不要想得太多;)我个人不喜欢操作系统路径,它会对操作系统产生依赖,一旦你进入bash脚本,你就会打开一罐蠕虫。这是一个很棒的解决方案,它可以用语言保存东西。我没有尝试过,但是这个概念是合理的。另外:因为ReactPHP基本上是NodeJS的无耻副本,所以我发布的代码和想法的概念可以很容易地在NodeJS中实现(代码应该看起来很像)。有了这一点,我并不是说ReactPHP更差或更好:)我只是认为你可以用Node获得同样的结果,他们的文档也更好,有了ReactPHP,你会发现你自己在深入研究代码以找出答案。@JhulianoMoreno:管道正是我们正在做的:(Dropbox到YouTube)。我会调查的。非常感谢。@Jan,因为您的应用程序的主要目的似乎是处理流。如果可能的话,请尝试使用NodeJS路径,不要误会我的意思!我认为ReactPHP是一个伟大的计划,也是一个很棒的工具,但不幸的是,它还处于早期阶段,您将遇到“早期采用者的麻烦”。祝你的项目好运:)!虽然这似乎仍处于测试阶段,但它仍然有效。然而,正如您所建议的,我将采用系统路线,因为它看起来仍然更值得信赖。