检查链接是否存在

时间:2012-01-10 13:06:44

标签: php phpbb

我在本地主机上有一个phpBB论坛用于学习目的..现在我正在尝试使用PHP执行此操作:

当发布链接时,脚本会检查确切的链接是否存在,如果存在,则发布消息的过程不会继续。 编辑:这是我在includes / message_parser.php

中的内容
function url_exists($url) {
$handle = @fopen($url, "r");
if ($handle === false){
return false;
fclose($handle);}
else{
return true;
fclose($handle);}}

这就是我在posts.php中所拥有的。

$your_url = "http://www.somewhere.com/index.php";

$your_url = preg_replace(array('#&\#46;#','#&\#58;#','/\[(.*?)\]/'), array('.',':',''), $your_url);

if (url_exists($your_url))
{
echo 'yeah, its reachable';
}
else
{
echo 'what da hell..';
}

有效。当我发布一个存在的链接时,我可以看到它回应了什么地狱,但问题是帖子被发布了。我现在想要的是,如果链接存在,则不允许发布帖子。

2ND编辑:

if($submit){
    $URL = "http://www.fileserve.com/file/rP59FZ2";
    preg_replace(array('#&\#46;#','#&\#58;#','/\[(.*?)\]/'), array('.',':',''), $url);
if(url_exists($url)) {
    echo "Link exists!";
}

这就是我在网址存在时阻止提交主题的行为。不工作:\

3 个答案:

答案 0 :(得分:2)

检查链接返回状态代码200(dunno约30x)

使用cURL:

function url_exists($url) {
    $ch = @curl_init($url);
    @curl_setopt($ch, CURLOPT_HEADER, TRUE);
    @curl_setopt($ch, CURLOPT_NOBODY, TRUE);
    @curl_setopt($ch, CURLOPT_FOLLOWLOCATION, FALSE);
    @curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    $status = array();
    preg_match('/HTTP\/.* ([0-9]+) .*/', @curl_exec($ch) , $status);
     return ($status[1] == 200);
}
// now call the function
$myUrl = "http://www.somewhere.com";
if(url_exists($myUrl)) {
    echo "Link exists!";
} else {
    echo "Link does not exist :(";
}

没有cURL:

function url_exists($url) {
    $h = get_headers($url);
    $status = array();
    preg_match('/HTTP\/.* ([0-9]+) .*/', $h[0] , $status);
    return ($status[1] == 200);
}
// now call the function
$myUrl = "http://www.somewhere.com";
if(url_exists($myUrl)) {
    echo "Link exists!";
} else {
    echo "Link does not exist :(";
}

你可以玩它:)

<强>更新

更新问题。

我不确切知道phpBB是如何工作的,或者你想要捕获它的位置,但是一些停止发布的建议可能是使用javascript / jQuery检查链接,然后禁用提交按钮提醒/打印关于为什么没有发布帖子的声明。

我不是那样的正则表达式,但如果它包含你要查找的任何链接,你会检查帖子,然后“阻止”表单的提交。

有些事情:

$('#myform').submit(function(event){
    // disable the submit button so the user doesn't spam it
    $('#myform input[type=submit]', this).attr('disabled', 'disabled');

    // check with regex for the links
    // if it's found return true else return false to variable preventSubmit
    if(preventSubmit) {
        // prevent the form from being submitted
        event.preventDefault();
        // notify the user
        alert("You cannot post that link!");
        return false;
    }

});

作为额外的安全性,您可以默认禁用提交,并且只有在加载javascript后才启用它。

答案 1 :(得分:0)

首先检查链接格式是否有效:

function isValidURL($url) {
  return preg_match('|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i', $url);
}

然后确保链接引用的资源实际存在:

function checkLink() {
   $handle = fopen("http://www.example.com/", "r");
   if ($handle) { fclose($handle); return true; }
   return false;
}

答案 2 :(得分:0)

尝试:

$url = 'http://www.anyURL.com';
$hndl = @fopen($url,'r');
if($hndl !== false){
   echo 'URL Exists';
}
else
{
   echo "URL Doesn't exist";
}