@Kurusa

Php, почему filesize возвращает -1?

Этот метод возвращает размер файла robots.txt:

//return byte
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_NOBODY, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_MAXREDIRS, 3);
    curl_exec($ch);
    $filesize = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD);
    curl_close($ch);
    if ($filesize) return $filesize;


Для всех сайтов, кроме одного мне возвращается нормальный размер типа 84 или 165 байт, например. Но в одном случае -1. Вот ещё один метод:

$file = fopen('robots.txt', 'w');

    // инициализация cURL
    $ch = curl_init();

    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FILE, $file);
    curl_exec($ch);
    fclose($file);
    curl_close($ch);

    $resultFile = 'robots.txt'; // файл, который получили

    if (!file_exists($resultFile)) {
        // Если файл отсутвует, сообщаем ошибку
        echo "Файл robots.txt отсутствует.";
    } else {
        echo "Файл robots.txt присутствует." . "\n";
        // Начинаем обрабатывать файл, если все прошло успешно
        $textget = file_get_contents($resultFile);
        htmlspecialchars($textget);

        if (preg_match("/Host/", $textget)) {
            echo "Директива Host есть" . "\n";
        } else {
            echo "Директивы Host нет";
        }

        echo 'Размер файла ' . $resultFile . ': ' . $this->remoteFileSize($url . "/robots.txt") . ' байт';
    }
  • Вопрос задан
  • 99 просмотров
Пригласить эксперта
Ответы на вопрос 1
ivankomolin
@ivankomolin
curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD)
Эта функция возвращает размер загруженного документа, прочитанный из заголовка Content-Length.
Соответственно если в заголовке на сервере для robots.txt это не указано, то вернется -1
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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