Что использовать вместо fsockopen?

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

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

    pslava

    Регистр.:
    16 май 2007
    Сообщения:
    618
    Симпатии:
    122
    У хостера прикрыта возможность работать через fsockopen, выдает 500-ю ошибку. Что можна использовать вместо этого?
     
  2. Kaimi

    Kaimi

    Регистр.:
    28 окт 2007
    Сообщения:
    257
    Симпатии:
    253
    socket_connect
    cURL
     
    pslava нравится это.
  3. akgrad

    akgrad

    Регистр.:
    26 июл 2008
    Сообщения:
    161
    Симпатии:
    29
    file_get_contents
    Это из другой оперы но часто можно использовать в тех же целях.
    Вот подробнее http://ru2.php.net/file_get_contents
     
    pslava нравится это.
  4. mentanos

    mentanos Постоялец

    Регистр.:
    27 дек 2007
    Сообщения:
    128
    Симпатии:
    35
    запрет fsockopen равно как и любой другой функции не приводит к ошибке 500. где именно получаешь ошибку?

    вебсервер показывает 500-ю ошибку при запуске пхп скрипта, если скрипт что-то намутил с заголовками. если хостер действительно запретил функцию fsockopen, возможно кривая сборка пхп выдает сообщение об ошибке перед заголовками, и поэтому ты видишь ошибку 500. но такое объяснение крайне неправдоподобно.

    как вариант для http аналогом fsockopen может быть fopen (если allow_url_fopen=on). пример: $f=fopen('hxxp://cauT.Py/index.html','rb'); и потом fread-ом читать как $f обычный файл. ну или file_get_contents (опять же должно быть allow_url_fopen=on)


    п/с/ если же хостер вообще запретил клиентским скриптам создавать удаленные соединения - то тут уж ничто не поможет.
     
  5. pslava

    pslava

    Регистр.:
    16 май 2007
    Сообщения:
    618
    Симпатии:
    122
    Ошибка возникает именно на fsockopen (возвращает не FALSE) и при последующем вызове fwrite отваливается, причем вытащить ошибку при этом не удается, нужен аналог этих функций чтоб можно было отсылать заголовки и получать результат
     
  6. cyberquoter

    cyberquoter Создатель

    Регистр.:
    26 июн 2008
    Сообщения:
    22
    Симпатии:
    6
    Как определил, что именно fsockopen дает 500?
    Если добавлением/убиранием этого куска кода - то стучи к хостеру. Пусть делает ревизию php-шника. Ибо это есть ошибка не твоя...

    А еслиб закрыты коннекты на внешку - то отдавало бы false или ошибочку в стиле php (не ошибку сервера).
     
    pslava нравится это.
  7. Lonely Wolf

    Lonely Wolf Прохожие

    Ошибка может возникать в 2-х случаях:
    1) Сервер настроен так(например тот же nigx) что он режет большое кол-во соединений и выдаёт ошибку 500.
    2) Ты делаешь просто неправильный запрос, скорее всего это битые заголовки, возьми любой работающий пример заголовков и попробуй просто спарсить любую страницу.
     
  8. anarki

    anarki Прохожие

    PHP:
    <?php
    header
    ('Content-type: text/plain');
    error_reporting(E_ALL);
    ini_set('display_errors',true);
    echo 
    ini_get('disable_functions');
    echo 
    ini_get('suhosin.executor.func.blacklist');
    Делать выводы. Если функция там появится, значит она запрещена для вызова.
     
  9. pslava

    pslava

    Регистр.:
    16 май 2007
    Сообщения:
    618
    Симпатии:
    122
    вопрос решен, проблема была в правах на папку, стояло 777, а помогло 755
     
  10. djajam

    djajam Прохожие

    :confused: хм... что не понят вроде 777 это без ограничений а 755 наоборот ограничения ну да ладно...

    Кстати у меня тажа проблема с fsockopen
    но без пятисотой ошибки

    на сайте inetlog.ru у них html счетчик и php счетчик
    вот php у них используется с fsockopen (отлавливает ботов)

    хостер говорит что fsockopen отключён
    хотя пробовал другими скриптами вроде работает,
    открывает на маем сайте чужие страницы
    а php счетчик не работает :nezn:

    из темы я что-то не понял как заменить fsockopen
    на что-то другое, помогите разобраться что да как :thenks:

    Добавлено через 4 минуты
    вот кстати кусочек кода php скрипта

    PHP:
    $ag $_SERVER["HTTP_USER_AGENT"];
    if (
    strstr($ag'Google') || strstr($ag'Yandex') || strstr($ag'YaDirectBot') || strstr($ag'Rambler')) {
      
    $fp = @fsockopen("inetlog.ru"80$errno$errstr10);
      if(
    $fp) {
     
Статус темы:
Закрыта.