Пробелма с перекодировкой URL

Тема в разделе "PHP", создана пользователем Stripe, 6 ноя 2009.

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

    Stripe

    Регистр.:
    21 окт 2007
    Сообщения:
    164
    Симпатии:
    9
    Есть скрипт:
    PHP:
    $PageWithLink file_get_contents('links.txt'); //загружаем ссылки из файла
    $PageWithLink explode("\n"$PageWithLink); //Разбивае все по переносу
    $PageWithLink[1] = ereg_replace("\r","",$PageWithLink[1]);//Удаляем перевод каретки
    $PageWithLink[1] = ereg_replace("\n","",$PageWithLink[1]);//Удаляем перевод каретки
    $encodeuno urlencode($PageWithLink[1]);//Перекодировываем элемент массива
    $SoxranenkaYandex file_get_contents('http://hghltd.yandex.net/yandbtm?qtree=wHnQA4uFf1HC%2Fb8U%2BiNJW8so1t8Iid9o9QpXuU%2Bj7ujP555XjF9k6aAIxAWUdQrQCDpyh8Z3suNaDJ5%2BdVb1DaS26J4ouvzz33L7barw4k7KZHIvX9DmUnb%2FGOHuhu3HjlMBeeaSEM94PaTF3wxyXotyYIBAYTwHuK1lfPUeaokq7hisqtIY%2Fw%3D%3D&text=url%3D%22www.'.$encodeuno.'%22%7Curl%3D%22'.$encodeuno.'%22&url=http%3A%2F%2Fwww.'.$encodeuno); //Парсим сохраненку Яндекса
    echo $SoxranenkaYandex;
    В links.txt
    В итоге получаю:
    Это адрес сохраненки:


    В чем косяк?
    ЗЫ: Проблема только с этими двумя адресами, больше проблем не видел.
     
  2. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    1)
    вместо
    можно просто
    Код:
    $PageWithLink=file('links.txt');
    
    2)
    сделай такой запрос
    Код:
    $url='http://hghltd.yandex.net/yandbtm?url='.urlencode('http://smi2.ru/sergysa/c14017');
    
    или как у тебя
    Код:
    $url='http://hghltd.yandex.net/yandbtm?url='.urlencode('http://'.trim($PageWithLink[1]));
    
    PS вместо
    мог использовать всего одну замену
    + регулярка не лучший способ это сделать, тут не критично, но вообще учти
     
    Stripe нравится это.
  3. Stripe

    Stripe

    Регистр.:
    21 окт 2007
    Сообщения:
    164
    Симпатии:
    9
    Спасибо за помощь в решении вопроса и сокращении кода.
     
  4. potuga

    potuga

    Регистр.:
    22 сен 2009
    Сообщения:
    376
    Симпатии:
    91
    Все правильно получаете. file_get_contents не предназначен для загрузки документов из интернета и при возникновении ошибок будет вот такая штука. А если ответ от сервера не придет, то он вообще не завершит выполнение и будет висеть, пока не кончится time_limit. Так что не используйте file_get_contents. Как минимум сокеты, а лучше Curl.

    Ну и вдогонку статья: http://russianblog.brainitup.com/index.php/2008/09/30/sravnitelnyjj-test-na-skorost-curl-vs-file_get_contents/
     
    Stripe нравится это.
  5. FL@SH

    FL@SH Читатель

    Заблокирован
    Регистр.:
    20 июл 2008
    Сообщения:
    193
    Симпатии:
    25
    PHP:
    $PageWithLink=file('links.txt');
    При больших обьёмах файла - может критично кончится для скрипта. Лучше уже старый добрый file_get_contents() и после разбивка по знаку конца строки
     
  6. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    2 FL@SH : бред
    при большом размере файла -- ты будешь иметь мало того, что массив ( т.к. делаешь explode() ) так еще и строчное представление файла

    т.е. памяти займешь больше

    тогда уже читать fread() проверяя символ конца строки

    если уж на то пошло то построчное чтение с помощью
     
  7. Stripe

    Stripe

    Регистр.:
    21 окт 2007
    Сообщения:
    164
    Симпатии:
    9
  8. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437

    убери www
    :
    _http://hghltd.yandex.net/yandbtm?url=http://smi2.ru/sergysa/c14017


    отследить 404 - работай курлом и получай хидеры вместе со страницей
     
    Stripe нравится это.
  9. FL@SH

    FL@SH Читатель

    Заблокирован
    Регистр.:
    20 июл 2008
    Сообщения:
    193
    Симпатии:
    25
    2 ZCFD
    А file() возвращает не массив? Суть в том, что file() получает контент файла и разбивает буфур на строки, а при работе с file_get_contents() разбиение на строки происходит с локальной переменной.Я в своё время посвещал немаловремени оптимизации этого вопроса
     
  10. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    FLASH file() возвращает массив, вот только минимум вызов двух функций медленнее чем вызов одной

    + работа с переменными

    пройдись профилировщиком по коду и все поймешь, к чему бесползеные споры?

    PS к твоему сведению одна из ошибок - неполное использование возможностей языка. А так -да, можешь и лишний раз explode() сделать
     
Статус темы:
Закрыта.