所以在我的示例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; ?>
答案 0 :(得分:0)
file_get_contents
和simplexml_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;
}