使用file_get_contents和一个变量作为到目标文件的链接


issue using file_get_contents with a variable as the link to target file

我试图通过链接数组循环,并使用file_get_contents获取源代码并从中获取某些内容:

$links = file('mysite2.txt');
foreach($links as $link) {
$f = file_get_contents("$link");
$source = $f;

if(preg_match('/<meta pro='"(.*)'" '/>/',$source,$matches)) {
   $answer = $matches[1];
echo "$answer";
}
}

现在,当我在file_get_contents (file_get_contents("$link"))函数中使用$link时,preg_match条件为假。然而,当我在file_get_contents (' file_get_contents("http://www.site.com/something"))中使用my_site2.txt中的一个链接时,它工作得很好。

我甚至试过使用一个不同的文本文件,它只包含一个链接,在源代码中有正确的字符串。

i also tried without quotes: file_get_contents($link)

有几件事。

  1. $f中的文件名将包含换行符。您需要为file添加一个额外的标志来防止这种情况:

    $links = file('mysite2.txt', FILE_IGNORE_NEW_LINES);
    
  2. 你不需要在正则表达式中转义双引号

  3. 你确定你的正则表达式在/>之前需要一个空间吗?你的正则表达式将匹配<meta pro="test" />,但不匹配<meta pro="test"/>

在foreach循环中声明的$link的内容可能是一个数组或对象。

尝试$link上的var_dump(),看看里面有什么,这可能有助于你理解如何操作它的内容。

你是如何设置。txt文件的?

这里有一个解决方案:-

如果你只是像

那样分隔链接

link1、link2 link3, link4, link5

那么做

$links = explode( ',' , file_get_content($file) ) ;

然后foreach for this数组

直接删除$f = file_get_contents("$link");中的引号

设置$f = file_get_contents($link);