Проверьте, существует ли ссылка - PullRequest
0 голосов
/ 10 января 2012

У меня есть форум phpBB на моем локальном хосте для учебных целей. Теперь я пытаюсь сделать это с помощью PHP:

Когда ссылка публикуется, скрипт проверяет, существует ли точная ссылка и существует ли онатогда процесс публикации сообщения не продолжается.РЕДАКТИРОВАТЬ: Это то, что у меня есть, включает в себя / message_parser.php

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

И это то, что у меня есть в posting.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..';
}

Это работает.Я вижу, что это эхо, когда я публикую ссылку, которая существует, но проблема в том, что сообщение публикуется.Теперь я хочу, чтобы, если ссылка существует, не разрешать публикацию сообщения.

2-Й РЕДАКТИРОВАТЬ:

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

Это то, что я сделал, чтобы предотвратить отправку темы, когдаURL существует.не работает: \

Ответы [ 3 ]

2 голосов
/ 10 января 2012

Проверка, вернется ли код статуса возврата 200 (не знаю, примерно 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 :(";
}

Вы можете поиграть с ним:)

UPDATE

К обновленному вопросу.

Я не знаю точно, как работает 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.

0 голосов
/ 10 января 2012

попробовать:

$url = 'http://www.anyURL.com';
$hndl = @fopen($url,'r');
if($hndl !== false){
   echo 'URL Exists';
}
else
{
   echo "URL Doesn't exist";
}
0 голосов
/ 10 января 2012

Сначала проверьте, является ли формат ссылки действительным:

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;
}
...