使用 file_get_contents 和变量作为目标文件的链接时出现问题
我正在尝试循环遍历链接数组,并使用 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
中使用 $link 时 (file_get_contents( "$link")
) 函数中,preg_match
条件为 false。然而,当我使用 file_get_contents
(`file_get_contents("http://www.site.com/something")) 中的 my_site2.txt 中的链接之一时,它工作正常。
我什至尝试过使用另一种 txt 文件,该文件仅包含一个链接,该链接在源代码中具有正确的字符串。
Iv 也尝试过不带引号: file_get_contents($link)
I'm trying to loop through an array of links, and use the file_get_contents to get the source code and take certain content from it:
$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";
}
}
Now when i use $link in the file_get_contents
(file_get_contents("$link")
) function, the preg_match
condition is false. Yet when i use one of the links in my_site2.txt in the file_get_contents
(`file_get_contents("http://www.site.com/something")) it works fine.
I've even tried using a different txt file which only contains one link, which had the correct string in the source code.
Iv also tried without quotes: file_get_contents($link)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
有几件事。
$f 中的文件名将包含换行符。您需要为
file
添加一个额外的标志来防止这种情况:您不需要在正则表达式中转义双引号。
您确定您的正则表达式在
/>
之前需要一个空格吗?您的正则表达式将匹配但不匹配
。
There were a couple of things.
filenames in
$f
will contain newlines. You need to add an additional flag forfile
to prevent this:you don't need to escape double quotes in your regex.
are you sure that your regex needs a space before
/>
? Your regex will match<meta pro="test" />
but not<meta pro="test"/>
.在 foreach 循环中声明时 $link 的内容可能是一个数组或一个对象。
在 $link 上尝试 var_dump() 并查看其中的内容,这可能会帮助您了解如何操作其内容。
.txt 文件设置如何?
这是一个解决方案: -
如果您只是分隔链接,例如
link1、link2、link3、link4、link5
执行Then foreach
然后为该数组
The contents of $link when decalred in the foreach loop is probably an array or an object.
Try var_dump() on $link and see what is within it, this might help you to understand how to manipulate it's contents.
How is you .txt file setup?
Heres a solution:-
If you just sepreate the links like
link1,link2,link3,link4,link5
Then do
Then foreach for this array
只需删除
$f = file_get_contents("$link");
中的引号即可使
$f = file_get_contents($link);
Simply remove the quotes from
$f = file_get_contents("$link");
to make
$f = file_get_contents($link);