знатоки как сделать запрос file_get_contents

Тема в разделе "PHP", создана пользователем асс, 11 сен 2008.

Статус темы:
Закрыта.
Модераторы: latteo
  1. асс

    асс

    Регистр.:
    13 окт 2006
    Сообщения:
    756
    Симпатии:
    221
    задача такая
    Хочу чтоб скрпит не зависал на долго
    а отдавал ответ
    например если на источнике нет запрашиваемой ссылки
    которую беру так
    $str = file_get_contents('http://ya.ru/');
    то выдавал типа
    ошибку сайт недоступен

    тоесть типа так
    PHP:
    if ($str file_get_contents('http://all.asp')
    {
    echo
    "ok";    
    }
    else 
    echo
    "status 500";
    }
    как сделать проверку на статуст сайта перед получением ссылки.
    И если статус 20 то брать ссылку
    если другой статус то завершать работу
    на exit/
     
  2. ConstNW

    ConstNW Постоялец

    Регистр.:
    30 июн 2007
    Сообщения:
    132
    Симпатии:
    39
    если хочешь контролировать статус ответа, то забудь этот путь.
    используй уже готовые библиотеки/классы.
    например вот этот http://www.phpclasses.org/browse/package/576.html
     
  3. sasha181

    sasha181 Постоялец

    Регистр.:
    18 апр 2007
    Сообщения:
    100
    Симпатии:
    25
    Проще всего посмотреть в сторону curl
    бибилиотека довольно проста в освоении и позволяет очень много. В том числе получить заголовки, не получая тела запроса. А $str = file_get_contents('http://ya.ru/'); не вышло, т.к. там сначала возвращается пустая страница, а в заголовках ставятся куки и редирект, если конечно память не изменяет.
     
  4. асс

    асс

    Регистр.:
    13 окт 2006
    Сообщения:
    756
    Симпатии:
    221
    Но поидее проверить можно?
    Если вернет 0 значит ошибка
    есмли один то продолжаем.
    Просто я новичек в этих условиях циклах. Вернее Php 2 года использую но не влезал в глубь.
     
  5. gregzem

    gregzem

    Регистр.:
    21 окт 2007
    Сообщения:
    200
    Симпатии:
    63
    Есть такой запрос в HTTP протоколе, называется HEAD. Синтаксис запроста как у GET.

    Если нужно проверить работоспособность URL, используйте его, а не GET. Он возвратит только заголовок, без тела документа.

    Запрос можно послать как минимум двумя простыми способами:

    1. fsockopen...
    2. cURL

    Примеры использования смотрите на php.net (найти легко, используя поиск на том же сайте).
     
  6. асс

    асс

    Регистр.:
    13 окт 2006
    Сообщения:
    756
    Симпатии:
    221

    Про 1. fsockopen...
    2. cURL
    известно. Но придеться тогда в цикл включать еще
    один запрос .

    Скажите пожалуйста чем быстрее забирать со страницы кусок информации

    1. fsockopen...
    2. cURL
    3 file_get_contents
    третий забирает в строку всю страницу целиком..
    Его я щас юзаю
    Но если я хочу взять часть страницы. Как лучше реализовать это?
    Я делаю так

    Получаю страницу затем вырезаю нужное и работаю с им.
    А возможно ли сразу взять только нужное не получая всю страницу?
     
  7. sasha181

    sasha181 Постоялец

    Регистр.:
    18 апр 2007
    Сообщения:
    100
    Симпатии:
    25

    Можно и одним запросом сразу получить и заголовки, и тело страницы (в обоих случаях).

    Можно только указать с какого по какой байты тебе нужно получить страницу (при условии, что сервер поддерживает докачку).
    Если тебе нужно вырезать часть страницы по куссками текста, этого сделать не получится никак, т.к. сам http протокол такое не поддерживает.

    Смотри лучше в сторону cURL , т.к. для работы с fsockopen нужно хорошо знать протокол http.
     
  8. judgefog

    judgefog

    Регистр.:
    12 авг 2006
    Сообщения:
    487
    Симпатии:
    335
    для работы с html просто не вижу перспективы качать частями - верстка-то у всех разная, с какой позиции в байтах начинается контент не угадаешь (частичная скачка именно так работает - ByteRange); плюс байтовая длина отличается в 1251 и utf.

    Кинь в личку что за базу собираешь, может к нам в тему впишешься
     
  9. ewg777

    ewg777

    Регистр.:
    6 авг 2007
    Сообщения:
    763
    Симпатии:
    321
    PHP:
    $urlgoogle="http://nulled.ws";
    $t=@file_get_contents($url);
    if(@!
    $t) { echo "Не открыто"; } else 
    { echo 
    $t; }
    Вот. Так должно быть.
     
  10. Nafania

    Nafania

    Регистр.:
    24 мар 2007
    Сообщения:
    167
    Симпатии:
    46
    Проще тогда уже
    PHP:
    $urlgoogle "http://nulled.ws";
    if( 
    $t = @file_get_contents($url) ) {
    echo 
    $t;
    }
    else {
    echo 
    "Не открыто"
    }
     
Статус темы:
Закрыта.