[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: импорт данных из txt
thx
Всем доброе утро!
Столкнулся с проблемой, нужно экспортировать данные из .txt файла.

вид txt файла:

http://link1.ru
http://link2.ru
http://link3.ru
http://link4.ru

У меня есть страничка с php кодом,в котором прописывается ссылка и проверяется на работоспособность. В коде есть переменная $url
Т.е. у меня сейчас ссылка берётся не из txt файла.

А нужно чтобы из него.. т.к. он будет постоянно меняться


Вот сам php код:



<?php

function
check_domain_availible1($domain)
{
if (!filter_var($domain, FILTER_VALIDATE_URL))
return false;

$curlInit = curl_init($domain);
curl_setopt($curlInit, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($curlInit, CURLOPT_HEADER, true);
curl_setopt($curlInit, CURLOPT_NOBODY, true);
curl_setopt($curlInit, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($curlInit);
curl_close($curlInit);

if ($response)
return true;
return false;
}

$url = 'http://rambler.ru/';
if (check_domain_availible($url))
echo 'доступен';
else
echo 'не доступен';

?>



Как так прописать импорт параметра url из файла и сделать чтоб выводилось..?
При этом нужно менять название функции ещё для каждой ссылки, чтобы работал скрипт.
В итоге я хочу получать табличку слева ссылка, справа доступен или нет..



Спустя 28 минут, 12 секунд (3.04.2012 - 11:50) Renden написал(а):
thx
$array = explode("\n", file_get_contents('1.txt'));
foreach($array AS $url)
{
echo 'Сылка: <a href="'.$url.'">'.$url.'</a>';
if (check_domain_availible($url))
echo 'доступен <br>';
else
echo 'не доступен <br>';
}

где 1.txt твой файл

Спустя 3 минуты, 24 секунды (3.04.2012 - 11:54) Игорь_Vasinsky написал(а):
Цитата
"\n"

можно заменить на константу PHP_EOL

Спустя 5 минут, 35 секунд (3.04.2012 - 11:59) thx написал(а):
Цитата (Renden @ 3.04.2012 - 08:50)
thx
$array = explode("\n", file_get_contents('1.txt'));
foreach($array AS $url)
{
echo 'Сылка: <a href="'.$url.'">'.$url.'</a>';
if (check_domain_availible($url))
echo 'доступен <br>';
else
echo 'не доступен <br>';
}

где 1.txt твой файл

Так я же говорю, что не знаю как подключить его и брать из него данные.. в этом вся и проблема..

Спустя 10 минут, 24 секунды (3.04.2012 - 12:10) Renden написал(а):
thx
???

$array = explode("\n", file_get_contents('твой_файл_тхт_в_котором_информация.txt'));

Спустя 1 день, 22 часа, 10 минут, 30 секунд (5.04.2012 - 10:20) thx написал(а):
Стормозил, извиняюсь)
Но всёравно не получается.. получается лишь вытащить домены..

Спустя 41 минута, 2 секунды (5.04.2012 - 11:01) thx написал(а):

<?php

function
check_domain_availible($domain)
{
if (!filter_var($domain, FILTER_VALIDATE_URL))
return false;

$curlInit = curl_init($domain);
curl_setopt($curlInit, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($curlInit, CURLOPT_HEADER, true);
curl_setopt($curlInit, CURLOPT_NOBODY, true);
curl_setopt($curlInit, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($curlInit);
curl_close($curlInit);

if ($response)
return true;
return false;


}

$array = explode("\n", file_get_contents('1.txt'));


foreach($array AS $url)

{

echo 'Сылка: <a href="'.$url.'">'.$url.'</a>';
if (check_domain_availible($url))
echo ' доступен <BR>';
else
echo ' не доступен <BR>';


}

?>


Попробовал вот так.. выдаёт всё, но везде "Не доступен", а в последнем пишет доступен. Бред.... хм....(

По идее описал функцию, далее открываю txt беру переменную и прохожу по функции.. что не так не понимаю..


Спустя 1 час, 15 минут, 3 секунды (5.04.2012 - 12:16) killer8080 написал(а):
Цитата (Renden @ 3.04.2012 - 12:10)
thx
???

$array = explode("\n", file_get_contents('твой_файл_тхт_в_котором_информация.txt'));

Для этих целей есть функция file(), зачем изобретать велосипед?
thx
Выкиньте вашу функцию check_domain_availible(). Забирать контент курлом, чтобы просто проверить доступность страницы, да еще в цикле? Это как минимум не рационально. Для этого есть функция get_headers()
set_time_limit(0);
// уменьшаем таймаут сокета до 3 секунд
stream_context_set_default(array('http' => array('timeout' => 3)));
$urls = array_map('trim', file('file.txt'));
foreach($urls as $url)
echo $url.(($header = @get_headers($url)) && strpos($header[0], '200') ? ' Доступен' : ' Не доступен').'<br />';

Спустя 25 минут, 57 секунд (5.04.2012 - 12:42) thx написал(а):

<?php
set_time_limit(0);
// уменьшаем таймаут сокета до 3 секунд
stream_context_set_default(array('http' => array('timeout' => 3)));
$urls = array_map('trim', file('1.txt'));
foreach($urls as $url)
echo $url.(($header = @get_headers($url)) && strpos($header[0], '200') ? ' Доступен' : ' Не доступен').'<br />';
?>


Если так прописываю у меня пустой экран выдаёт..

Спустя 1 минута, 48 секунд (5.04.2012 - 12:44) killer8080 написал(а):
thx
Файл 1.txt лежит там же, откуда запускается скрипт?

Спустя 3 минуты, 24 секунды (5.04.2012 - 12:48) thx написал(а):
да

там прописано:

http://rambler.ru
http://yandex.ru

Спустя 14 минут, 41 секунда (5.04.2012 - 13:02) killer8080 написал(а):
thx
у тебя случайно не прокси?

Спустя 27 минут, 14 секунд (5.04.2012 - 13:29) killer8080 написал(а):
set_time_limit(0);
stream_context_set_default(
array(
'http' => array(
'timeout' => 3,
'method' => 'HEAD',
'header' => 'User-Agent:Opera/9.80 (Windows NT 6.1; WOW64; U; '.
'Edition Ukraine Local; ru) Presto/2.10.229 Version'.
'/11.62'
)
)
);

$urls = array_map('trim', file('1.txt'));
foreach($urls as $url){
$check = false;
if($headers = @get_headers($url)){
foreach ($headers as $header){
if(preg_match('#^HTTP/\d\.\d\s+2\d\d#', $header)){
$check = true;
break;
}
}
}

echo $url.($check ? ' Доступен' : ' Не доступен').'<br />';
}

Спустя 10 секунд (5.04.2012 - 13:30) thx написал(а):
Всмысле?
Просто на хостинг заливаю и там тестирую

Спустя 2 минуты, 11 секунд (5.04.2012 - 13:32) thx написал(а):
Цитата (killer8080 @ 5.04.2012 - 10:29)
set_time_limit(0);
stream_context_set_default(
array(
'http' => array(
'timeout' => 3,
'method' => 'HEAD',
'header' => 'User-Agent:Opera/9.80 (Windows NT 6.1; WOW64; U; '.
'Edition Ukraine Local; ru) Presto/2.10.229 Version'.
'/11.62'
)
)
);

$urls = array_map('trim', file('1.txt'));
foreach($urls as $url){
$check = false;
if($headers = @get_headers($url)){
foreach ($headers as $header){
if(preg_match('#^HTTP/\d\.\d\s+2\d\d#', $header)){
$check = true;
break;
}
}
}

echo $url.($check ? ' Доступен' : ' Не доступен').'<br />';
}

тоже просто белый экран((

Спустя 3 минуты, 14 секунд (5.04.2012 - 13:35) thx написал(а):

stream_context_set_default(
array(
'http' => array(
'timeout' => 3,
'method' => 'HEAD',
'header' => 'User-Agent:Opera/9.80 (Windows NT 6.1; WOW64; U; '.
'Edition Ukraine Local; ru) Presto/2.10.229 Version'.
'/11.62'
)
)
);



удалил это и заработало!! :)

Спасибо огромное!

Спустя 10 минут (5.04.2012 - 13:45) killer8080 написал(а):
error_reporting(E_ALL);

в начале скрипта поставь



Спустя 1 минута, 51 секунда killer8080 написал(а):
Цитата (thx @ 5.04.2012 - 13:35)
удалил это и заработало!! smile.gif

Не заработало, если хост будет недоступен функция будет выжидать таймаут сокета, по умолчани 90 секунд, если таких хостов будет много, скрипт будет работать оочень долго.

Спустя 3 минуты, 8 секунд (5.04.2012 - 13:48) thx написал(а):
Поставил, спасибо!

А можно както выводить на экран не полностью адрес: http://rambler.ru
а выводить rambler.ru ?


Цитата
Не заработало, если хост будет недоступен функция будет выжидать таймаут сокета, по умолчани 90 секунд, если таких хостов будет много, скрипт будет работать оочень долго.


А что сделать нужно..?

Спустя 1 минута, 28 секунд (5.04.2012 - 13:50) Игорь_Vasinsky написал(а):
str_replace()

Спустя 4 минуты (5.04.2012 - 13:54) thx написал(а):
Цитата (Игорь_Vasinsky @ 5.04.2012 - 10:50)
str_replace()

Это для замены http://rambler.ru
на rambler.ru

а как тут прописать, если он берёт с http:// и записывает в переменную полный адрес..? может лучше сделать чтобы в txt файле были адреса rambler.ru
а при проверке дописывалось http:// ?
только как это прописать вот..

Спустя 1 минута, 26 секунд (5.04.2012 - 13:55) killer8080 написал(а):
Цитата (thx @ 5.04.2012 - 13:48)
А что сделать нужно..?

А вот для этого и был тот код, который ты выкинул. Он меня настройки сокета по умолчанию, выставлял таймаут 3 секунды (этого должно быть достаточно).
Цитата (thx @ 5.04.2012 - 13:48)
А можно както выводить на экран не полностью адрес: http://rambler.ru
а выводить rambler.ru ?

$url = parse_url ($url, PHP_URL_HOST);

Спустя 3 минуты, 12 секунд (5.04.2012 - 13:58) thx написал(а):
Цитата (thx @ 5.04.2012 - 13:48)
А можно както выводить на экран не полностью адрес: http://rambler.ru
а выводить rambler.ru ?

$url = parse_url ($url, PHP_URL_HOST);


Спасибо, супер!


Цитата (thx @ 5.04.2012 - 13:48)
А что сделать нужно..?

А вот для этого и был тот код, который ты выкинул. Он меня настройки сокета по умолчанию, выставлял таймаут 3 секунды (этого должно быть достаточно).

Хм.. я если его ставлю, то у меня не работает ничего.. а без него работает
я попробовал прописать сайт, который не доступен, он сразу же выводить что он не доступен и всё

Спустя 9 минут, 59 секунд (5.04.2012 - 14:08) killer8080 написал(а):
Цитата (killer8080 @ 5.04.2012 - 13:45)
error_reporting(E_ALL);

в начале скрипта поставь


Спустя 1 минута, 58 секунд (5.04.2012 - 14:10) killer8080 написал(а):
thx
у тебя PHP <5.3?

Спустя 5 минут, 53 секунды (5.04.2012 - 14:16) thx написал(а):
Поставил, спасибо!

Видимо да..

Спустя 5 минут, 39 секунд (5.04.2012 - 14:22) killer8080 написал(а):
Цитата (thx @ 5.04.2012 - 14:16)
Видимо да..

Хм.. Да... Не задачка smile.gif
Дело в том что get_headers() использует контекст по умолчанию, и задать его принудительно для нее нельзя. Можно только изменять дефолтовый контекст, но stream_context_set_default() только PHP 5 >= 5.3.0 blink.gif
Ладно, для старых версий в принципе можно заюзать file_get_contents(), она нормально работает с контекстом. Сейчас накидаю ...

Спустя 1 минута, 9 секунд (5.04.2012 - 14:23) thx написал(а):
Но этот скрипт у меня работает отлично сейчас smile.gif

Спустя 2 минуты, 42 секунды (5.04.2012 - 14:26) thx написал(а):
Во, нашёл.. PHP 5.2.12 у меня

Спустя 20 секунд (5.04.2012 - 14:26) killer8080 написал(а):
Цитата (thx @ 5.04.2012 - 14:23)
Но этот скрипт у меня работает отлично сейчас

пока не наткнулся на длинную цепочку "мертвых" хостов, а там будет висяк smile.gif

Спустя 26 минут, 26 секунд (5.04.2012 - 14:52) killer8080 написал(а):
проверяй
set_time_limit(0); 
$context = stream_context_create(
array(
'http' => array(
'timeout' => 3,
'method' => 'HEAD',
'header' => 'User-Agent:Opera/9.80 (Windows NT 6.1; WOW64; U; '.
'Edition Ukraine Local; ru) Presto/2.10.229 Version'.
'/11.62'
)
)
);

$urls = array_map('trim', file('1.txt'));

foreach($urls as $url){
$check = false;
@file_get_contents($url, false, $context);
if(!empty($http_response_header)){
foreach ($http_response_header as $header){
if(preg_match('#^HTTP/\d\.\d\s+2\d\d#', $header)){
$check = true;
break;
}
}

}

unset($http_response_header);
echo $url.($check ? ' Доступен' : ' Не доступен').'<br />';
}

Спустя 4 минуты (5.04.2012 - 14:56) thx написал(а):
Работает спасибо!!

а вот любопытно..

'header' => 'User-Agent:Opera/9.80 (Windows NT 6.1; WOW64; U; '.
'Edition Ukraine Local; ru) Presto/2.10.229 Version'.

эти строчки что делают? почему именно opera? smile.gif

Спустя 1 минута, 2 секунды (5.04.2012 - 14:57) Игорь_Vasinsky написал(а):
браузер подделывают.

Спустя 2 минуты, 1 секунда (5.04.2012 - 14:59) killer8080 написал(а):
Цитата (thx @ 5.04.2012 - 14:56)
эти строчки что делают? почему именно opera?

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

Спустя 5 минут, 1 секунда (5.04.2012 - 15:04) thx написал(а):
Понятно) спасибо большое! работает суперски smile.gif

Спустя 6 минут, 17 секунд (5.04.2012 - 15:11) killer8080 написал(а):
thx
там еще один нюанс, вместо метода GET используем HEAD. Это снижает нагрузку на опрашиваемый сервер, так как он не запускает скрипты, а тупо возвращает заголовки, что повышает скорость ответа, и снижает трафик.

Спустя 12 минут, 20 секунд (5.04.2012 - 15:23) thx написал(а):
Такими темпами скоро хоть php буду получше понимать..) спасибо ещё раз smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.