有条件地使用基于XML文件的文件大小的file_put_contents

时间:2017-03-28 18:11:13

标签: php

我从Amazon API获得XML响应

$dom = new DOMDocument();
$dom->loadXML($response->toXML());

我尝试过使用PHP的filesize功能,但它没有通过echo输出任何内容。

$xml1 = simplexml_load_string($dom->saveXML());
$filesize = filesize($xml1);

尝试这个

$filesize = filesize($dom->saveXML());

没有输出文件大小。

我得到的空白xml响应是354字节,所以我试图做这样的事情

if ($filesize > '360') {
     $file_name = "List_".time().".xml";
     file_put_contents($file_name, $dom->saveXML());
}

但是我只能在使用file_put_contents之后才能获得文件大小......就这样

      $file_name = "ListOrders_".time().".xml";
      file_put_contents($file_name, $dom->saveXML());
      $filesize = filesize($file_name);
      echo '<br />filesize: ' . $filesize . '<br />';

在使用file_put_contents

之前,是否要检查XML文件的文件大小

3 个答案:

答案 0 :(得分:1)

尝试使用PHP的内置输出缓冲系统。 PHP output buffering

ob_start();

echo $dom->saveXML();

$filesize = ob_get_length();

$currentXML = ob_get_clean(); // Return the Template

if ($filesize > '360') {
    $file_name = "List_".time().".xml";
    file_put_contents($file_name, currentXML);
}

答案 1 :(得分:1)

对于您的特定用途,您可以使用该条件的否定或相反版本AFTER file_put_contents来检查它是否低于360,然后如果条件失败则使用unlink函数删除该文件。

$file_name = "ListOrders_".time().".xml";
file_put_contents($file_name, $dom->saveXML());
$filesize = filesize($file_name);

if($filesize < 360){
  unlink($file_name);
}

答案 2 :(得分:0)

filesize()的问题在于它需要文件路径。您的文件尚未保存,因此您无法依赖它。

没有参数的

$dom->saveXML()返回一个xml字符串。将其保存在变量中并使用strlen()检查文件的长度,并确定文件大小。

$strXML  = $dom->saveXML();
$filesize = strlen($strXML); 
$maxFileSize = 300;

if ($filesize < $maxFileSize){
    file_put_contents("myfile_name.xml",$strXML);
}