Я использую PHP, чтобы проверить, существует ли файл .html на сервере. Тем не менее, @get_headers, кажется, «посещает» страницу, когда проверяет файл, и мой скрипт отслеживания, который создает аналитический отчет, выбирает это как просмотр страницы. Есть ли другой способ проверить, существует ли файл без этого? Вот код, который я сейчас использую:
$file = "https://www." . $_SERVER['HTTP_HOST'] . $row['page'];
$file_headers = @get_headers($file);
if(!$file_headers || $file_headers[0] == 'HTTP/1.1 404 Not Found') {
$file_exists = false;
}
else {
$file_exists = true;
}
@get_headers, кажется, «посещает» страницу, когда проверяет файл
Это именно то, что он делает, да.
Есть ли другой способ проверить, существует ли файл без этого?
Проверяя, существует ли файл. Сейчас вы проверяете, «возвращает ли URL-адрес ошибку при запросе».
Если у вас нет специальных перезаписей URL, вы можете сделать это с помощью:
if (file_exists($_SERVER["DOCUMENT_ROOT"] . $row['page'])) {
....
}
Если вам действительно нужно использовать get_headers
вы можете найти Пример №2 в документации полезно.
Короче: get_header
по умолчанию использует GET
запросы (которые, безусловно, — является просмотр страницы).
Пример № 2 для справки:
<?php
// By default get_headers uses a GET request to fetch the headers. If you
// want to send a HEAD request instead, you can do so using a stream context:
stream_context_set_default(
array(
'http' => array(
'method' => 'HEAD'
)
)
);
$headers = get_headers('http://example.com');
?>
Хотя я предпочитаю не изменять контекст потока по умолчанию, поэтому я бы предложил создать свой собственный:
<?php
$context = stream_context_create(
array(
'http' => array(
'method' => 'HEAD'
)
)
);
$headers = get_headers('http://example.com', 0, $context);
?>
Работает ли это или нет, в основном зависит от вашего аналитического программного обеспечения (т.е. различает ли оно запросы GET и HEAD).