【问题标题】:PHP for each loop, parse_str receiving "Notice: Undefined index: title"PHP 为每个循环,parse_str 接收“通知:未定义索引:标题”
【发布时间】:2019-05-02 02:41:55
【问题描述】:

我有以下 PHP 代码:

<?php
$file = "Links.txt";
$parts = new SplFileObject($file); // this is your array of words

foreach($parts as $word) {
    $content = file_get_contents($word);
    parse_str($content, $ytarr);
    echo $ytarr['title'];
    unset($content);
}
?>

请注意:

  • Links.txt 文件包含多个外部 URL,每一行只有一个 URL。示例:

www.External-URL-number-ONE.com

www.External-URL-number-TWO.com

www.External-URL-number-THREE.com

  • 每个 URL 在变量 $content 中都有 'title' 项(在使用“file_get_contents($word);”填充之后。
  • 出于故障排除的目的,我通过将每个 URL 添加到“links.txt”单中来测试每个 URL。结果是每个 URL 都成功。如果我添加多个 URL,就会出现问题。在这种情况下,行为是:

错误信息和结果:

注意:未定义索引:第 13 行 C:\xampp\htdocs\PHPexample\index.php 中的标题

显示“www.External-URL-number-THREE.com”的标题

我该如何解决这个问题?它也应该适用于多行。

提前致谢。

编辑:

变量$content的内容为:

数组(

[reason] => Invalid parameters.

[status] => fail

[errorcode] => 2

)

数组(

[ISD] => 928398

[enable] => 1

[list] => 39/9339/30

[AMP] => 

[host] =>     

[title] => This_Is_the_Title_Three

[token] => 1

)

更新

我使用 isset() 在访问数组之前检查它。并且每个循环只有最后一个有索引。

【问题讨论】:

  • $content的内容是什么?我不明白为什么 parse_str 可能是这里的正确选择。
  • “每个 url 在内容文件内容中都有标题项” - 采用什么形式/语法?
  • @Jeff $content 是通过访问 URL 读取的文件内容。但如上所述,它适用于每个 URL。仅当“Links.txt”文件包含多个 URL 时才会出现该错误。
  • 你能给我一个链接让我看看吗?
  • 是的,要查看结构和编码... list.txt 中的 URL 有前缀“http://”?

标签: php arrays loops


【解决方案1】:

读取文件并逐行读取

<?PHP 
$file = "Links.txt";
$handle = @fopen($file, "r");

if ($handle) {
    // Read line by line
    while (($word = fgets($handle)) !== false) {
        $content = file_get_contents($word);

        // parse_str($content, $ytarr);  // parse_str don't work in this case
        //echo @$ytarr['title'];
        //unset($content);

        echo getDataTag($content, 'title');
    }
    fclose($handle);
}


//This is a dirty solution
function getDataTag($str, $tag){
    $str = str_replace('+',' ',$str);
    $data = explode(($tag.'='),$str);
    $data = explode('&',$data[1]);
    return $data[0];
}

?>

【讨论】:

  • 感谢您的回答。但是你的代码的结果是一样的。它仍然只显示最后一个 URL 的标题。我想显示每个 URL 的标题。
  • 只定义了las URL中的标题,parse_str在这种情况下不起作用,我编辑了答案。
  • 不是真的,因为只用一个 URL 试试你的代码。您会看到,标题是在每个 URL 上定义的。不幸的是,您编辑的答案不起作用....注意:未定义的偏移量:1 in....并且标题也已编码。
  • 您是否使用我上面在 cmets 中提到的 URL 测试了您的脚本?成功了吗?
猜你喜欢
  • 1970-01-01
  • 2012-09-26
  • 1970-01-01
  • 2018-07-24
  • 2011-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多