Простой способ проверить URL для 404 в PHP?

К сожалению, вы можете это сделать, завернув операцию DDL в операции DML.

var createDatabaseQuery = "exec ('CREATE DATABASE ' + @databaseName)";

var sqlCommand = new SqlCommand(createDatabaseQuery, sqlConnection);
sqlCommand.Parameters.Add("@databaseName", SqlDbType.Text);
sqlCommand.Parameters["@databaseName"].Value = "HelloWorld";

sqlCommand.ExecuteNonQuery();
144
задан bignose 1 May 2009 в 06:58
поделиться

6 ответов

При использовании PHP's curl привязка можно проверить код ошибки с помощью curl_getinfo как таковой:

$handle = curl_init($url);
curl_setopt($handle,  CURLOPT_RETURNTRANSFER, TRUE);

/* Get the HTML or whatever is linked in $url. */
$response = curl_exec($handle);

/* Check for 404 (file not found). */
$httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);
if($httpCode == 404) {
    /* Handle 404 here. */
}

curl_close($handle);

/* Handle $response here. */
261
ответ дан strager 1 May 2009 в 06:58
поделиться
  • 1
    Я думал бы, что он полезный для интерфейсов имеет internal участники. Если блок, Foo мог бы содержать интерфейс IWoozle с internal участники, и если он содержал пять реализаций IWoozle, код где угодно, мог бы раздать экземпляры IWoozle и использовать его общедоступных участников, но код, который получил IWoozle, будет знать, что был реализован в рамках блока Foo. Рассмотрите, например, гипотетический интерфейс IImmutableWoozle. It' s возможный, что реализации не могли бы все совместно использовать тип общей базы, но если никакие реализации не могли бы существовать вне Foo, то... – supercat 13 January 2012 в 00:06

это справедливо и часть кода, работ надежды для Вас

            $ch = @curl_init();
            @curl_setopt($ch, CURLOPT_URL, 'http://example.com');
            @curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1");
            @curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            @curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
            @curl_setopt($ch, CURLOPT_TIMEOUT, 10);

            $response       = @curl_exec($ch);
            $errno          = @curl_errno($ch);
            $error          = @curl_error($ch);

                    $response = $response;
                    $info = @curl_getinfo($ch);
return $info['http_code'];
0
ответ дан 1 May 2009 в 06:58
поделиться

Как strager предполагает, изучите использование ЗАВИХРЕНИЯ. Можно также интересоваться установкой CURLOPT_NOBODY с curl_setopt для пропуска загрузки целой страницы (Вы просто хотите заголовки).

21
ответ дан Beau Simensen 1 May 2009 в 06:58
поделиться

Я нашел этот ответ здесь :

if(($twitter_XML_raw=file_get_contents($timeline))==false){
    // Retrieve HTTP status code
    list($version,$status_code,$msg) = explode(' ',$http_response_header[0], 3);

    // Check the HTTP Status code
    switch($status_code) {
        case 200:
                $error_status="200: Success";
                break;
        case 401:
                $error_status="401: Login failure.  Try logging out and back in.  Password are ONLY used when posting.";
                break;
        case 400:
                $error_status="400: Invalid request.  You may have exceeded your rate limit.";
                break;
        case 404:
                $error_status="404: Not found.  This shouldn't happen.  Please let me know what happened using the feedback link above.";
                break;
        case 500:
                $error_status="500: Twitter servers replied with an error. Hopefully they'll be OK soon!";
                break;
        case 502:
                $error_status="502: Twitter servers may be down or being upgraded. Hopefully they'll be OK soon!";
                break;
        case 503:
                $error_status="503: Twitter service unavailable. Hopefully they'll be OK soon!";
                break;
        default:
                $error_status="Undocumented error: " . $status_code;
                break;
    }

По существу, Вы используете "файл, заставляют содержание" метод получать URL, который автоматически заполняет http переменную заголовка ответа с кодом статуса.

6
ответ дан Ross 1 May 2009 в 06:58
поделиться

Если Ваше выполнение php5 Вы может использовать:

$url = 'http://www.example.com';
print_r(get_headers($url, 1));

, Кроме того, с php4 пользователь внес следующее:

/**
This is a modified version of code from "stuart at sixletterwords dot com", at 14-Sep-2005 04:52. This version tries to emulate get_headers() function at PHP4. I think it works fairly well, and is simple. It is not the best emulation available, but it works.

Features:
- supports (and requires) full URLs.
- supports changing of default port in URL.
- stops downloading from socket as soon as end-of-headers is detected.

Limitations:
- only gets the root URL (see line with "GET / HTTP/1.1").
- don't support HTTPS (nor the default HTTPS port).
*/

if(!function_exists('get_headers'))
{
    function get_headers($url,$format=0)
    {
        $url=parse_url($url);
        $end = "\r\n\r\n";
        $fp = fsockopen($url['host'], (empty($url['port'])?80:$url['port']), $errno, $errstr, 30);
        if ($fp)
        {
            $out  = "GET / HTTP/1.1\r\n";
            $out .= "Host: ".$url['host']."\r\n";
            $out .= "Connection: Close\r\n\r\n";
            $var  = '';
            fwrite($fp, $out);
            while (!feof($fp))
            {
                $var.=fgets($fp, 1280);
                if(strpos($var,$end))
                    break;
            }
            fclose($fp);

            $var=preg_replace("/\r\n\r\n.*\$/",'',$var);
            $var=explode("\r\n",$var);
            if($format)
            {
                foreach($var as $i)
                {
                    if(preg_match('/^([a-zA-Z -]+): +(.*)$/',$i,$parts))
                        $v[$parts[1]]=$parts[2];
                }
                return $v;
            }
            else
                return $var;
        }
    }
}

у Обоих был бы результат подобным:

Array
(
    [0] => HTTP/1.1 200 OK
    [Date] => Sat, 29 May 2004 12:28:14 GMT
    [Server] => Apache/1.3.27 (Unix)  (Red-Hat/Linux)
    [Last-Modified] => Wed, 08 Jan 2003 23:11:55 GMT
    [ETag] => "3f80f-1b6-3e1cb03b"
    [Accept-Ranges] => bytes
    [Content-Length] => 438
    [Connection] => close
    [Content-Type] => text/html
)

Поэтому Вы могли просто проверить, чтобы видеть, что ответ заголовка был в порядке, например:

$headers = get_headers($url, 1);
if ($headers[0] == 'HTTP/1.1 200 OK') {
//valid 
}

if ($headers[0] == 'HTTP/1.1 301 Moved Permanently') {
//moved or redirect page
}

Коды W3C и Определения

98
ответ дан Muhammad Reda 1 May 2009 в 06:58
поделиться

Вот путь!

<?php

$url = "http://www.google.com";

if(@file_get_contents($url)){
echo "Url Exists!";
} else {
echo "Url Doesn't Exist!";
}

?>

Этот простой сценарий просто выполняет запрос к URL для его исходного кода. Если запрос будет завершен успешно, то он произведет "URL, Существует!". В противном случае это произведет "URL, не Существует!".

-1
ответ дан 23 November 2019 в 22:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: