使用php

时间:2017-08-07 22:28:11

标签: php xml

所以在我的示例php脚本中我有

$get = file_get_contents('some-book/book.xml');
$arr = simplexml_load_string($get);?>
echo $arr->title;
echo "<br>";
echo $arr->year;
echo "<br>";

我得到(正如预期的那样)

Some Book Title
2012

现在问题是当我尝试在foreach中加载xml时,xml不会加载。

$dir = ".";
$exclude = array( ".","..",".*","*.php" );
if (is_dir($dir)) {
    $files = array_diff(scandir($dir), $exclude);
    foreach ($files as $file) : ?>

        <?php
          $filepath = str_replace(' ', '%20', $file);
          $get = file_get_contents( $filepath.'/'.$filepath.'.xml');
          $arr = simplexml_load_string($get);
          print_r($arr);
        ?>

        <li class="list-group-item">
            <div class="col-xs-4 col-sm-3">
                <img src="<?= $filepath ?>/folder.jpg" alt="<?= $file ?>" class="img-responsive" />
                    </div>
                    <div class="col-xs-8 col-sm-9">
                        <a href="<?= $file ?>">
                          <?php echo $arr->title; ?>
                        </a>
                    </div>
                    <div class="clearfix"></div>
                </li>

        <?php $arr = ''?>

    <?php endforeach;
}

此行应该加载xml

$get = file_get_contents( $filepath.'/'.$filepath.'.xml');

,此行应回显xml数据中的书名

<?php echo $arr->title; ?>

1 个答案:

答案 0 :(得分:0)

file_get_contentssimplexml_load_string都会在失败时返回布尔值false。我建议添加一些防御性检查,以找出究竟出了什么问题。

$get = file_get_contents( $filepath.'/'.$filepath.'.xml');
if ($get === false) {
  echo 'failed to read ' . $filepath . '/' . $filepath . '.xml <br>';
  var_dump(file_exists($filepath.'/'.$filepath.'.xml'));
  // if file_exists returns true, check the file permissions
  continue;
}

$arr = simplexml_load_string($get);
if ($arr === false) {
  echo 'check if ' . $filepath . ' contains valid xml <br>';
  continue;
}