Форум программистов, компьютерный форум, киберфорум
PHP: сети
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 29.07.2012
Сообщений: 4
1

file_get_contents(http://) иногда работает иногда нет

29.07.2012, 22:06. Показов 3767. Ответов 8
Метки нет (Все метки)

Такой код:
PHP
1
echo file_get_contents('http://example.com/');
Иногда работает иногда нет, все что связано с коннектом к серверу глючит, такие функции как get_headers и т.д. тоже иногда работают иногда нет. Получается в результате либо то что мне нужно, либо false.

В чем может быть проблема? Кто сталкивался подскажите пожалуйста. Может быть не хватает памяти.

Параметр allow_url_fopen у меня включен:
allow_url_fopen = On
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.07.2012, 22:06
Ответы с готовыми решениями:

Запрос иногда работает, а иногда - нет.
Написал запрос вида: data = Request.QueryString('data') sql='SELECT * FROM svch where...

Openssl. Иногда вызов функций шифрования проходит нормально, иногда нет
Всем привет! Использую библиотеку openssl для шифрования / дешифрования. Генерирую ключи...

Почему иногда отслеживается нажатие на три клавиши сразу, а иногда нет
Доброй ночи, кто может объяснить почему иногда отслеживает нажатие на три кнопки сразу, а иногда...

Почему иногда функции передается значение int, а иногда - нет?
1 случай: void Function_1(int* & rVarOne, int* &rVarTwo) { /* Какие-то операции с...

8
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16827 / 6705 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
29.07.2012, 22:23 2
так это у вас он включен. но не факт что на других серверах он включен

Добавлено через 42 секунды
можете cURL-ом попробовать, может им будет нормально..
0
201 / 198 / 4
Регистрация: 13.06.2012
Сообщений: 1,009
Записей в блоге: 3
30.07.2012, 10:56 3
>так это у вас он включен. но не факт что на других серверах он включен
Это их проблемы. file_get_contents зависит от настроек только своего сервера!!!

Без контекста не определится. Могут быть проблемы с самим сервером донором. Может Ваш скрипт тащит слишком активно страницы что его распознают как бота блочат.
Разбивайте код на блоки. Тестируйте по отдельности. Проверяйте забор страницы в одиночном режиме руками вписали (url забрали) делайте паузы перед забором секунд по 5.
0
0 / 0 / 0
Регистрация: 01.08.2012
Сообщений: 9
01.08.2012, 21:08 4
У меня похожая проблема. В цикле с помощью file_get_contents() загружаю около 100 страниц с внешнего сайта и некоторые из них возвращаются в виде кракозябров вот такого типа
PHP
1
‹мY[oЫЦћ?Е)ѓVvm‰’_"KкЫY3$m`{Љў((сXўM‘*IЩqТ|·^^Љ¶KљmШЫE6V2iIоЪb–эО9¤n–\w+°=L†m^юзї+ыЪъ»kЫпЭЫ ooЯЅCоэожќЫkDЉЛтжЧdy}{]јёћH’mK1lНСLCСeyг)?•e/уЩ·7VЧqгhЋNуwЁб( «–!џ‘o‚NЗу2дiГ;v»nл%9uЫnГm‘йњ»ДЇїhФ}П%чj¶}H65УЙКO¶ Ш”8ЉUўNоCЗ¬‚ВЭЌнUb(љ[ЯШZЫј}oыц»пђўi8 љ“ъd:Э шз$xЦр|Чч^‘З-ч?ьщЁн5зИqЅQoьи}KNѓfэиїВ9v[g|МбЩi;иx-Ж*0µл]Їы’4|п„імЧымµПNOПЗIњя?яЅшЃон*-ў|пТўГ3XВ.P« {qНPй}„Л q[{@yҐ"Їi•*L1д†ЃјJS”Є‹Ѕь“„‹2+?¬°_БэОКeЄЁ››п®їG Ґ5–re n.ўћзј\2ј+SVIq
Причем, если скрипт запустить ещё раз, может быть такое, что страница, которая раньше была с кракозябрами вернулась в нормальном html формате, а которая была в нормальном формате теперь в кракозябрах. Че за дела? Выставил паузу между загрузками страниц, не помогло. Может у кого есть мысли по этому поводу.
0
0 / 0 / 0
Регистрация: 29.07.2012
Сообщений: 4
03.08.2012, 19:09  [ТС] 5
Я решил проблему. Оказывается у PHP какие то настройки с Apache. В итоге я просто через консоль обращаюсь к файлу и получаю результат. Криво, но работает, а больше мне и не надо.

Файл file_get_contents.php:
PHP
1
2
3
4
5
6
7
8
9
<?
if(isset($argv[1])) {
    $url = $argv[1];
    $url = urldecode($url);
    
    $data = file_get_contents($url);
    echo $data;
}
?>
Функция замена для file_get_contents:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?
function filegetcontents($url) { // http://apple.com
    $retVal = '';
    ob_start();
    
    $url = urlencode($url);
    $url = '"'.$url.'"';
    $command = 'php /_full_path_to_file_/file_get_contents.php '.$url;
    system($command);
    
    $retVal .= ob_get_contents();
    ob_end_clean();
 
    return $retVal;
}
?>
Пример использования:
PHP
1
2
3
<?
echo filegetcontents('http://apple.com');
?>
Код не претендует на идеал, но мне он подходит, может кому пригодится. Удачи =)
0
0 / 0 / 0
Регистрация: 01.08.2012
Сообщений: 9
03.08.2012, 20:36 6
Я, кстати, тоже свою задачу решил. Вот здесь{ссылка удалена} дали дельный совет.
PHP
1
2
3
4
5
6
7
8
9
if(isset($http_response_header[6]) and $http_response_header[6] == "Content-Encoding: gzip") {
$html = "";
$fp = gzopen($file, "r");
  while (!gzeof($fp)) {
   $buffer = gzgets($fp, 4096);
   $html .= $buffer;
          }
   gzclose($fp);                           
}
0
0 / 0 / 0
Регистрация: 29.07.2012
Сообщений: 4
03.08.2012, 20:39  [ТС] 7
Спасибо, пригодится.

Правда одно но, на будущее, эти параметры в хэдерах часто "прыгают", сегодня ключ 6, завтра 3.

Используйте такую штуку:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function get_param_from_headers($arr, $type) {
    $headers = array();
    foreach($arr as $v) {
        $headers[] = split(': ', $v);
    }
    
    $result = false;
    foreach($headers as $v) {
        if(strtolower($v[0]) == strtolower($type) && isset($v[1])) {
            $result = $v[1];
        }
    }
    
    return $result;
}
Пример использования получения резалта по конкретному параметру:
PHP
1
2
$headers = get_headers('http://apple.com');
echo get_param_from_headers($headers, 'Content-Encoding');
0
0 / 0 / 0
Регистрация: 01.08.2012
Сообщений: 9
03.08.2012, 21:08 8
Ага, учту!

Добавлено через 4 минуты
Блин, мою ссылку удалили. В общем, дело было в том, что некоторые страницы были в архиве. По приходящим заголовкам надо проверить архив это или нет и если архив, открыть его и прочитать. Код выше.

Добавлено через 16 минут
javac, твоя функция вообще в тему оказалась. Будет как дополнение для чтения архивированных файлов.
0
0 / 0 / 0
Регистрация: 29.07.2012
Сообщений: 4
03.08.2012, 22:20  [ТС] 9
Да, я понял.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.08.2012, 22:20

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Почему программа иногда возвращает не нулевой результат, а иногда нуль?
С чем подобное может быть связана?

Сборка игрового компа(иногда стримы) иногда для монтажа
Привет, ребята! Нужна помощь по сборке, что скажете на комплектации ниже, я выбрал по макс....

Компьютер зависает, иногда с полоской по монитору, иногда с синим экраном.
У меня такая штука с компом: включаешь компьютер, можешь подолгу за ним сидеть: играть, смотреть...

Компьютер сам отключается. Иногда моментально, иногда через время
Привет всем. В общем комп при включении издает какой то треск и сразу отключается. Иногда...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.