【问题标题】:check exist external XML with short time短时间内检查是否存在外部 XML
【发布时间】:2013-06-24 07:00:29
【问题描述】:

我需要在短时间内通过检查外部 XML 文件来解决我的问题。 如果我使用函数if (fopen($sxml[$looppocet], "r")) 并且我有更多的 XML 文件,例如 15,所以这需要很长时间,我需要配置执行时间,但这很难解决。 如果该文件存在,我需要检查一个文件,如果不存在则继续进入我的周期,这样打印我的错误和下一步下一个文件。

请问我该如何解决这个问题?

【问题讨论】:

  • file/exists() 仅适用于本地文件,但我需要检查外部文件,例如 (domain/fresh.xml)
  • 如果你不能修改那个外部服务器,那么我怀疑本地会有任何“短时间”的解决方案,因为我认为主要的瓶颈是与外部服务器通信所花费的时间,无论如何您使用的方法。
  • 我无法修改,因为那不是服务器而是外部硬件,我使用他的 XML 文件从这个硬件中读取值。我在我的国家有 20 个这样的硬件,我需要从所有这些中读取值硬件。但问题是......如果有人因为断电而关闭了硬件,那么我的网站将等待 30 秒来获取这个 XML。如果关闭更多硬件,那么这对于长时间加载和缺少 XML 的错误来说是个大问题:(
  • @RastislavNad' 这就是问题所在。瓶颈是花费在沟通上的时间,这通常是无法避免的。如果可能且合理,您可以尝试定期在服务器上缓存外部 XML。

标签: xml load external fopen


【解决方案1】:

我的解决方案是...我使用此功能检查了外部设备上的 ping。

function icmpChecksum($data){
if (strlen($data)%2)
$data .= "\x00";

$bit = unpack('n*', $data);
$sum = array_sum($bit);

while ($sum >> 16)
$sum = ($sum >> 16) + ($sum & 0xffff);

return pack('n*', ~$sum);
}
// Making the package
$type= "\x08";
$code= "\x00";
$checksum= "\x00\x00";
$identifier = "\x00\x00";
$seqNumber = "\x00\x00";
$data= "Scarface";
$package = $type.$code.$checksum.$identifier.$seqNumber.$data;
$checksum = icmpChecksum($package); // Calculate the checksum
$package = $type.$code.$checksum.$identifier.$seqNumber.$data;
// And off to the sockets
$socket = socket_create(AF_INET, SOCK_RAW, 1);
socket_set_option ( $socket, SOL_SOCKET, SO_RCVTIMEO, array("sec"=>1, "usec"=>0) );
socket_connect($socket, 192.168.0.1, null);
$startTime = microtime(true);
socket_send($socket, $package, strLen($package), 0);
if (false === (@socket_read($socket, 255))) {       
            echo "Harddware is OFF--->";
    } else {
            echo "Harddware is ON--->";
           }

如果我使用带有 shell 功能的经典 ping,那对我来说完全不稳定 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-17
    • 2016-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-11
    • 2019-07-16
    相关资源
    最近更新 更多