Форум программистов, компьютерный форум, киберфорум
PHP: RegExp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.74/96: Рейтинг темы: голосов - 96, средняя оценка - 4.74
4 / 4 / 3
Регистрация: 28.07.2010
Сообщений: 186

Проверка ответа сервера

06.08.2013, 20:48. Показов 19368. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, уважаемые!

Помогите создать проверку на код ответа сервера урла.

PHP
1
2
3
4
5
6
        $url = http://site.ru/123.jpg;
        $headers = get_headers($url);
        if(preg_match("/\404\b/", $headers[0]))
        {   $data['img'] = "<img src='../images/404.jpg'>"; }
        else
        {       $data['img'] = $data['img']; }
Другими словами, если по данному url ответ сервера будет 404, тогда вывести это картинкой 404.

Что то у меня не получается определить именно то, что ответ сервера 404, в чём ошибка?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.08.2013, 20:48
Ответы с готовыми решениями:

Убрать BOM символы с ответа сервера
Всем привет! Посылаю запрос серверу $response = file('http://www.example.ru/loyalty_copy/hs/service/check_phone/'.$tell); ...

Проверка на отказ ответа сервера
Всем привет! Я написал парсер, и иногда при его работе, я получаю сообщение о том. что сервер не хочет отвечать, скрипт дальше продолжает...

Нет ответа от сервера
подключаюсь к smtp.live.com:587 через telnet -всё нормально когда подключаюсь так через сокеты то всё хорошо пока не дохожу до команды...

12
Не мoдepaтор
 Аватар для MVS76
340 / 315 / 94
Регистрация: 07.07.2012
Сообщений: 1,040
Записей в блоге: 7
07.08.2013, 00:10
Вот способ демонстрирующий то, что вам нужно? вычисляет размер картинки, если картинки нет, тогда размер "0"
PHP
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$imgm = "http://www.site.ua/pictures/img.jpg";
$src = imagecreatefromjpeg($imgm);
$w_ntmx = imagesx($src);
$w_ntmy = imagesy($src);
$res = ($w_ntmx * $w_ntmy);
if($res > 300) {  // 300 для примера, можно и меньше, просто у меня все картинки от 800, мне 300 вполне
echo 'Картинка "GOOD"';
} else {
echo 'Картинка "404"';
}
?>
0
4 / 4 / 3
Регистрация: 28.07.2010
Сообщений: 186
07.08.2013, 00:21  [ТС]
причем тут размер картинки?
Разве я что-то писал про размер?
Мне нужен способ, который проверяет ответ сервера на существующий url, например код 200ок существует найден, 404 не существует не найден....

Я понятия не имею с чего вы взяли что мне нужно вычислить размер картинки...
0
Не мoдepaтор
 Аватар для MVS76
340 / 315 / 94
Регистрация: 07.07.2012
Сообщений: 1,040
Записей в блоге: 7
07.08.2013, 00:28
Цитата Сообщение от noobasik Посмотреть сообщение
вот здесь тогда так и указывайте http://site.ru/123.php
0
4 / 4 / 3
Регистрация: 28.07.2010
Сообщений: 186
07.08.2013, 18:42  [ТС]
Это я для примера в моём случае - ответ, мне нужно получить от страницы, где размещена картинка.

Добавлено через 16 часов 40 минут
Неужели никто не знает?
0
Не мoдepaтор
 Аватар для MVS76
340 / 315 / 94
Регистрация: 07.07.2012
Сообщений: 1,040
Записей в блоге: 7
07.08.2013, 19:01
Можно создать отдельный файл, и вызывать его через include('check_code.php');
Сам файл check_code.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
 //Код ответа
 function get_http_response_code($theURL) {
 $headers = get_headers($theURL);
 return substr($headers[0], 9, 3);
 }
 switch (get_http_response_code($theURL)) {
 case 100:
 echo "100 Continue («продолжить»)";
 break;
 case 101:
 echo "101 Switching Protocols («переключение протоколов»)";
 break;
 case 102:
 echo "102 Processing («идёт обработка»)";
 break;
 case 105:
 echo "105 Name Not Resolved («не удается преобразовать DNS-адрес сервера»)";
 break;
 case 200:
 echo "200 OK («хорошо»)";
 break;
 case 201:
 echo "201 Created («создано»)";
 break;
 case 202:
 echo "202 Accepted («принято»)";
 break;
 case 203:
 echo "203 Non-Authoritative Information («информация не авторитетна»)";
 break;
 case 204:
 echo "204 No Content («нет содержимого»)";
 break;
 case 205:
 echo "205 Reset Content («сбросить содержимое»)";
 break;
 case 206:
 echo "206 Partial Content («частичное содержимое»)";
 break;
 case 207:
 echo "207 Multi-Status («многостатусный»)";
 break;
 case 226:
 echo "226 IM Used («использовано IM»)";
 break;
 case 300:
 echo "300 Multiple Choices («множество выборов»)";
 break;
 case 301:
 echo "301 Moved Permanently («перемещено навсегда»)";
 break;
 case 302:
 echo "302 Moved Temporarily («перемещено временно»)";
 break;
 case 303:
 echo "303 See Other (смотреть другое)";
 break;
 case 304:
 echo "304 Not Modified (не изменялось)";
 break;
 case 305:
 echo "305 Use Proxy («использовать прокси»)";
 break;
 case 306:
 echo "306 зарезервировано (код использовался только в ранних спецификациях)";
 break;
 case 307:
 echo "307 Temporary Redirect («временное перенаправление»)";
 break;
 case 400:
 echo "400 Bad Request («плохой, неверный запрос»)";
 break;
 case 401:
 echo "401 Unauthorized («неавторизован»)";
 break;
 case 402:
 echo "402 Payment Required («необходима оплата»)";
 break;
 case 403:
 echo "403 Forbidden («запрещено»)";
 break;
 case 404:
 echo "404 Not Found («не найдено»)";
 break;
 case 405:
 echo "405 Method Not Allowed («метод не поддерживается»)";
 break;
 case 406:
 echo "406 Not Acceptable («не приемлемо»)";
 break;
 case 407:
 echo "407 Proxy Authentication Required («необходима аутентификация прокси»)";
 break;
 case 408:
 echo "408 Request Timeout («истекло время ожидания»)";
 break;
 case 409:
 echo "409 Conflict («конфликт»)";
 break;
 case 410:
 echo "410 Gone («удалён»)";
 break;
 case 411:
 echo "411 Length Required («необходима длина»)";
 break;
 case 412:
 echo "412 Precondition Failed («условие ложно»)";
 break;
 case 413:
 echo "413 Request Entity Too Large («размер запроса слишком велик»)";
 break;
 case 414:
 echo "414 Request-URI Too Large («запрашиваемый URI слишком длинный»)";
 break;
 case 415:
 echo "415 Unsupported Media Type («неподдерживаемый тип данных»)";
 break;
 case 416:
 echo "416 Requested Range Not Satisfiable («запрашиваемый диапазон не достижим»)";
 break;
 case 417:
 echo "417 Expectation Failed («ожидаемое неприемлемо»)";
 break;
 case 422:
 echo "422 Unprocessable Entity («необрабатываемый экземпляр»)";
 break;
 case 423:
 echo "423 Locked («заблокировано»)";
 break;
 case 424:
 echo "424 Failed Dependency («невыполненная зависимость»)";
 break;
 case 425:
 echo "425 Unordered Collection («неупорядоченный набор»)";
 break;
 case 426:
 echo "426 Upgrade Required («необходимо обновление»)";
 break;
 case 428:
 echo "428 Precondition Required («необходимо предусловие»)";
 break;
 case 429:
 echo "429 Too Many Requests («слишком много запросов»)";
 break;
 case 431:
 echo "431 Request Header Fields Too Large («поля заголовка запроса слишком большие»)";
 break;
 case 449:
 echo "449 Retry With («повторить с»)";
 break;
 case 451:
 echo "451 Unavailable For Legal Reasons («недоступно по юридическим причинам»)";
 break;
 case 456:
 echo "456 Unrecoverable Error («некорректируемая ошибка»)";
 break;
 case 499:
 echo "499 Используется Nginx, когда клиент закрывает соединение до получения ответа";
 break;
 case 500:
 echo "500 Internal Server Error («внутренняя ошибка сервера»)";
 break;
 case 501:
 echo "501 Not Implemented («не реализовано»)";
 break;
 case 502:
 echo "502 Bad Gateway («плохой, ошибочный шлюз»)";
 break;
 case 503:
 echo "503 Service Unavailable («сервис недоступен»)";
 break;
 case 504:
 echo "504 Gateway Timeout («шлюз не отвечает»)";
 break;
 case 505:
 echo "505 HTTP Version Not Supported («версия HTTP не поддерживается»)";
 break;
 case 506:
 echo "506 Variant Also Negotiates («вариант тоже проводит согласование»)";
 break;
 case 507:
 echo "507 Insufficient Storage («переполнение хранилища»)";
 break;
 case 508:
 echo "508 Loop Detected («обнаружена петля»)";
 break;
 case 509:
 echo "509 Bandwidth Limit Exceeded («исчерпана пропускная ширина канала»)";
 break;
 case 510:
 echo "510 Not Extended («не расширено»)";
 break;
 case 511:
 echo "511 Network Authentication Required («требуется сетевая аутентификация»)";
 break;
 }
?>
Вот так применять
PHP
1
2
3
4
<?php
$theURL = 'http://ukraine/img/logo.png'; // проверяемый URL
echo get_http_response_code($theURL)
?>
0
601 / 468 / 73
Регистрация: 22.01.2009
Сообщений: 1,180
Записей в блоге: 1
07.08.2013, 19:26
Цитата Сообщение от MVS76 Посмотреть сообщение
PHP
1
2
3
4
case ...:
echo ...;
break;
case ...:
разве вот так не удобнее: https://github.com/symfony/sym... se.php#L64 ?

Добавлено через 1 минуту

Не по теме:

а еще там есть очень полезный статус "I'm a teapot":)

0
Не мoдepaтор
 Аватар для MVS76
340 / 315 / 94
Регистрация: 07.07.2012
Сообщений: 1,040
Записей в блоге: 7
07.08.2013, 19:32
Нет, этой удобнее пользоваться, вот например:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
include('check_code.php');
$theURL = 'http://www.citicom.dp.ua/';
if(get_http_response_code($theURL) == '200'){
echo '<img src="https://www.cyberforum.ru/customavatars/avatar297871_1.gif" width="50" height="50">';
} else {
if(get_http_response_code($theURL) == '404'){
echo '<img src="http://www.iconshock.com/img_jpg/IMPRESSIONS/web_design/jpg/256/code_404_icon.jpg" width="50" height="50">';
} else {
echo 'Ошибка: '.get_http_response_code($theURL);
}
}
?>
1
601 / 468 / 73
Регистрация: 22.01.2009
Сообщений: 1,180
Записей в блоге: 1
07.08.2013, 20:12
ладно. прочитал вопрос.
Цитата Сообщение от MVS76 Посмотреть сообщение
PHP
1
substr($headers[0], 9, 3);
не совсем корректная проверка
http-statusline содержит три поля, по rfc они разделены пробелом, только это известно. Позиционная проверка здесь не совсем корректна (хотя для HTTP/1.0 и HTTP/1.1, HTTP/2.0-версий она будет совпадать с правильным ответом, конечно). Корректнее:
PHP
1
2
3
4
5
$headers = get_headers('http://cyberforum.ru');
list($proto, $code, $descr) = explode(' ', $headers[0], 3);
var_dump($proto);
var_dump($code);
var_dump($descr);
дальше можно сравнивать $code с 404 и делать все что вам вздумается

Цитата Сообщение от noobasik Посмотреть сообщение
PHP
1
preg_match("/\404\b/", $headers[0])
это не будет работать в принципе, вы зря бекслеши ставите где попало http -- текстовый протокол (не бинарный), 404 будет текстом, а не закодировано в виде символов. \404 -- это вот такой вот символ:
PHP
1
2
preg_match('`\404`u', 'Ą', $matches);
var_dump($matches);
вывод:
Code
1
2
3
4
array(1) {
  [0]=>
  string(2) "Ą"
}
\404 -- это символ со значением 404 в восьмиричной системе счисления (или 260 в десятичной), что больше 255, а потому символ не валиден, и без модификатора u регулярка вообще не скомпилируется.

Не по теме:

включите вывод ошибок, это ошибка уровня E_WARNING

.
Зачем там статус-дескрипшн определять, я так и не понял. Ну да ладно. Все равно через ассоциативный массив в O(C) будет константа поменьше, да и удобнее: можно с кодом работать отдельно, а потом по коду определить description в нужный момент. А не работать через эту громадную функцию. А если уж очень руки чешутся в виде функции сделать, то это всегда можно -- было бы желание.
MVS76, а вы еще и кучу неявных приведений строки в число заюзали, что в switch-е, что потом при сравнении. считаю подобный код чем-то на грани корректности/некорректности, хоть и работать он будет, скорее всего. Но не надо учить плохому

Добавлено через 3 минуты

Не по теме:

и да, разумеется,

Цитата Сообщение от NEbO Посмотреть сообщение
разве вот так не удобнее
был философским вопросом

1
Не мoдepaтор
 Аватар для MVS76
340 / 315 / 94
Регистрация: 07.07.2012
Сообщений: 1,040
Записей в блоге: 7
07.08.2013, 20:16
можно и без свичей, тогда останется так
PHP
1
2
3
4
function get_http_response_code($theURL) {
 $headers = get_headers($theURL);
 return substr($headers[0], 9, 3);
 }
Свичи для вывода ошибки, просто немного некорректно привел код использования, сама суть показать ТС как проверить ошибку
0
601 / 468 / 73
Регистрация: 22.01.2009
Сообщений: 1,180
Записей в блоге: 1
07.08.2013, 20:19
я ж сказал, что это неверно, и привел корректный, по rfc, код. зачем вы так упорно настаиваете на своем?
0
Не мoдepaтор
 Аватар для MVS76
340 / 315 / 94
Регистрация: 07.07.2012
Сообщений: 1,040
Записей в блоге: 7
07.08.2013, 20:28
я не настаиваю на своем, просто показал что он не настолько велик без словесных уведомлений через switch. Я ведь нигде не писал что только его нужно использовать?
А вообще в гугле куча информации по этому поводу, стоит только набрать запрос "Проверка ответа сервера php"
0
4 / 4 / 3
Регистрация: 28.07.2010
Сообщений: 186
07.08.2013, 23:22  [ТС]
спасибо за информацию особенно NEbO, по-химичу
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.08.2013, 23:22
Помогаю со студенческими работами здесь

Чтение ответа от сервера
В общем регулярные выражения тут врятли помогут так как мы имеем дело не с JSON, а с xml. Нужно вытащить из таких строк: ...

Ожидание ответа сервера
IIS 7.5 Ожидание ответа сервера от чего зависит и как его снизить?

Кодировка ответа сервера
Здравствуйте, столкнулся с такой проблемой: через https посылаю post запрос, обрабатываю его: HttpWebResponse response =...

нет ответа от сервера
сегодня от одного из клиентов lotus notes поступила жалоба. при запуске лотуса пользователь вводит свой логин. лотус подключается к...

Эмуляция ответа сервера
Здравствуйте уважаемые господа. Уверен, что вы сталкивались с подобными сообщениями. Суть такая: 1.) Есть программа, которая...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru