抓取URL的PHP​​代码突然停止工作

时间:2009-08-07 09:26:55

标签: php

$url = 'the web address I want to get the first and second numbers close to $' ;
$str = file_get_contents($url);

preg_match_all('/ ([$]) *(\d+(:?.\d+)?)/', $str, $matches, PREG_SET_ORDER);

$i=0;
foreach ($matches as $val) {
    if($i==0) $first=$val[2] ;
    if($i==3) $second=$val[2] ;
    $i++;    
}
$bad_symbols = array(",", "."); $first = str_replace($bad_symbols, "", $first); 
$bad_symbols = array(",", "."); $second = str_replace($bad_symbols, "", $second); 

echo $first . "</br>";
echo $second;
直到昨天它还能正常工作 可能是什么问题?

2 个答案:

答案 0 :(得分:3)

我至少看到两种可能的解释:

  • 网站的HTML已更改;也许只是一点点 - 但足以让你陷入困境。
    • 您可以测试preg_match_all
    • 的返回值
    • 如果它是假的,则表示你的正则表达式不匹配 - 这可能表明HTML网页的内容不一样......
    • 然后,您可能需要修改正则表达式
  • 服务器的管理员(或者可以在生成页面的代码中完成)已禁止您
    • 也许该网站检测到它已被您取消(因为您在服务器上太过刻苦,或者他们在您的网站上看到了他们的内容)
    • 他们禁止你的IP(例如)
    • 要检测到这一点,请尝试获取file_get_contents的返回值;如果它是假的,可能是问题的原因
    • 您可以尝试在命令行中使用wget从服务器获取该HTML页面吗?
  • 第三个,正如其他人所建议的那样:也许您的服务器配置已经改变,您不能再使用HTTP上的file_get_content ......
    • 解决方案是使用curl,例如
    • 检查您的配置allow_url_fopen指令

如果您激活error_reportingsee also),您可能还会获得一些可能有用的信息......

答案 1 :(得分:0)

也许系统管理员已经更改了allow_url_fopen指令,这意味着您无法访问服务器上没有的文件。检查file_get_contents()返回的内容,因为您向我们提供的错误信息非常少。

如上所述,另一个问题可能是远程站点已被更改:)