PHP获取XML值,FOREACH创建用户并复制图像.什么是错误的


PHP get XML values, FOREACH create user and copy image. Whats wrong?

所以我有这个cron.php做一些任务每15分钟。Cron工作得很好,但是我的php代码有问题,我不能弄清楚。

我想将远程xml文件复制到本地文件夹(这是有效的),然后,通过xml文件解析并获得所有display_name和image_url值。然后,用用户名创建一个本地文件夹,并将其拇指复制到那里…这能有多难?我已经忙了5天了

你能帮忙吗?

#!/usr/local/bin/php -f
<?php
// Copy remote xml to local dir
copy ('http://www.remoteweb.com/api/?format=xml', '/includes/cache/feed.xml');

// connects to xml
$xmlor = '/includes/cache/feed.xml';
$doc = New DOMDocument();
$doc->load($xmlor);
// gets xml values as vars
$resource = new SimpleXMLElement($xmlor, null, true);
foreach( $doc->getElementsByTagName('display_name') as $user ) {
// create dir with username
if (!file_exists('/includes/cache/_thumbs/'$user'')) {
    mkdir('/includes/cache/_thumbs/'$user'', 0755, true);
}
foreach( $doc->getElementsByTagName('image_url') as $thumb ) {
// copy user thumb to user folder
copy ($thumb, '/includes/cache/_thumbs/'$user'');
                        }
                }
?>

第20、21和26行有语法错误,与$user和单引号字符串的连接有关。

将变量$user的值附加到字符串中,使用以下语法:

'/includes/cache/_thumbs/' . $user

然而,这可能不是你的代码的全部错误。DOMDocument::getElementsByTagName返回一个您正在与foreach迭代的DOMNodeList$user将是DOMElement类型的对象。直接将其与字符串连接将导致致命错误"Object of class DOMElement could not be convert to string"。

所以我建议将标记'something'$user''替换为:

'something' . $user->nodeValue

XML示例:

<response>
<resource>
<display_name>Madsprings</display_name>
<image_url>https://serverexample.com/avatar/madsprings.jpg</image_url>
</resource>
</response>

所以我把代码改成了

$xml = simplexml_load_file("/home/sgs/public_html/includes/cache/ctbfeed.xml");
foreach($user = $xml->xpath("//response//resource//display_name") as $ctb_user){
echo $ctb_user;
if (!file_exists('/includes/cache/_thumbs/' . $ctb_user)) {
    mkdir('/includes/cache/_thumbs/' . $ctb_user, 0755, true);
        }
foreach($thumb = $xml->xpath("//response//resource//image_url") as $thumb_url){
$path = parse_url($thumb_url, PHP_URL_PATH);
$local_thumb = basename($path);
copy ($thumb_url, ('/includes/cache/_thumbs/' . $ctb_user . '/' . $local_thumb));
        }
}

,它似乎工作:)