Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.
Например, ниже - класс ученика, который будет использовать его в нашем коде.
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 ");
}
}
}
Используйте расширение ЗАВИХРЕНИЯ 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) - но также существует ВИХРЕВАЯ опция для этого.
Изучите ЗАВИХРЕНИЕ. Существует библиотека для PHP.
существует также выполняемая версия ЗАВИХРЕНИЯ, таким образом, Вы могли даже записать сценарий в ударе.
Я на самом деле записал что-то в PHP, который делает это по базе данных 5k + URL. Я использовал ГРУШЕВЫЙ класс HTTP_Request , который имеет метод, названный getResponseCode (). Я просто выполняю итерации по URL, передавая их getResponseCode и оцениваю ответ.
Однако это не работает на адреса FTP, URL, которые не начинаются с http или https (неподтвержденный, но я полагаю, что это имеет место), и сайты с недопустимыми сертификатами безопасности (0 не найден). Кроме того, 0 возвращается для server-not-found (нет никакого кода состояния для этого).
И это, вероятно, легче, чем ЗАВИХРЕНИЕ, поскольку Вы включаете несколько файлов и используете единственную функцию для возвращения целочисленного кода.
Кажется, что это могло бы быть задание для завихрение .
, Если Вы не застреваете на LWP Perl PHP, мог бы быть ответ также.
Необходимо также знать, что URL возвращают 301 или 302 ответа HTTP, которые перенаправляют к другой странице. Обычно это не означает, что ссылка недопустима. Например, http://amazon.com возвраты 301 и перенаправления к http://www.amazon.com/ .
Просто возврат 200 ответов недостаточно; много действительных ссылок продолжат возвращаться "200" после того, как они изменятся в порно / азартная игра порталов, когда бывшему владельцу не удается возобновить.
Доменные поселенцы обычно удостоверяются, что каждый URL в их доменах возвращается 200.
Одна потенциальная проблема, с которой Вы несомнительно столкнетесь, состоит в том, когда поле, на котором работает этот сценарий, освободит доступ к Интернету... Вы получите 1 000 ложных положительных сторон.
для Вашего сценария, вероятно, было бы лучше сохранить некоторый тип истории и только сообщить об отказе после 5 дней отказа.
кроме того, сценарий должен саморегистрироваться в некотором пути (как проверка известного хорошего веб-сайта [Google?]) прежде, чем продолжить стандартные проверки.