我试图通过链接数组循环,并使用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)
有几件事。
-
$f
中的文件名将包含换行符。您需要为file
添加一个额外的标志来防止这种情况:$links = file('mysite2.txt', FILE_IGNORE_NEW_LINES);
-
你不需要在正则表达式中转义双引号
-
你确定你的正则表达式在
/>
之前需要一个空间吗?你的正则表达式将匹配<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);