Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проблема с длительностью выполнения скрипта
 
 автор: dump   (13.09.2009 в 19:04)   письмо автору
 
 

Подскажите пожалуйста решения для преодоления проблемы запрета выполнения скриптов более 30 секунд. Просто хостер не разрешает.

  Ответить  
 
 автор: cheops   (13.09.2009 в 19:07)   письмо автору
 
   для: dump   (13.09.2009 в 19:04)
 

Собственно обойти запрет нельзя (если он правильно выставлен). Разбивайте задачу на части, увеличивайте производительность скрипта. 30 секунд - для обычного скрипта - это очень много (учитывая, что время выполнения SQL-запросов и сетевой работы не учитываются). Какого рода задачу выполняет скрипт?

  Ответить  
 
 автор: dump   (13.09.2009 в 19:26)   письмо автору
 
   для: cheops   (13.09.2009 в 19:07)
 

Ну он просто парсит сервис backlinkwatch.com

Да я даже его выложить могу:

<?php
function get_yandex($url){

$ret = 'N/A';

if( substr($url,0,7) != 'http://' )
$url = 'http://' . $url;

if( $content = get_download('http://bar-navig.yandex.ru/u?ver=2&url='. urlencode($url) .'&show=1&post=0') ){

if( class_exists('SimpleXMLElement') ){
if( $xmldoc = new SimpleXMLElement($content) ){
$tcy = $xmldoc->tcy;
if( !empty($tcy) ){
$ret = $tcy['value'];
}
}
}
else{
preg_match("/value=\"(.\d*)\"/",$content,$tic);
if( !empty($tic[1]) ) $ret = $tic[1];
}
}

return $ret;

}

function get_download($url){

$ret = false;

if( function_exists('curl_init') ){
if( $curl = curl_init() ){

if( !curl_setopt($curl,CURLOPT_URL,$url) ) return $ret;
if( !curl_setopt($curl,CURLOPT_RETURNTRANSFER,true) ) return $ret;
if( !curl_setopt($curl,CURLOPT_CONNECTTIMEOUT,30) ) return $ret;
if( !curl_setopt($curl,CURLOPT_HEADER,false) ) return $ret;
if( !curl_setopt($curl,CURLOPT_ENCODING,"gzip,deflate") ) return $ret;

$ret = curl_exec($curl);

curl_close($curl);
}
}
else{
$u = parse_url($url);

if( $fp = @fsockopen($u['host'],!empty($u['port']) ? $u['port'] : 80 ) ){

$headers = 'GET '. $u['path'] . '?' . $u['query'] .' HTTP/1.0'. "\r\n";
$headers .= 'Host: '. $u['host'] ."\r\n";
$headers .= 'Connection: Close' . "\r\n\r\n";

fwrite($fp, $headers);
$ret = '';

while( !feof($fp) ){
$ret .= fgets($fp,1024);
}

$ret = substr($ret,strpos($ret,"\r\n\r\n") + 4);

fclose($fp);
}
}

return $ret;
}
if (empty($_POST['site']))
echo
<<<HTML_FORM
<center>
Input urls
<form method=POST>
<input type='text' name='site'><br>
<input type='submit' value='Prepare'>
</form>
<center>
HTML_FORM;
else
{
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,'http://www.backlinkwatch.com/index.php');
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,"backlinkurl=$_POST[site]");
$parameters=curl_exec($ch);
curl_close($ch);
//$parameters=file_get_contents('C:\Backlinkwatch.txt');
/*$pos=strpos($parameters,'<td valign="middle"class="row"align="left" width="200" >')+57;
While ($parameters[$pos]!='<')
{
$backlinkpage[$i]=$backlinkpage[$i].$parameters[$pos];
$pos++;
}*/
preg_match_all('#<td valign="middle"class="row"align="left" width="200" >(.*?)</td>#i', $parameters, $inlink,PREG_SET_ORDER);
preg_match_all('#<td valign="middle"class="row"align="left" width="28" >(.*?)</td>#i', $parameters, $anchor,PREG_SET_ORDER);
preg_match_all('#<td valign="middle"class="row"align="center" width="12" >(.*?)</td>#i', $parameters, $OBL,PREG_SET_ORDER);
preg_match_all('#<td valign="middle"class="row"align="center" width="15" >(.*?)</td>#i', $parameters, $Flag,PREG_SET_ORDER);
for ($i=0;$i<=count($inlink)-1;$i++)
{
preg_match('#<a href="(.*?)"#i',$inlink[$i][1],$url);
echo $i.' '.$inlink[$i][1].' '.$anchor[$i][1].' '.$OBL[$i][1].' '.$Flag[$i][1].get_yandex($url[1]).'<br><br>';
}
}
?>

  Ответить  
 
 автор: cheops   (13.09.2009 в 19:28)   письмо автору
 
   для: dump   (13.09.2009 в 19:26)
 

Он вообще все страницы парсит? Нельзя этот процесс разбить на части. Или столько времени уходит на одну страницу?

  Ответить  
 
 автор: dump   (14.09.2009 в 08:50)   письмо автору
 
   для: cheops   (13.09.2009 в 19:28)
 

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

  Ответить  
 
 автор: mihdan   (14.09.2009 в 12:35)   письмо автору
 
   для: dump   (13.09.2009 в 19:04)
 

Зачем вам парсить чужой скрипт по вытаскиванию бэк-линков, проще написать свой скрипт вытаскивания из Яндекса/Гугла

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования