Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: помогите исправить ошибку
Форумы портала PHP.SU » PHP » Напишите за меня, пожалуйста » помогите исправить ошибку

Страниц (1): [1]
 

1. xsh - 11 Августа, 2011 - 11:39:00 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $file = file('url.txt');
  2. foreach($file as $n)
  3. {
  4.         if ($data = file_get_contents("http://webcache.googleusercontent.com/search?q=cache:$n"));
  5.                 $regex = '/snapshot of the page as it appeared on (.+?) GMT/';
  6.                 preg_match($regex,$data,$match);
  7. echo "$n $match[1]";
  8. }

при работе возникает PHP Notice: Undefined offset: 1 in /var/www/1.php on line 10
и данные верные выдает только за последний проход, а остальные все с нотисом.
2. OrmaJever - 11 Августа, 2011 - 11:49:56 - перейти к сообщению
не нашло на странице совпадений с маской, и $match пустой или не имеет первый елемент
3. illy - 11 Августа, 2011 - 11:50:48 - перейти к сообщению
разве file_get_contents можно применять к ссылке?
я прост сам не знаю Не понял
а вот здесь echo "$n $match[1]" если по регулярке не нашёл ничё, то при выводе будет писать ошибку.

Скопируй url.txt
4. xsh - 11 Августа, 2011 - 11:58:01 - перейти к сообщению
illyможно и даже нужно
url.txt:

OrmaJever в том то и дело я не знаю как правильно написать строку echo "$n $match[1]"; поскольку если просто echo $match; написать то скрипт вообще не работает, а так хоть 1 значение выдает.
5. illy - 11 Августа, 2011 - 12:19:51 - перейти к сообщению
<?php
$file = file('url.txt');
foreach($file as $n)
{
$data=file_get_contents("http://webcache.googleusercontent.com/search?q=cache:$n");
if(preg_match('/snapshot of the page as it appeared on (.*)? GMT/',$data,$match) or preg_match('/по состоянию на (.*)? GMT/',$data,$match)){
echo "$n $match[1]<br>";
}
}
?>

но если будет грузить больше 30 секунд, то остановится Улыбка
6. xsh - 11 Августа, 2011 - 12:31:13 - перейти к сообщению
illy ошибку не выдает, но показывает по прежнему только результат по последнему значению из url.txt
не остановится, я то с локала его запускаю. планирую туда прокси еще прикрутить, только пока не знаю как. как то через stream_context_create надо лист с проксями подцеплять.
7. illy - 11 Августа, 2011 - 13:00:28 - перейти к сообщению
<?php
$file = file('url.txt');
foreach($file as $n)
{
$data=file_get_contents("http://webcache.googleusercontent.com/search?q=cache:$n");
$data=preg_replace('/(.*)по состоянию на (.*)? GMT(.*)/','\2',$data);
$data=preg_replace('/(.*)snapshot of the page as it appeared on (.*)? GMT(.*)/','bzz\2nzz',$data);
preg_match('/bzz(.*)nzz/',$data,$m);
echo $n.$m;
}
?>
$m тут надо $m[0] или $m[1] не могу проверить так как гугл ограничил доступ Ха-ха
8. OrmaJever - 11 Августа, 2011 - 14:46:24 - перейти к сообщению
xsh просто на страницах нету такой маски - "snapshot of the page as it appeared on (.+?) GMT"
если всётаки так запланировано что может и не быть совпадений то нужно просто проверять переменую
PHP:
скопировать код в буфер обмена
  1. echo "$n ". (isset($match[1]) ? $match[1] : 'не найдено');
9. xsh - 11 Августа, 2011 - 14:48:07 - перейти к сообщению
illy если $m; то
yandex.ru Array
bytes.com Array
yahoo.com Array

если $m[0] то у всех url выдает PHP Notice: Undefined offset: 0 in /var/www/1.php on line 9
а у последнего yahoo.combzz5 Aug 2011 13:29:15nzz
явно не то..
если $m[1] то у всех url выдает PHP Notice: Undefined offset: 1 in /var/www/1.php on line 9
а у последнего yahoo.com5 Aug 2011 13:29:15
10. xsh - 11 Августа, 2011 - 17:20:37 - перейти к сообщению
OrmaJever запланировано что совпадения должны быть всегда и если сделать так:
PHP:
скопировать код в буфер обмена
  1. if(preg_match('/snapshot of the page as it appeared on (.*)? GMT/',$data,$match) or preg_match('/по состоянию на (.*)? GMT/',$data,$match)){

то исключаются ситуации несовпадения, и при этом скрипт не работает со списком url.txt а выдает значение только последнего. при этом если проверить те значения что не выводятся этим скриптом просто подставляя напрямую:
PHP:
скопировать код в буфер обмена
  1.  
  2. $n = "bytes.com";
  3. $data = file_get_contents("http://webcache.googleusercontent.com/search?q=cache:$n");
  4. $regex = '/snapshot of the page as it appeared on (.+?) GMT/';
  5. preg_match($regex,$data,$match);
  6. file_put_contents("log.txt",$match[1]."\r\n", FILE_APPEND);
  7. echo "Все данные были сохранены в log.txt";

то информация выдается, проблема в подключении самого файла url.txt к скрипту, ошибка где то там, маска же работает даже если текст на русском как я понял, поскольку если в браузере вбить http://webcache[dot]googleuserconten[dot][dot][dot]=cache:bytes[dot]com то парсенный участок выдается на русском.
(Добавление)
если вставить в скрипт:
PHP:
скопировать код в буфер обмена
  1.     echo "$n ". (isset($match[1]) ? $match[1] : 'не найдено');

то значения выдаются только по последнему, что в принципе уже и очевидно (по остальным "не найдено"), я просто не понимаю почему скрипт корректно обрабатывает только последнюю строчку из файла url.txt
11. xsh - 12 Августа, 2011 - 02:16:45 - перейти к сообщению
вообщем, бодания со скриптом не прошли даром и вот к чему пришел:
PHP:
скопировать код в буфер обмена
  1. $file = array("yandex.ru", "yahoo.com", "mail.ru");
  2. foreach($file as $n){
  3.     $data=file_get_contents("http://webcache.googleusercontent.com/search?q=cache:$n");
  4.     if(preg_match('/snapshot of the page as it appeared on (.*)? GMT/',$data,$match) or preg_match('/по состоянию на (.*)? GMT/',$data,$match)){
  5.         print("$n $match[1]");
  6.     }
  7. }

если так то работает, при этом если проверять отдельно поступают ли данные из файла, то выходит что поступают.пришел к выводу что функция file() как то не дружит с file_get_contents()
подскажите пожалуйста чем можно заменить тут функцию file() чтобы забирать массив из файла?
12. illy - 12 Августа, 2011 - 09:50:20 - перейти к сообщению
$f=file('url.txt'');
for($c=0;$c!=sizeof($f);$c++){
$d=file_get_contents("http://webcache.googleusercontent.com/search?q=cache:$f[$c]");
if(preg_match('/snapshot of the page as it appeared on (.*)? GMT/',$d,$m) or preg_match('/по состоянию на (.*)? GMT/',$d,$m)){
print("$f[$c] $m[1]");
}
}
13. xsh - 12 Августа, 2011 - 10:35:59 - перейти к сообщению
illy неа, опять только 1 результат, нужно вообще не использовать функцию file() или придумать какое то другое условие, чтобы выдрать дату...
14. OrmaJever - 12 Августа, 2011 - 10:54:59 - перейти к сообщению
xsh пишет:
OrmaJever запланировано что совпадения должны быть всегда и если сделать так:
PHP:
скопировать код в буфер обмена
PHP:
скопировать код в буфер обмена
  1. if(preg_match('/snapshot of the page as it appeared on (.*)? GMT/',$data,$match) or preg_match('/по состоянию на (.*)? GMT/',$data,$match)){

гугл использует кодировку utf (незнаю как остальные url), а для utf нужен флаг u иначе ничего не найдёт.
15. xsh - 12 Августа, 2011 - 11:10:44 - перейти к сообщению
решение найдено ребят, OrmaJever да ты прав, нужен флаг, но вовсе не там.
вот решение:
PHP:
скопировать код в буфер обмена
  1. $file = file('url.txt', FILE_IGNORE_NEW_LINES);

всем спасибо.

 

Powered by ExBB FM 1.0 RC1