При определенных обстоятельствах разработчику может потребоваться проверить существование HTTP-ресурса, прежде чем пытаться его использовать.

Это может быть изображение, которое, как он ожидает, существует на удаленном сервере, или ссылка на сайт, которую пользователь скопировал и вставил в поле формы.

К сожалению, многие разработчики довольно расточительно относятся к таким вещам. Вместо того, чтобы чисто сосредоточить свои усилия на проверке кода статуса ресурса, они будут пытаться его скачать, даже если на самом деле ресурс им не нужен.

Чаще всего они будут пытаться загрузить ресурс, используя что-то вроде file_get_contents:

<?php

$resourceUrl = 'http://example.com/img/large-image-34.jpg';

$resourceExists = false;
if(file_get_contents($resourceUrl) !== false){
    $resourceExists = true;
}

Проблема заключается в том, что вы загружаете изображение с единственной целью — проверить, существует ли оно.

Использование cURL

Одна из замечательных особенностей cURL заключается в том, что она имеет опцию CURLOPT_NOBODY, которая позволяет вам отправлять HEAD запрос:

Метод HEAD идентичен GET за исключением того, что сервер НЕ ДОЛЖЕН возвращать тело сообщения в ответе. Метаинформация, содержащаяся в заголовках HTTP в ответ на запрос HEAD ДОЛЖНА быть идентична информации, отправленной в ответ на запрос GET.

Этот метод может быть использован для получения метаинформации о сущности, подразумеваемой запросом, без передачи самого сущности-тела. Данный метод часто используется для проверки гипертекстовых ссылок на валидность, доступность и недавние изменения.

В принципе, HEAD запрос позволит вам проверить, существует ли ресурс, не скачивая его. В PHP этот тип запроса может быть выполнен подобным образом:

<?php

$resourceUrl = 'http://example.com/vid/large-video.mp4';
$resourceExists = false;

$ch = curl_init($resourceUrl);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_exec($ch);
$statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

// 200 = OK
if($statusCode == '200'){
    $resourceExists = true;
}

Как вы, наверное, можете себе представить, скачивать большое видео на PHP только для того, чтобы подтвердить его существование, было бы безумием!

Статьи #