Как сделать правильно скрипт?

Статус
В этой теме нельзя размещать новые ответы.

асс

Мой дом здесь!
Регистрация
13 Окт 2006
Сообщения
762
Реакции
230
Есть скрипт
1.txt В этом файле урлы
по ним будем брать контент

PHP:
<?php
$mass=file("1.txt");  //Берем урл и обрабатываем
foreach($mass as  $value)
{
//получили урл
$domans=$value;
$lines = (file_get_contents($domans));//Обрабатываем контент  полученый с урла,и очищаем от мусора
if(preg_match_all("/<a [^>]*>([^>]*\.(co.uk|co.in))</",$lines,$matche)){

}else
{
     echo "false";
}
foreach ($matche[1] as $line)//перебираем в массиве
затем открываем файл  3.txt и сохраняем все данные из полученых урлов
{
$fp=fopen("3.txt", 'a+');//открываем для записи файл
fwrite($fp,$line."\n"); // записываем  данные
}
 }fclose($fp);
  ?>

Как сделать чтоб он грабил с всех урлов.
У меня он грабит всего один урл первый в списке
и все. То есть цикла нет
Может кто знающий подправить?

Я с циклами не работал никогда толком. по этому не знаю как это реализовать.
 
Функция file() берёт файл в массив, разделение идёт по символу новой строки, причём каждый элемент массива будет
содержать этот символ.
То есть в этом коде
PHP:
$mass=file("1.txt"); 
foreach($mass as  $value)
{ 
...
переменная $value содержит урл вместе с символом новой строки, именно поэтому ничего не получается.

Вот решение проблемы:
PHP:
$mass=file("1.txt");  //Берем урл и обрабатываем
foreach($mass as  $value)
{
//получили урл
$domans=trim($value); 
...
 
  • Заблокирован
  • #3
Или так :)

PHP:
<?php
$mass=file("1.txt");  //Берем урл и обрабатываем
$UrlListCount=count($mass);
for ($i=0;$i<$UrlListCount;$i++)
{
//получили урл
$domans=trim($mass[$i]);
 
Вот так .
PHP:
$mass = explode("\x0a",file_get_contents("1.txt"));
foreach($mass as  $value) 
{  
...
Или
PHP:
$mass = explode("\n",file_get_contents("1.txt"));
foreach($mass as  $value) 
{  
...
Но с \n не всегда выходит .

Добавлено через 7 минут
А вообще функция file() в конце каждого массива оставляет спецсимволы обрыва строки .

Попробуй на это поставить rtrim() либо используй методы выше .
 
Вот так .
PHP:
$mass = explode("\n",file_get_contents("1.txt"));
foreach($mass as  $value) 
{  
...
Но с \n не всегда выходит .

наверное это из-за символа возврата каретки может не работать, preg_split('#\r?\n#'... получше будет
 
чтобы не париться с переводами строки и пр пустотами мона сделать так:
PHP:
$mass=file("1.txt"); 
foreach($mass as  $value)
{
 $value = trim($value);
...  
}

тогда точно получишь нужный урл.
 
Экономнее, по ресурсам, будет организовать построковое чтение. Т.н. чтение "в поток". Но это только при условии, что у вас список урлов длиннее 300-500 строк :)


PHP:
<?php 
 $fRead = fopen('urls_list.txt', 'r');
 while(!feof($fRead))
 {
   $url = trim(fgets($fRead));
   ......
 }
 fclose($fRead);
?>
Но эт так... для идеологии чиста :)
 
Почему будет экономнее?
 
Потому, что маны курить нада перед постановкой такого вопроса, а не траву.
 
ибо ненужно вливать весь файл в память, она не резиновая. а файл может быть объемом и 100 мегабайт или даже больше. это кстати и к автору спамита относится...
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху