更新此问题...我正在开发一个小型CMS。数据以XML格式保存。我正在尝试访问正确的图像字段以更新文件名并删除当前图像。
脚本根据调用的位置获取变量。在这种情况下,$ page =“homes”,$ elem =“home”和$ field = 0.以下是在图片上传时调用的。
if (!empty($_FILES)) {
$field = $_POST['field'];
$tempFile = $_FILES['upload']['tmp_name'];
$targetFile = "img/sections/".$_POST['page']."/";
$targetFile .= basename($_FILES['upload']['name']);
if (move_uploaded_file($tempFile,$targetFile)) {
$file = "spice.xml";
$load = simplexml_load_file($file);
$old_img = $load->sections->$page->$elem[$field]['img'];
$load->sections->$page->$elem[$field]['img'] = $targetFile;
file_put_contents($file, $xml->saveXML());
unlink($old_img);
}
}
这是XML文件的结构:
<spice>
<sections>
<homes>
<home img="img/sections/home/img1.jpg"/>
<home img="img/sections/home/img2.jpg"/>
<home img="img/sections/home/img3.jpg"/>
</homes>
</sections>
</spice>
我的问题是$ old_img给了我一个“不能将字符串偏移用作数组”错误。如果我只用值替换$ elem和$ field变量,那么一切正常。
答案 0 :(得分:3)
PHP将[$field]
偏移量解释为变量$elem
的一部分而不是整个属性$load->sections->$page->$elem
,这可能是您的问题所在。在视觉上,这正是PHP所寻求的:
// The character at the 0th ($field) position of 'home' ($elem) is 'h'
'h'['img']
导致您看到的错误,因为字符串偏移是字符串,而不是数组。
试试这个。注意$elem
周围的花括号。
$old_img = $load->sections->$page->{$elem}[$field]['img'];
$load->sections->$page->{$elem}[$field]['img'] = $targetFile;
答案 1 :(得分:3)
使用XPath的替代代码:
$load = simplexml_load_file($file);
$path=$load->xpath('//sections/'.$page.'/'.$elem);
$path[$field]['img']=$targetFile;