Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не работает код, ~27000 строк в базе. 
:(
    Опции темы
Sunvas
Дата 24.4.2007, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 8
Всего: 89



Есть код, который должен парсить странички сайта.
Код

for ($j=1;$j<=10;$j++){
$m=getlink("somesite");
for ($i=0;$i<25;$i++)
 $db->sql_query("INSERT INTO soft VALUES (NULL, '".$m[1][$i]."', '".$m[2][$i]."', '".$m[3][$i]."', '".$m[4][$i]."', '".$m[5][$i]."')");               }

В результате выполнения функции getlink в переменную $m записывается двумерный массив (таблица) вида $m[N][n], где N - число от 1 до 5 (номер столбца); n - число от 0 до 24 - число от 0 до 24 (номер строки).

После выполнения этого кода в базу записывается около 27000 строк. Почему?


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
capitan
Дата 24.4.2007, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 27.2.2005
Где: Москва

Репутация: 9
Всего: 13



Из этого кода ничего не понятно.
Весь код в студию.
PM MAIL WWW ICQ   Вверх
Fally
Дата 24.4.2007, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 17.8.2006
Где: Dahla

Репутация: 3
Всего: 4



Sunvas, здаётся мне что вся Ваша проблема здесь:
Код

for ($j=1;$j<=10;$j++){
$m=getlink("somesite");
....

Если функция getlink() возвращает массив который перебирая нужно записать в БД, тогда зачем делать возвращаемое ф-цией значение в цикле? Если я прав, тогда сделайте вот так:
Код

$m=getlink("somesite");
for ($j=1;$j<=10;$j++){
....


P.S. Согласен с автором предыдущего поста, побольше кода, пожалуйста...

Это сообщение отредактировал(а) Fally - 24.4.2007, 17:40


--------------------
Прежде чем задать вопрос на форуме воспользуйтесь поиском.
user posted image
user posted image
PM MAIL   Вверх
Sunvas
Дата 24.4.2007, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 8
Всего: 89



Код

function getdescription($url){ //переход по ссылке и новый парсинг текста
$cu = curl_init();
curl_setopt($cu, CURLOPT_URL, $url);
curl_setopt($cu, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
curl_setopt($cu, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($cu, CURLOPT_TIMEOUT, 100);
$output = curl_exec($cu);
$succeeded = curl_errno($cu) == 0 ? true : false;
$result=Array();
if ($succeeded) {
preg_match('Парсинг текста также по трем параметрам', $output, $out);
$result[]= $out[2];
$result[]= $out[1];
$result[]= $out[3];
return $result;
}}

function getlink($url){ //Выдергивание ссылок
$cu = curl_init();
curl_setopt($cu, CURLOPT_URL, $url);
curl_setopt($cu, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
curl_setopt($cu, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($cu, CURLOPT_TIMEOUT, 100);
$output = curl_exec($cu);
$succeeded = curl_errno($cu) == 0 ? true : false;
$result=Array();
if ($succeeded) {
 preg_match_all('Выдергивание ссылок по трем параметрам (имени ссылки, текста ссылки, описание ссылки)', $output, $out);
$result[]=$out[1];
$result[]=$out[2];
$result[]=$out[3];
$tmp2=Array();
$tmp3=Array();
$tmp4=Array();
for ($i=0;$i<count($out[1]);$i++){
  $tmp1=getdescription($out[1][$i]);
  $tmp2[]=$tmp1[0];
  $tmp3[]=$tmp1[1];
  $tmp4[]=$tmp1[2];
  }
$result[]=$tmp2;
$result[]=$tmp3;
$result[]=$tmp4;
return $result;
}}
for ($j=1;$j<=10;$j++){
$m=getlink("somesite");
for ($i=0;$i<25;$i++) $db->sql_query("INSERT INTO soft VALUES (NULL, '".$m[1][$i]."', '".$m[2][$i]."', '".$m[3][$i]."', '".$m[4][$i]."', '".$m[5][$i]."')");  
}


Добавлено через 4 минуты и 7 секунд
Цитата(Fally @  24.4.2007,  17:32 Найти цитируемый пост)
Если функция getlink() возвращает массив который перебирая нужно записать в БД, тогда зачем делать возвращаемое ф-цией значение в цикле? Если я прав, тогда сделайте вот так:

На сайте 10 страниц - они вида site.ru/doc1.html, site.ru/doc2.html и т.д.  Вот и зациклил:
Код

$m=getlink("site.ru/doc$j.html
");


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Fally
Дата 24.4.2007, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 17.8.2006
Где: Dahla

Репутация: 3
Всего: 4



В цикле сделайте помимо присваивания ещё и var_dump(m), и посмотрите на результат его вывода.. и сравните каждый вывод..

Это сообщение отредактировал(а) Fally - 24.4.2007, 17:46


--------------------
Прежде чем задать вопрос на форуме воспользуйтесь поиском.
user posted image
user posted image
PM MAIL   Вверх
capitan
Дата 24.4.2007, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 27.2.2005
Где: Москва

Репутация: 9
Всего: 13



а если так:
Код

        for ($j=1;$j<=10;$j++){
        $m=getlink("somesite");
        for ($i=0;$i<25;$i++){
            $db->sql_query("INSERT INTO soft VALUES (NULL, '".$m[1][$i]."', '".$m[2][$i]."', '".$m[3][$i]."', '".$m[4][$i]."', '".$m[5][$i]."')");    
        }
    }

PM MAIL WWW ICQ   Вверх
Fally
Дата 24.4.2007, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 17.8.2006
Где: Dahla

Репутация: 3
Всего: 4



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


--------------------
Прежде чем задать вопрос на форуме воспользуйтесь поиском.
user posted image
user posted image
PM MAIL   Вверх
capitan
Дата 24.4.2007, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 27.2.2005
Где: Москва

Репутация: 9
Всего: 13



Fally, 
Иногда код работает вроде как не по правилам.
Сказывается мне что это не весь код. И где-то идёт пересечение счётчика $j или $i, где-то он обнуляется и цикл идёт заново.
PM MAIL WWW ICQ   Вверх
Sunvas
Дата 24.4.2007, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 8
Всего: 89



Цитата(capitan @  24.4.2007,  18:12 Найти цитируемый пост)
Сказывается мне что это не весь код.

Это весь код. Правда используется библитека MySql из SLAED CMS для работы с базой. Но не думаю, что именно она создает помехи.


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
capitan
Дата 24.4.2007, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 27.2.2005
Где: Москва

Репутация: 9
Всего: 13



Сделай так и увидешь сколько записей:
Код

$num=0;
for ($j=1;$j<=10;$j++){
        $m=getlink("somesite");
        for ($i=0;$i<25;$i++){
            $num++;
        }
    }
echo 'Всего записей: '.$num;

PM MAIL WWW ICQ   Вверх
Sunvas
Дата 24.4.2007, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 8
Всего: 89



Цитата(capitan @  24.4.2007,  17:59 Найти цитируемый пост)
а если так:

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


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
capitan
Дата 24.4.2007, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 27.2.2005
Где: Москва

Репутация: 9
Всего: 13



Цитата(Sunvas @ 24.4.2007,  18:19)
Цитата(capitan @  24.4.2007,  17:59 Найти цитируемый пост)
а если так:

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

А их у тебя должно быть 250, исходя из твоего кода.
PM MAIL WWW ICQ   Вверх
Sunvas
Дата 24.4.2007, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 8
Всего: 89



Цитата(capitan @  24.4.2007,  18:23 Найти цитируемый пост)
А их у тебя должно быть 250, исходя из твоего кода.

Когда я писал - было 236, а сейчас проверил - 272. smile 


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Fally
Дата 24.4.2007, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 17.8.2006
Где: Dahla

Репутация: 3
Всего: 4



capitan, у меня насчёт пересечения параметров циклов тоже есть подозрение, но точно сказать не возможно... а насчёт фиг. скобок, никогда не встречался с неправильным выполнением инструкций записанных в них, но опять же всё возможно..
Sunvas, попробуйте без i-го цикла вот так:

Код

("INSERT INTO soft VALUES (NULL, '".$m[1][0]."', '".$m[2][0]."', '".$m[3][0]."', '".$m[0][$i]."', '".$m[5][0]."'), (NULL, '".$m[1][1]."', '".$m[2][1]."', '".$m[3][1]."', '".$m[4][1]."', '".$m[5][1]."'), (NULL, '".$m[1][2]."', '".$m[2][2]."', '".$m[3][2]."', '".$m[4][2]."', '".$m[5][2]."'), ...)


так будет больше кода, НО:
1) избавитесь от лишнего цикла -> ускориться время работы скрипта
2) точно количество добавлений в БД
3) САМОЕ ВАЖНОЕ. Уменьшиться нагрузка на сервер БД, т.к. такие запросы, как у Вас идущие подряд, но почти идентичные выполняются медленнее, чем мой запрос который выполниться в моём примере.


--------------------
Прежде чем задать вопрос на форуме воспользуйтесь поиском.
user posted image
user posted image
PM MAIL   Вверх
capitan
Дата 24.4.2007, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 27.2.2005
Где: Москва

Репутация: 9
Всего: 13



Теперь сделай так:
Код

$num=0;
for ($j=1;$j<=10;$j++){
        $m=getlink("somesite");
        for ($i=0;$i<25;$i++){
            $num++;
       if($num>300) echo $num;die;
        }
     
    }
echo 'Всего записей: '.$num;


И увидишь где проблема: в твоём коде или в классе mysql.
PM MAIL WWW ICQ   Вверх
Sunvas
Дата 24.4.2007, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 8
Всего: 89



Да, что еще хотел сказать. Остановить добавление значений не так уже просто. Даже при закрытии браузера и удаления файла-скрипа с сервера - добавление все-равно продолжается. smile 

Вот код работы с MySql... Может тут бага??
Код

<?php
class sql_db {
        var $db_connect_id;
        var $query_result;
        var $row = array();
        var $rowset = array();
        var $num_queries = 0;
        var $total_time_db = 0;
        var $time_query = "";

        function sql_db($sqlserver, $sqluser, $sqlpassword, $database, $persistency = true) {
                $this->db_connect_id = ($persistency) ? @mysql_pconnect($sqlserver, $sqluser, $sqlpassword) : @mysql_connect($sqlserver, $sqluser, $sqlpassword);
                if ($this->db_connect_id) {
                        if ($database != "" && !@mysql_select_db($database)) {
                                @mysql_close($this->db_connect_id);
                                $this->db_connect_id = false;
                        }
                        return $this->db_connect_id;
                } else {
                        return false;
                }
        }

        function sql_close() {
                if ($this->db_connect_id) {
                        if ($this->query_result) @mysql_free_result($this->query_result);
                        $result = @mysql_close($this->db_connect_id);
                        return $result;
                } else {
                        return false;
                }
        }

        function sql_query($query = "", $transaction = false) {
                unset($this->query_result);
                if ($query != "") {
                        $tdba = explode(" ", microtime());
                        $tdba = $tdba[1] + $tdba[0];
                        $this->query_result = @mysql_query($query, $this->db_connect_id);
                        $tdbe = explode(" ", microtime());
                        $tdbe = $tdbe[1] + $tdbe[0];
                        $total_tdb = ($tdbe - $tdba);
                        $this->total_time_db += $total_tdb;
                        $this->time_query .= "".substr($total_tdb, 0, 10) > 0.01."" ? "<font color=\"red\"><b>".substr($total_tdb, 0, 10)."</b></font> "._SEC.". - [".$query."]<br /><br />" : "<font color=\"green\"><b>".substr($total_tdb, 0, 10)."</b></font> "._SEC.". - [".$query."]<br /><br />";
                }
                if ($this->query_result) {
                        $this->num_queries += 1;
                        unset($this->row[$this->query_result]);
                        unset($this->rowset[$this->query_result]);
                        return $this->query_result;
                } else {
                        return ($transaction == END_TRANSACTION) ? true : false;
                }
        }

        function sql_numrows($query_id = 0) {
                if (!$query_id) $query_id = $this->query_result;
                if ($query_id) {
                        $result = @mysql_num_rows($query_id);
                        return $result;
                } else {
                        return false;
                }
        }

        function sql_affectedrows() {
                if ($this->db_connect_id) {
                        $result = @mysql_affected_rows($this->db_connect_id);
                        return $result;
                } else {
                        return false;
                }
        }

        function sql_numfields($query_id = 0) {
                if (!$query_id) $query_id = $this->query_result;
                if ($query_id) {
                        $result = @mysql_num_fields($query_id);
                        return $result;
                } else {
                        return false;
                }
        }

        function sql_fieldname($offset, $query_id = 0) {
                if (!$query_id) $query_id = $this->query_result;
                if ($query_id) {
                        $result = @mysql_field_name($query_id, $offset);
                        return $result;
                } else {
                        return false;
                }
        }

        function sql_fieldtype($offset, $query_id = 0) {
                if (!$query_id) $query_id = $this->query_result;
                if($query_id) {
                        $result = @mysql_field_type($query_id, $offset);
                        return $result;
                } else {
                        return false;
                }
        }

        function sql_fetchrow($query_id = 0) {
                if (!$query_id) $query_id = $this->query_result;
                if ($query_id) {
                        $this->row[$query_id] = @mysql_fetch_array($query_id);
                        return $this->row[$query_id];
                } else {
                        return false;
                }
        }

        function sql_fetchrowset($query_id = 0) {
                if (!$query_id) $query_id = $this->query_result;
                if ($query_id) {
                        unset($this->rowset[$query_id]);
                        unset($this->row[$query_id]);
                        while ($this->rowset[$query_id] = @mysql_fetch_array($query_id)) {
                                $result[] = $this->rowset[$query_id];
                        }
                        return $result;
                } else {
                        return false;
                }
        }

        function sql_fetchfield($field, $rownum = -1, $query_id = 0) {
                if (!$query_id) $query_id = $this->query_result;
                if ($query_id) {
                        if ($rownum > -1) {
                                $result = @mysql_result($query_id, $rownum, $field);
                        } else {
                                if (empty($this->row[$query_id]) && empty($this->rowset[$query_id])) {
                                        if ($this->sql_fetchrow()) {
                                                $result = $this->row[$query_id][$field];
                                        }
                                } else {
                                        if ($this->rowset[$query_id]) {
                                                $result = $this->rowset[$query_id][0][$field];
                                        } else if ($this->row[$query_id]) {
                                                $result = $this->row[$query_id][$field];
                                        }
                                }
                        }
                        return $result;
                } else {
                        return false;
                }
        }

        function sql_rowseek($rownum, $query_id = 0) {
                if (!$query_id) $query_id = $this->query_result;
                if ($query_id) {
                        $result = @mysql_data_seek($query_id, $rownum);
                        return $result;
                } else {
                        return false;
                }
        }

        function sql_nextid() {
                if ($this->db_connect_id) {
                        $result = @mysql_insert_id($this->db_connect_id);
                        return $result;
                } else {
                        return false;
                }
        }

        function sql_freeresult($query_id = 0){
                if (!$query_id) $query_id = $this->query_result;
                if ($query_id) {
                        unset($this->row[$query_id]);
                        unset($this->rowset[$query_id]);
                        @mysql_free_result($query_id);
                        return true;
                } else {
                        return false;
                }
        }

        function sql_error($query_id = 0) {
                $result["message"] = @mysql_error($this->db_connect_id);
                $result["code"] = @mysql_errno($this->db_connect_id);
                return $result;
        }
}

$db = new sql_db("localhost", "user_sunvas", "pass", "baza", false);
?>



--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Fally
Дата 24.4.2007, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 17.8.2006
Где: Dahla

Репутация: 3
Всего: 4



Вроде бы заметных ошибок нет, но могу ошибаться, единственное что удивило, почему в функции запроса не сделали place-holder'ов с использованием mysql_escape_string()?? Защиты хоть была бы от sql-injection...
 smile хм... задайте себе вопрос, имеет ли смысл использовать данную библиотеку??? Нужно ли вам большинство функций реализованных в данной библиотеке, не проще ли реализовать нечто подобное самому с набором самых необходимых функций.


--------------------
Прежде чем задать вопрос на форуме воспользуйтесь поиском.
user posted image
user posted image
PM MAIL   Вверх
Sunvas
Дата 24.4.2007, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 8
Всего: 89



Цитата(Fally @  24.4.2007,  18:43 Найти цитируемый пост)
Вроде бы заметных ошибок нет, но могу ошибаться, единственное что удивило, почему в функции запроса не сделали place-holder'ов с использованием mysql_escape_string()?? Защиты хоть была бы от sql-injection...

Можете показать как надо? smile 


Цитата(Fally @  24.4.2007,  18:43 Найти цитируемый пост)
хм... задайте себе вопрос, имеет ли смысл использовать данную библиотеку??? Нужно ли вам большинство функций реализованных в данной библиотеке, не проще ли реализовать нечто подобное самому с набором самых необходимых функций.

Задавал. Я в ПХП не любитель, и не любитель ПХП. Писать вынужден ибо "жизнь заставила". Поэтому у меня нет ни желания ни большой нужды писать что-то свое, если уже есть готовое. Если можете чем-то помочь, что-то посоветовать - буду рад. smile

Добавлено через 4 минуты и 57 секунд
Цитата(capitan @  24.4.2007,  18:28 Найти цитируемый пост)
Теперь сделай так:

Все это время я экспериментровал и вот, что получилось:
1. Если подставить вместо запроса в базу $num++;, то ничего не происходит - ничего не выводиться на экран. (почему не понимаю).
2. Если после действия 1 убрать строку $tmp1=getdescription($out[1][$i]);, то выводиться 250.
3. Если после действия 1 "for ($j=1;$j<=10;$j++)" заменить на "for ($j=1;$j<=2;$j++)", то выведется 50.
Что дальше??

ЗЫ я так понимаю, что в при действии 1 браузер (FF) просто "устает" ждать ответа с сервера, поэтому ничего и не показывает.


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Fally
Дата 24.4.2007, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 17.8.2006
Где: Dahla

Репутация: 3
Всего: 4



Пожалуйста:

Код

<?php
class MySQL
{
    private $_DBH;
    private $_queryArgs = array();
    private $_queryTmpl;
    private $_query;

    /*
    Объект класса создаётся так:
    $MySQL = new MySQL('database_server', 'database_user', 'database_password', 'database_name');
    При создании объекта класса MySQL автоматически создаётся подключение к серверу БД.
    */
    public function __construct($DB_SERVER, $DB_USER, $DB_PASS, $DB_NAME) {
        $this->_DBH = mysql_connect($DB_SERVER, $DB_USER, $DB_PASS);
        mysql_query("SET NAMES `cp1251`"); // <---- На некоторых хостингах за место русских букв выводятся знаки вопроса, исправляем эту неполадку.
        if(!is_resource($this->_DBH)) {
            throw new Exception('Невозможно подключение к БД.<br></i></b></tt> Сообщение <b>MySQL: </b><i><tt><b>'.mysql_error(), mysql_errno());
        }
        if(FALSE === mysql_select_db($DB_NAME, $this->_DBH)) {
            throw new Exception('Невозможно выбрать БД.<br></i></b></tt> Сообщение <b>MySQL: </b></b><i><tt><b>'.mysql_error(), mysql_errno());
        }
    }

    public function __destruct() {
        if(FALSE === mysql_close($this->_DBH)) {
            throw new Exception('Невозможно закрыть соединение с БД.<br></i></b></tt> Сообщение <b>MySQL: </b></b><i><tt><b>'.mysql_error(), mysql_errno());
        }
    }

    ## Синтаксис: Query('SELECT * FROM table_name WHERE id=? AND name=?', $id_var, $name_var)
    final public function Query() {
        $this->_queryArgs = func_get_args();
        $this->_queryTmpl =& $this->_queryArgs['0'];
        $this->_queryTmpl = str_replace("%", "%%", $this->_queryTmpl);
        $this->_queryTmpl = str_replace("?", "%s", $this->_queryTmpl);
        foreach($this->_queryArgs as $k=>$v) {
            if(!$k) continue;
            if(is_int($v)) continue;
            $this->_queryArgs[$k] = "'".mysql_escape_string($v)."'";
        }
        for($i = $j = count($this->_queryArgs)-1; $i<$j+20; $i++) {
            $this->_queryArgs[$i+1] = "UNKNOWN_QUERY_PARAMETER_NO_".$i;
        }
        $this->_query = call_user_func_array("sprintf", $this->_queryArgs);
        return mysql_query($this->_query);
    }
}
?>


Написан на РНР5, с использованием функции mysql_qw написанной Дмитрием Котеровым (Лаборатория dk).


Цитата

ЗЫ я так понимаю, что в при действии 1 браузер (FF) просто "устает" ждать ответа с сервера, поэтому ничего и не показывает. 


Возникает, что браузер ждёт из-за того, что скрипт выполняется слишком долго (НО время выполнения скрипта РНР по умолчанию - 30 секунд, но и время ожидания тоже около 30 секунд.).. Сдаётся мне, что всё дело вот в этом месте: $tmp1=getdescription($out[1][$i]);

Это сообщение отредактировал(а) Fally - 24.4.2007, 19:04


--------------------
Прежде чем задать вопрос на форуме воспользуйтесь поиском.
user posted image
user posted image
PM MAIL   Вверх
Sunvas
Дата 24.4.2007, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 8
Всего: 89



Fally, либо я неправильно интегрировал Ваш код, либо код нерабочий. Вот что говорит сервер:
Цитата

Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /home/sunvas/public_html/grobik/cql_n.php on line 4


Добавлено через 4 минуты и 44 секунды
Цитата(Fally @  24.4.2007,  19:00 Найти цитируемый пост)
 Сдаётся мне, что всё дело вот в этом месте: $tmp1=getdescription($out[1][$i]);

Просто оно много раз вызывается. Здачал этого места - зайти по пропарсеной ссылке и пропарсить страницу. Как видно из кода, таких страниц 250. Хотя может быть и 1000 и 10000. Как поступать в этом случае? - не буду же я вызывать скрипт вручную несколько раз, чтоон парсил по 50 страниц. Хотелось бы это все дело оставить "на ночь".

Только вот все-равно не пойму никак. Даже если скрипт выполняется долго и нудно, откуда тогда берется 27000 добавленных строк??? smile 


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Fally
Дата 24.4.2007, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 17.8.2006
Где: Dahla

Репутация: 3
Всего: 4



код полностью рабочий, вся проблема в том, что он предназначен для РНР5, а у вас по всей видимости стоит РНР4. Поэтому и сообщение об ошибке... 
Вот тоже самое для РНР4.
Код

<?php
class MySQL
{
    var $_DBH;
    var $_queryArgs = array();
    var $_queryTmpl;
    var $_query;
    /*
    Объект класса создаётся так:
    $MySQL = new MySQL('database_server', 'database_user', 'database_password', 'database_name');
    При создании объекта класса MySQL автоматически создаётся подключение к серверу БД.
    */
    function MySQL($DB_SERVER, $DB_USER, $DB_PASS, $DB_NAME) {
        $this->_DBH = mysql_connect($DB_SERVER, $DB_USER, $DB_PASS);
        mysql_query("SET NAMES `cp1251`"); // <---- На некоторых хостингах за место русских букв выводятся знаки вопроса, исправляем эту неполадку.
        if(!is_resource($this->_DBH)) {
            print('Невозможно подключение к БД.<br></i></b></tt> Сообщение <b>MySQL: </b><i><tt><b>'.mysql_error(), mysql_errno());
            exit();
        }
        if(FALSE === mysql_select_db($DB_NAME, $this->_DBH)) {
            print('Невозможно выбрать БД.<br></i></b></tt> Сообщение <b>MySQL: </b></b><i><tt><b>'.mysql_error(), mysql_errno());
            exit();
        }
    }
    function closeConnection() {
        if(FALSE === mysql_close($this->_DBH)) {
            pint('Невозможно закрыть соединение с БД.<br></i></b></tt> Сообщение <b>MySQL: </b></b><i><tt><b>'.mysql_error(), mysql_errno());
            exit();
        }
    }
    ## Синтаксис: Query('SELECT * FROM table_name WHERE id=? AND name=?', $id_var, $name_var)
    function Query() {
        $this->_queryArgs = func_get_args();
        $this->_queryTmpl =& $this->_queryArgs['0'];
        $this->_queryTmpl = str_replace("%", "%%", $this->_queryTmpl);
        $this->_queryTmpl = str_replace("?", "%s", $this->_queryTmpl);
        foreach($this->_queryArgs as $k=>$v) {
            if(!$k) continue;
            if(is_int($v)) continue;
            $this->_queryArgs[$k] = "'".mysql_escape_string($v)."'";
        }
        for($i = $j = count($this->_queryArgs)-1; $i<$j+20; $i++) {
            $this->_queryArgs[$i+1] = "UNKNOWN_QUERY_PARAMETER_NO_".$i;
        }
        $this->_query = call_user_func_array("sprintf", $this->_queryArgs);
        return mysql_query($this->_query);
    }
}
?>


Это сообщение отредактировал(а) Fally - 24.4.2007, 19:51


--------------------
Прежде чем задать вопрос на форуме воспользуйтесь поиском.
user posted image
user posted image
PM MAIL   Вверх
Glip
Дата 24.4.2007, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 473
Регистрация: 30.12.2006

Репутация: 7
Всего: 18



Цитата(Sunvas @  24.4.2007,  18:19 Найти цитируемый пост)
Да, значения добавляються медленно. Но если уже перевалило за 200, то уверен, что код не работает.

можно для отладки вместо записи в базу сделать echo сформированого запроса и состояний счетчиков.

Добавлено @ 20:22
Код

for ($i=0;$i<count($out[1]);$i++){
  $tmp1=getdescription($out[1][$i]);
  $tmp2[]=$tmp1[0];
  $tmp3[]=$tmp1[1];
  $tmp4[]=$tmp1[2];
  }
$result[]=$tmp2;
$result[]=$tmp3;
$result[]=$tmp4;
return $result;
}}
for ($j=1;$j<=10;$j++){
$m=getlink("somesite");
for ($i=0;$i<25;$i++) $db->sql_query("INSERT INTO soft VALUES (NULL, '".$m[1][$i]."', '".$m[2][$i]."', '".$m[3][$i]."', '".$m[4][$i]."', '".$m[5][$i]."')");  

}


кажися что-то не то с областью видимости $i

может быть где-то объявляется как глобальная? или как там оно по умолчанию?

в общем я бы последил за состоянием счетчиков i и j сначала на малых значениях


Это сообщение отредактировал(а) Glip - 24.4.2007, 20:27


--------------------
user posted image
PM MAIL   Вверх
Sunvas
Дата 24.4.2007, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 8
Всего: 89



Fally, ща попробую заюзать. Хм. протестил - работает. О результатах скорее всего сообщу завтра т.к. устал уже.

Добавлено через 11 минут и 32 секунды
Цитата(Glip @  24.4.2007,  20:17 Найти цитируемый пост)
можно для отладки вместо записи в базу сделать echo сформированого запроса и состояний счетчиков.

Запись в базу делается оочень быстро. А еcho уже пробовал: на малых значениях (до 20-ти) на экран все классно выводиться.

Цитата(Glip @  24.4.2007,  20:17 Найти цитируемый пост)
кажися что-то не то с областью видимости $i

Самое забавное то, что в базу все добавляется правильно т.е. парсер работает правильно. Вот только пройдясь по этим 27000 строк, замел что значения повторяються, причем как-то странно (нет законормерности повторения).  smile  Уже 3 дня бьюсь над проблеммой, а оно все через ж_п_.

Цитата(Glip @  24.4.2007,  20:17 Найти цитируемый пост)
может быть где-то объявляется как глобальная? или как там оно по умолчанию?

Я использую всего два файла. Первый - это парсер, второй - работа с базой. Больше ничего не подключаю и ни от кого не завишу.


Цитата(Glip @  24.4.2007,  20:17 Найти цитируемый пост)
в общем я бы последил за состоянием счетчиков i и j сначала на малых значениях

На малых значениях все классно. smile 

ЗЫ. Если кого-то очень заинтересовала моя проблемма и хочется узнать детали - стучите в асю 854984. smile 


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Fally
Дата 25.4.2007, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 17.8.2006
Где: Dahla

Репутация: 3
Всего: 4



А итераций по i более 25 допускается?? Если нет, то советую всё-таки сделать запрос так, как я выше посоветовал:

Код

("INSERT INTO soft VALUES (NULL, '".$m[1][0]."', '".$m[2][0]."', '".$m[3][0]."', '".$m[0][$i]."', '".$m[5][0]."'), 
(NULL, '".$m[1][1]."', '".$m[2][1]."', '".$m[3][1]."', '".$m[4][1]."', '".$m[5][1]."'), 
(NULL, '".$m[1][2]."', '".$m[2][2]."', '".$m[3][2]."', '".$m[4][2]."', '".$m[5][2]."'), ...)


Почему так лучше, я пояснил выше...

Это сообщение отредактировал(а) Fally - 25.4.2007, 15:43


--------------------
Прежде чем задать вопрос на форуме воспользуйтесь поиском.
user posted image
user posted image
PM MAIL   Вверх
Fally
Дата 25.4.2007, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 17.8.2006
Где: Dahla

Репутация: 3
Всего: 4



У меня есть кое-какие соображения по поводу вашей проблемы:
1) в функции getdescription($url) встречается последовательность $result[]=$out[1]; и т.д.... Самое интересное, что в функции getlink($url) используется та же самая последовательность и вообще они очень схожи. Так вот у меня ощущение, что параметры этих функций пересекаются, но такое возможно только если они объявлены в вызывающем скрипте как глобальные.. но возможно ошибаюсь...
2) Вы уверены в корректности написанных вами регулярных выражений?
3) А почему цикл for идёт до количества элементов в out[1]?


--------------------
Прежде чем задать вопрос на форуме воспользуйтесь поиском.
user posted image
user posted image
PM MAIL   Вверх
Sunvas
Дата 26.4.2007, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 8
Всего: 89



Цитата(Fally @  25.4.2007,  22:36 Найти цитируемый пост)
они объявлены в вызывающем скрипте как глобальные.. но возможно ошибаюсь...

Скрипт вызывается при помощи строки в браузере и кнопки Enter. Я уже где-то это писал.

Цитата(Fally @  25.4.2007,  22:36 Найти цитируемый пост)
2) Вы уверены в корректности написанных вами регулярных выражений?

Абсолютно. Я проверял на малых значениях. К тому же не думаю, что это может быть причиной в 27000 строк.
Цитата(Fally @  25.4.2007,  22:36 Найти цитируемый пост)
3) А почему цикл for идёт до количества элементов в out[1]?

А я не знаю сколько картинок будет в тексте.

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


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Fally
Дата 26.4.2007, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 17.8.2006
Где: Dahla

Репутация: 3
Всего: 4



Несколько раз - навряд ли, может ошибка где-то в логике скрипта, и тот не смотрит ссылки, а постоянно просматривает одну и ту же страницу?

И ещё:
Код

$result[]= $out[2];
$result[]= $out[1];
$result[]= $out[3];


у меня вот тут возник вопрос... а где гарантия что в $out[] будет всего 3 элемента??

Это сообщение отредактировал(а) Fally - 26.4.2007, 18:37


--------------------
Прежде чем задать вопрос на форуме воспользуйтесь поиском.
user posted image
user posted image
PM MAIL   Вверх
capitan
Дата 26.4.2007, 18:36 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 27.2.2005
Где: Москва

Репутация: 9
Всего: 13



А почему когда работаешь с curl, не завершаешь сеанс и не освобождаешь ресурсы? 
Код

curl_close($cu);

http://www.php.net/manual/ru/function.curl-close.php

Возможно в этом и ошибка. Ресурсы не обнулил, там всё и скапливается.

Это сообщение отредактировал(а) capitan - 26.4.2007, 18:38
PM MAIL WWW ICQ   Вверх
Sunvas
Дата 27.4.2007, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 8
Всего: 89



Цитата(capitan @  26.4.2007,  18:36 Найти цитируемый пост)
А почему когда работаешь с curl, не завершаешь сеанс и не освобождаешь ресурсы? 

А где это надо прописать? У меня два места, где я это использую.

Провел еще тест счетчиком вот такого вида:
Код

for ($j=1;$j<=100;$j++){
$m=getlink(".........");
for ($i=0;$i<25;$i++){
$num++;
if (!$m[1][$i]) $m[1][$i]="Нет значения";
$MySQL->Query("INSERT INTO sof VALUES (NULL, $num,'".$m[1][$i]."', '".$m[2][$i]."', '".$m[3][$i]."', '".$m[4][$i]."', '".$m[5][$i]."')");
}}

Теперь самое смешное. В результате в таблице записи:
Код

Id Num Text
1 1 Текст ------
2 2 Текст
....
75 75 Текст
76 1 Нет значения ------
77 2 Нет значения
...
99 24 Нет значения
100 76 Текст
...

Почему в таблицу два раза добавляються значения с одним и тем же $num, если следовательно коду такое невозможно?!

Это сообщение отредактировал(а) Sunvas - 27.4.2007, 12:15


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
capitan
Дата 27.4.2007, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 27.2.2005
Где: Москва

Репутация: 9
Всего: 13



Код

function getdescription($url){ //переход по ссылке и новый парсинг текста
$cu = curl_init();
curl_setopt($cu, CURLOPT_URL, $url);
curl_setopt($cu, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
curl_setopt($cu, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($cu, CURLOPT_TIMEOUT, 100);
$output = curl_exec($cu);
curl_close($cu);
$succeeded = curl_errno($cu) == 0 ? true : false;
$result=Array();
if ($succeeded) {
preg_match('Парсинг текста также по трем параметрам', $output, $out);
$result[]= $out[2];
$result[]= $out[1];
$result[]= $out[3];
return $result;
}}
function getlink($url){ //Выдергивание ссылок
$cu = curl_init();
curl_setopt($cu, CURLOPT_URL, $url);
curl_setopt($cu, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
curl_setopt($cu, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($cu, CURLOPT_TIMEOUT, 100);
$output = curl_exec($cu);
curl_close($cu);
$succeeded = curl_errno($cu) == 0 ? true : false;
$result=Array();
if ($succeeded) {
 preg_match_all('Выдергивание ссылок по трем параметрам (имени ссылки, текста ссылки, описание ссылки)', $output, $out);
$result[]=$out[1];
$result[]=$out[2];
$result[]=$out[3];
$tmp2=Array();
$tmp3=Array();
$tmp4=Array();
for ($i=0;$i<count($out[1]);$i++){
  $tmp1=getdescription($out[1][$i]);
  $tmp2[]=$tmp1[0];
  $tmp3[]=$tmp1[1];
  $tmp4[]=$tmp1[2];
  }
$result[]=$tmp2;
$result[]=$tmp3;
$result[]=$tmp4;
return $result;
}}

PM MAIL WWW ICQ   Вверх
Sunvas
Дата 27.4.2007, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 8
Всего: 89



Только эти строчки 
Цитата

curl_close($cu);    
$succeeded = curl_errno($cu) == 0 ? true : false;

Нужно переставить местами.

Ну а что можете сказать по поводу
Цитата(Sunvas @  27.4.2007,  12:15 Найти цитируемый пост)
Теперь самое смешное.

????????7


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Sunvas
Дата 27.4.2007, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 8
Всего: 89



По просьбам выкладываю еще раз код программы.
Код

<?php
require_once("cql_n.php");
$numd=0;
$MySQL = new MySQL('localhost', 'user', 'pass', 'base');
for ($j=1;$j<=100;$j++){
$m=getlink("".strval($j));
for ($i=0;$i<25;$i++){
$numd++;
$MySQL->Query("INSERT INTO base VALUES (NULL, $numd,'".$m[1][$i]."', '".$m[2][$i]."', '".$m[3][$i]."', '".$m[4][$i]."', '".$m[5][$i]."')");
}}
function getContent($url) {
    $cu = curl_init();
    curl_setopt($cu, CURLOPT_URL, $url);
    curl_setopt($cu, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
    curl_setopt($cu, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($cu, CURLOPT_TIMEOUT, 100);
    $output = curl_exec($cu);
    $succeeded = curl_errno($cu) == 0;
    curl_close($cu);
    if ($succeeded) {
        return $output;
    } else {
        return false;
    }
}

function getdescription($url){
    $output =getContent($url);
if ($output) {

$result=Array();
preg_match('', $output, $out);
$result[]= nl2br($out[2]);
$result[]= $out[1];
$result[]= $out[3];
return $result;
}}
function getlink($url){
    $output =getContent($url);
if ($output) {
$result=Array();
 preg_match_all('', $output, $out);
$result[]=$out[1];
$result[]=$out[2];
$result[]=$out[3];
$tmp1;
$tmp2=Array();
$tmp3=Array();
$tmp4=Array();
for ($i=0;$i<count($out[1]);$i++){
  $tmp1=getdescription("site.ru/doc".$out[1][$i]."htm");
  $tmp2[]=$tmp1[0];
  $tmp3[]=$tmp1[1];
  $tmp4[]=$tmp1[2];
  }
$result[]=$tmp2;
$result[]=$tmp3;
$result[]=$tmp4;
return $result;
}}

?>



--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Glip
Дата 27.4.2007, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 473
Регистрация: 30.12.2006

Репутация: 7
Всего: 18



не факт что из-за этого, но на всякий случай перед
preg_match_all и preg_match сделать $out = array();

Добавлено через 11 минут и 25 секунд
так же не плохо бы проверять результаты выполнения preg_match_all и preg_match


--------------------
user posted image
PM MAIL   Вверх
Glip
Дата 27.4.2007, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 473
Регистрация: 30.12.2006

Репутация: 7
Всего: 18



что будет в $tmp1 если getContent, который в getdescription, вернёт false ?
и что будет в $m если getContent (в getlink) вернёт false?
не может в них оставаться предидущее значение?

Это сообщение отредактировал(а) Glip - 27.4.2007, 21:04


--------------------
user posted image
PM MAIL   Вверх
Sunvas
Дата 27.4.2007, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 8
Всего: 89



Цитата(Glip @  27.4.2007,  20:58 Найти цитируемый пост)
что будет в $tmp1 если getContent, который в getdescription, вернёт false ?

Никогда не задумывался ибо оно не может вернуть False. 


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Glip
Дата 27.4.2007, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 473
Регистрация: 30.12.2006

Репутация: 7
Всего: 18



при curl_errno($cu) отличном от 0 именно так и будет


--------------------
user posted image
PM MAIL   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0923 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.