Как я проверяю на допустимый (не мертвый) ссылки, программно использующие PHP?

Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.

Например, ниже - класс ученика, который будет использовать его в нашем коде.

public class Student {

    private int id;

    public int getId() {
        return this.id;
    }

    public setId(int newId) {
        this.id = newId;
    }
}

Приведенный ниже код дает вам исключение с нулевым указателем.

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}

Поскольку вы используете Obj_Student, но вы забыли инициализировать его, как в правильном коде, показанном ниже:

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student = new Student();
            obj_Student.setId(12);
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}
15
задан Cœur 10 September 2017 в 05:48
поделиться

8 ответов

Используйте расширение ЗАВИХРЕНИЯ PHP. В отличие от fopen () это может также выполнить запросы ГОЛОВЫ HTTP, которые достаточны проверить наличие URL и сохранить Вас тонна bandwith, поскольку Вы не должны загружать все тело страницы для проверки.

Как начальная точка Вы могли использовать некоторую функцию как это:

function is_available($url, $timeout = 30) {
    $ch = curl_init(); // get cURL handle

    // set cURL options
    $opts = array(CURLOPT_RETURNTRANSFER => true, // do not output to browser
                  CURLOPT_URL => $url,            // set URL
                  CURLOPT_NOBODY => true,         // do a HEAD request only
                  CURLOPT_TIMEOUT => $timeout);   // set timeout
    curl_setopt_array($ch, $opts); 

    curl_exec($ch); // do it!

    $retval = curl_getinfo($ch, CURLINFO_HTTP_CODE) == 200; // check if HTTP OK

    curl_close($ch); // close handle

    return $retval;
}

Однако существует тонна возможной оптимизации: Вы могли бы хотеть снова использовать ВИХРЕВОЙ экземпляр и, при проверке больше чем одного URL на хост, даже снова использовать соединение.

, О, и этот код действительно проверяет строго на код ответа HTTP 200. Это не следует за перенаправлениями (302) - но также существует ВИХРЕВАЯ опция для этого.

18
ответ дан 1 December 2019 в 01:46
поделиться

Изучите ЗАВИХРЕНИЕ. Существует библиотека для PHP.

существует также выполняемая версия ЗАВИХРЕНИЯ, таким образом, Вы могли даже записать сценарий в ударе.

6
ответ дан 1 December 2019 в 01:46
поделиться

Я на самом деле записал что-то в PHP, который делает это по базе данных 5k + URL. Я использовал ГРУШЕВЫЙ класс HTTP_Request , который имеет метод, названный getResponseCode (). Я просто выполняю итерации по URL, передавая их getResponseCode и оцениваю ответ.

Однако это не работает на адреса FTP, URL, которые не начинаются с http или https (неподтвержденный, но я полагаю, что это имеет место), и сайты с недопустимыми сертификатами безопасности (0 не найден). Кроме того, 0 возвращается для server-not-found (нет никакого кода состояния для этого).

И это, вероятно, легче, чем ЗАВИХРЕНИЕ, поскольку Вы включаете несколько файлов и используете единственную функцию для возвращения целочисленного кода.

4
ответ дан 1 December 2019 в 01:46
поделиться
  1. fopen () поддерживает http URI.
  2. при необходимости в большей гибкости (такой как тайм-аут) изучите ВИХРЕВОЕ расширение.
2
ответ дан 1 December 2019 в 01:46
поделиться

Кажется, что это могло бы быть задание для завихрение .

, Если Вы не застреваете на LWP Perl PHP, мог бы быть ответ также.

1
ответ дан 1 December 2019 в 01:46
поделиться

Необходимо также знать, что URL возвращают 301 или 302 ответа HTTP, которые перенаправляют к другой странице. Обычно это не означает, что ссылка недопустима. Например, http://amazon.com возвраты 301 и перенаправления к http://www.amazon.com/ .

1
ответ дан 1 December 2019 в 01:46
поделиться

Просто возврат 200 ответов недостаточно; много действительных ссылок продолжат возвращаться "200" после того, как они изменятся в порно / азартная игра порталов, когда бывшему владельцу не удается возобновить.

Доменные поселенцы обычно удостоверяются, что каждый URL в их доменах возвращается 200.

1
ответ дан 1 December 2019 в 01:46
поделиться

Одна потенциальная проблема, с которой Вы несомнительно столкнетесь, состоит в том, когда поле, на котором работает этот сценарий, освободит доступ к Интернету... Вы получите 1 000 ложных положительных сторон.

для Вашего сценария, вероятно, было бы лучше сохранить некоторый тип истории и только сообщить об отказе после 5 дней отказа.

кроме того, сценарий должен саморегистрироваться в некотором пути (как проверка известного хорошего веб-сайта [Google?]) прежде, чем продолжить стандартные проверки.

0
ответ дан 1 December 2019 в 01:46
поделиться
Другие вопросы по тегам:

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