Скрипт останавливается пряма по середине выполнения функции print

  • Автор темы Sexycat
  • Дата начала

Sexycat

Guest
Скрипт останавливается пряма по середине выполнения функции print

Я пишу индексатор, в теории он проходит по всем найденным ссылкам начиная от указанного адреса.. но на самом деле он зачем-то останавливается по не понятным мне причинам...
хотя вроде на одном и том же мете... пряма вот так например::


215 Ссылка добавленна: http://localhost/~php/f/zip-entry-name.html
216 Ссылка добавленна: http://localhost/~php/f/zip-entry-filesize.html
217 Ссылка добавленна: http://local




PHP:
<?

require 'DB.php';
$db = DB::connect('mysql://root:.....@localhost/eboard_v03beta',FALSE);
$db -> setFetchMode(DB_FETCHMODE_ASSOC);
$GLOBALS['myURLs'] = array();
ini_set('max_execution_time',0);
ini_set('output_buffering',0);
ini_set('error_reporting',E_ALL);
ini_set('memory_limit',0);


$GLOBALS['iiE']=0;
$GLOBALS['iiEi']=0;
$GLOBALS['iiEo']=0;
$GLOBALS['iiEe']=0;
$GLOBALS['iiEw']=0;

function indexIT($URL) {
print $GLOBALS['iiE']++." ";
	global $db;
	
	$URL = freack_url($URL);
if (!isset($GLOBALS['iIndexItSite'])) {
	if (!eregi('^[url]http://.*/[/url]$',$URL)) { die("<br>Bad adres: <b>$URL</b><br>example: <i>[url]http://www.my.site.com/[/url]</i>"); }
	$GLOBALS['iIndexItSite'] = $URL;
                                      }
	
	$GET = load_url($URL);
$GLOBALS['iiEe']++;
	if (is_array($GET)) {
	if (!empty($GET['KEYWORDS'])) {
			$GLOBALS['iiEi']++;
						
			$se1 = "Ссылка обновлена: {$GET['URL']}\n";
			$se2 = "Ссылка добавленна: {$GET['URL']}\n";
			if ($GET['DO'] == 'UPDATE') { $db -> autoExecute ('search_sites', array('URL'=>$GET['URL'], 'KEYWORDS'=>$GET['KEYWORDS'],'LM'=>$GET['LM']), DB_AUTOQUERY_UPDATE, "URL='{$GET['URL']}'"); }
			else                        { print $se2; $db -> autoExecute ('search_sites', array('URL'=>$GET['URL'], 'KEYWORDS'=>$GET['KEYWORDS'],'LM'=>$GET['LM']), DB_AUTOQUERY_INSERT); }
			foreach ($GET['LINKS'] as $v) { $cool_adres=''; $cool_adres=index_test($v,$URL); if ($cool_adres != false) { indexIT($cool_adres); }}
                                  } else { print "<i>Файл пуст</i>\n"; }
	                    } else { print "Кривая ссылка: {$URL}\n"; }
	
                       }



	function load_url($URL) {
			$index = @fopen($URL,"rb");
			$content = NULL;

			if (!ereg('200',$http_response_header[0])) { return false; }

				foreach ($http_response_header as $v) {
						if (eregi('^Last-Modified:',$v)) { $LM = $v; }
						if (eregi('^Content-Type:',$v))  { $CT = $v; }
				                                      }

			$ITM = index_exists($URL);

			while (!feof ($index)) { $content .= fgets($index, 4096); }

						foreach (explode(' ',$CT) as $v) { if (eregi('^charset=',$v)) { strtok($v,'='); $CHARSET = strtok('='); } else { $CHARSET = ''; }}
						preg_match_all ("/<(?:a |frame )(.*)>/iU", $content, $href, PREG_PATTERN_ORDER);
						$LINKS = $href[1];
						$KEYWORDS = preg_replace('/<(|\/)[^>]*?>|&(.*|\S);/','', $content);

			fclose($index);
			
			if ($ITM === false) { $ITM = 'INSERT'; } else { $ITM = 'UPDATE'; }
			return array('URL'=>$URL,'CHARSET'=> $CHARSET, 'LM'=>$LM, 'LINKS'=>$LINKS, 'KEYWORDS'=>$KEYWORDS, 'DO'=>$ITM);
	                        }    
	                        
	                        

	function index_test($HREF,$gURL) {

		preg_match('/(?:href|src)=(\'|")(.*)(\'|")/iU',$HREF,$URL);

		if (isset($URL[2])) { $URL = $URL[2]; } else { print "Не найдена ссылка\n"; return false; }
		
		if (!in_array($URL,$GLOBALS['myURLs'])) { $GLOBALS['myURLs'][] = $URL; } else { print "Ссылка повторяется\n"; $GLOBALS['iiEw']++;return false; }
		
		if (eregi('^[url]http://[/url]',$URL)) {
			if (eregi("^{$GLOBALS['iIndexItSite']}",$URL)) { return $URL; } else { print "Ссылка на другой сервер\n"; return false; }
		                            }

		if (!isset($URL)) { print "Ссылка пуста\n"; return false; }
		if ($URL == '')   { print "Ссылка пуста [1]\n"; return false; }
		
		$gURL = parse_url($gURL);		
		
		if (!ereg('/$',$gURL['path'])) { $gURL['path'] = trim_file($gURL['path']); $gURL = "{$gURL['scheme']}://{$gURL['host']}{$gURL['path']}"; }
		else                           { $gURL = "{$gURL['scheme']}://{$gURL['host']}{$gURL['path']}"; }


		return $gURL.$URL;
	                                 }
                     
	                                 
	function freack_url($URL) { return preg_replace('/\w+\/\.\.\/|\.\//U','',$URL); }



	function index_exists($URL) {
			global $db;
			$result = $db -> getOne("select LM from search_sites where URL='$URL'");
			if (!empty($result))  { return $result; }
			return false;
                            }

	function trim_file($path) {
		$P = explode('/',$path);
		unset($P[count($P)-1]);
		return implode('/',$P).'/';
	                          }
                            


indexIT('http://localhost/~php/');
print "\n-----------\n\n\nПовторений: ".$GLOBALS['iiEw'];
print "\nСсылок просмотренно всего: ".$GLOBALS['iiEe'];
print "\nСсылок просмотренно: ".$GLOBALS['iiEi'];
print "\nСсылок обновлено: ".$GLOBALS['iiEo'];

?>
215 Ссылка добавленна: http://localhost/~php/f/zip-entry-name.html
 

Demiurg

Guest
ты предлагаешь за тебя отлаживать код ?
 

jer

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

Sexycat

Guest
Demiurg -Почему бы нет, может комунить нужен подобный код и он тока ждет как бы отладить :))
а вот какой толк от твоего поста я вообще не понимаю...


jer -спасибо, вроде помогло..
 

SiMM

Новичок
Да, конечно, использование функии flush само тебе код отладит.
 

jer

...
ну так он хоть ошибку увидит (надеюсь) - все движение вперед. ;)
 

Sexycat

Guest
Какая Ошибка??

Demiurg Что еще за цену? Цену за что??...

Я добавил flush() он перестал обрывать скрипт...
Но видомо сервера не всегда возвращают дату последней модификации документа... это нормально?
 

jer

...
блин, думал, ты Sexycat дальше сам раскинешь мозгами, но похоже нет. ;(

либо _локализуй_ ошибку и спрашивай КОНКРЕТНО, а разбираться в твоем коде никто бесплатно не будет, как уже сказал Demiurg.

ps: и вообще на вопрос топика тебе уже ответили. ;)
 

Sexycat

Guest
jer - О чем вы все говорите,??
я плохо вас понимаю...
-------
У миня все заработало, все отлично, спасибо большое.
только теперь я не понимаю о чем это вы говрите,....



neko сказал что тут есть ровно одна ошибка, мне интересно тчо он имел в виду..
ааа.. у меня паника...
 

jer

...
%)))) ну ты не сообщил о том, что нашел ошибку, и не сказал в чем она заключалась.

а тебе говорили только о том, что с такими вопросами сюда не ходят, если хотят получить ответ.

1. не надо кидать здоровый скрипт и спрашивать "где ошибка?"

2. сначала находишь (локализуешь) ошибку и приходишь сюда с ~5-ю строчками кода. но обычно после локализации ошибки, в 99% случаев автор сам находит ее причину, если он не безнадежен.

3. (про|пере)читай правила форма.

ps: надеюсь, ситуация прояснилась и вопрос исчерпан?
 

Sexycat

Guest
Да саписбо.... извиняюсь если чего нарушил...

Ошибка исчезла сразу послде того как я заюзал flush()
 

jer

...
как это исчезла? flush мог только помочь тебе ее увидеть, если она там была. либо ты ее исправил (?) после того как увидел и умолчал об этом как партизан.

здесь принято сообщать в чем была ошибка, хотя в твоем треде это практического смыла для последователей не имеет.

ps: решил вопрос? - замечательно! хотя ты и не все уловил, что тебе тут пытались сказать. ладно, мне все ясно...
 

SiMM

Новичок
jer, как же вы ошибались в своём втором посте :)
А клиент у нас просто шаман - потанцевал с бубном - всё само собой заработало ;)
 

Sexycat

Guest
SiMM - не знаю кто тут у нас шаман..., но правда помогло я всего лишь добавил этот флуш и все само собой заработало... :)
 

SiMM

Новичок
Sexycat, помогло, не помогло - это неважно, важно то, что ты в проблеме не разобрался. И в следующий раз можешь предложить свои шаманские услуги, когда у кого-то возникнут проблемы, которые, как тебе покажется, имеют с твоей что-то общее ;)
 

Sexycat

Guest
SiMM - я постараюсь этого избежать.. вот тока тут на самом деле какоето волшебство тварится просто...

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

и останавливается тсбильно ели начал останвливатся на 320 проходе он всегда на нем останавливается пока в программу не добавиш чтонибудь соврешенно не нужное...

какойнить if который ничего не делает или print "";

тогда он останавливается на например 315 - 400 проходе но всеравно стабильно... как начал на том и останавливается :)
 

SiMM

Новичок
Автор оригинала: Sexycat
я постараюсь этого избежать..
Чтобы этого избежать - надо разобраться в проблеме. Большинство существующих проблем решается при помощи отладки, как это сделать - описано, в частности, в PHP FAQ: Ничего не работает! Что делать???
и останавливается тсбильно ели начал останвливатся на 320 проходе он всегда на нем останавливается пока в программу не добавиш чтонибудь соврешенно не нужное...

какойнить if который ничего не делает или print "";

тогда он останавливается на например 315 - 400 проходе но всеравно стабильно...
Я же говорю - шаман.
 
Сверху