За последние 24 часа нас посетили 63186 программистов и 1743 робота. Сейчас ищут 964 программиста ...

При выполнении метода рестартует апач.

Тема в разделе "Прочие вопросы по PHP", создана пользователем Feanor1982, 11 мар 2009.

  1. Feanor1982

    Feanor1982 Активный пользователь

    С нами с:
    20 июн 2008
    Сообщения:
    41
    Симпатии:
    0
    Привет всем. Итак проблема. Написан класс (синтаксис совместим с php 4). В классе есть метод filler, задача которого брать из файлов, которые заданны в соотвествующих полях класса по строчке случайным образом и заливать в таблицу БД. Число итераций задаётся параметром метода. Привожу код
    PHP:
    1.  
    2. <?php
    3.  class filler{
    4.   var $host;        //Наименование сервера БД, необходимо задать в конструкторе
    5.   var $db;          //Имя БД MySQL,задаётся в конструкторе
    6.   var $user;        //Имя пользователя, под которым идёт подключение к БД, задаётся в конструкторе
    7.   var $password;    //Пароль пользователя БД, задаётся в конструкторе
    8.   var $link;        //Идентификатор соединения с сервером БД
    9.   var $titles;       //Файл со значением поля titles
    10.   var $descriptions; //Файл с описанием
    11.   var $keywords;     //Файл с кеями
    12.   var $content;      //Файл с content
    13.   var $content2;     //Файл с content2
    14.  
    15.  function filler($Ahost,$Adb,$Auser,$Apassword){
    16.   $this->host=$Ahost;//При создании экземпляра инициализируем "приватные" члены класса
    17.   $this->db=$Adb;
    18.   $this->user=$Auser;
    19.   $this->password=$Apassword;}
    20.  function connect(){
    21.         if(!$this->connect())$this->link=mysql_connect($this>host,$this->user,$this->password);//Если нет соединения с сервером БД, подсоедиянемся
    22.  }
    23.  function select(){
    24.         if($this->link) return mysql_select_db($this->db,$this->link);else return 0;//Выбор базы на сервере БД
    25.  }
    26.  function disconnect(){
    27.         if($this->link) return mysql_close($this->link);//Закрытие соединения с сервером БД  
    28.  }
    29.  function fill($id,$n){if(!isset($this->titles))return 1;//Перед выполнением метода необходимо инициализировать поля именами файлов с данными.
    30.  if(!isset($this->descriptions))return 2;
    31.  if(!isset($this->keywords))return 3;
    32.  if(!isset($this->content))return 4;
    33.  if(!isset($this->content2))return 5;
    34.  $title=file($this->titles);
    35. // echo("Получили титлы");
    36.  if(!$title)return 6;
    37.  $description=file($this->descriptions);
    38. // echo("получили описание");
    39.  if(!$description)return 7;
    40.  $keyword=file($this->keywords);
    41.  if(!$keyword)return 8;
    42.  $contenti=file($this->content);
    43.  if(!$contenti)return 9;
    44.  $contenti2=file($this->content2);
    45.  if(!$contenti2)return 10;
    46.  if(!$this->link)$this->connect();
    47.  if(!$this->select())return 11;else
    48.  for($i=0;$i<$n;$i++){
    49.  $t=addslashes($title[rand(0,count($title))]);
    50.  $d=addslashes($description[rand(0,count($description))]);
    51.  $k=addslashes($keyword[rand(0,count($keyword))]);
    52.  $c=addslashes($contenti[rand(0,count($contenti))]);
    53.  $c2=addslashes($contenti2[rand(0,count($contenti2))]);
    54.  $Query="Insert into pages values('".addslashes($id.$i)."','".$t."','".$k."','".$c."','".$c2."')";
    55.  $result=mysql_query($Query,$this->link);
    56.  if(!$result)return mysql_errno($this->link);}
    57.  return 0;}
    58. .....
    59. }?>
    60.  
    Так вот именно при выполнении этого метода в логах появляется сообщение о перезапуске сервера, после чего ни один запрос GET к нему уже не проходит. Подскажите, в чём я так неправ, что сервер при выполнении метода fill рестартует? Апач версии 2. Все поля инициализированы и применение к ним функции file возвращает массивы. Это проверено.[/list]
     
  2. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Ну кто так форматирует код, а? Щас выложу нормально отформатированный.

    Надо вот так:
    PHP:
    1. <?php
    2.  
    3. /**
    4.  * Enter description here...
    5.  *
    6.  */
    7. class filler{
    8.    
    9.     /**
    10.      * Наименование сервера БД, необходимо задать в конструкторе
    11.      *
    12.      * @var string
    13.      */
    14.     var $host;
    15.    
    16.     /**
    17.      * Имя БД MySQL,задаётся в конструкторе
    18.      *
    19.      * @var string
    20.      */
    21.     var $db;
    22.    
    23.     /**
    24.      * Имя пользователя, под которым идёт подключение к БД, задаётся в конструкторе
    25.      *
    26.      * @var string
    27.      */
    28.     var $user;
    29.    
    30.     /**
    31.      * Пароль пользователя БД, задаётся в конструкторе
    32.      *
    33.      * @var string
    34.      */
    35.     var $password;    
    36.    
    37.     /**
    38.      * Идентификатор соединения с сервером БД
    39.      *
    40.      * @var resource
    41.      */
    42.     var $link;
    43.    
    44.     /**
    45.      * Файл со значением поля titles
    46.      *
    47.      * @var string
    48.      */
    49.     var $titles;    
    50.    
    51.     /**
    52.      * Файл с описанием
    53.      *
    54.      * @var string
    55.      */
    56.     var $descriptions;
    57.    
    58.     /**
    59.      * Файл с кеями
    60.      *
    61.      * @var string
    62.      */
    63.     var $keywords;    
    64.    
    65.     /**
    66.      * Файл с content
    67.      *
    68.      * @var string
    69.      */
    70.     var $content;    
    71.    
    72.     /**
    73.      * Файл с content2
    74.      *
    75.      * @var string
    76.      */
    77.     var $content2;    
    78.    
    79.     /**
    80.      * Enter description here...
    81.      *
    82.      * @param string $Ahost
    83.      * @param string $Adb
    84.      * @param string $Auser
    85.      * @param string $Apassword
    86.      * @return filler
    87.      */
    88.     function filler($Ahost, $Adb, $Auser, $Apassword)
    89.     {
    90.         $this->host = $Ahost;//При создании экземпляра инициализируем "приватные" члены класса
    91.         $this->db = $Adb;
    92.         $this->user = $Auser;
    93.         $this->password = $Apassword;
    94.     }
    95.    
    96.     /**
    97.      * Enter description here...
    98.      *
    99.      */
    100.     function connect(){
    101.         if (!$this->connect()) {
    102.             $this->link = mysql_connect($this>host, $this->user, $this->password);//Если нет соединения с сервером БД, подсоедиянемся
    103.         }
    104.     }
    105.    
    106.     /**
    107.      * Enter description here...
    108.      *
    109.      * @return mixed
    110.      */
    111.     function select()
    112.     {
    113.         if ($this->link){
    114.             return mysql_select_db($this->db, $this->link);//Выбор базы на сервере БД
    115.         } else {
    116.             return 0;
    117.         }
    118.     }
    119.    
    120.     /**
    121.      * Enter description here...
    122.      *
    123.      * @return mixed
    124.      */
    125.     function disconnect()
    126.     {
    127.         if ($this->link) {
    128.             return mysql_close($this->link);//Закрытие соединения с сервером БД
    129.         }
    130.     }
    131.    
    132.     /**
    133.      * Enter description here...
    134.      *
    135.      * @param unknown_type $id
    136.      * @param unknown_type $n
    137.      * @return unknown
    138.      */
    139.     function fill($id, $n)
    140.     {
    141.         if (!isset($this->titles)) {
    142.             return 1;//Перед выполнением метода необходимо инициализировать поля именами файлов с данными.
    143.         }
    144.        
    145.         if (!isset($this->descriptions)) {
    146.             return 2;
    147.         }
    148.        
    149.         if (!isset($this->keywords)) {
    150.             return 3;
    151.         }
    152.        
    153.         if (!isset($this->content)) {
    154.             return 4;
    155.         }
    156.        
    157.         if (!isset($this->content2)) {
    158.             return 5;
    159.         }
    160.        
    161.         $title = file($this->titles);
    162.         // echo("Получили титлы");
    163.         if (!$title) {
    164.             return 6;
    165.         }
    166.        
    167.         $description = file($this->descriptions);
    168.         // echo("получили описание");
    169.         if (!$description) {
    170.             return 7;
    171.         }
    172.        
    173.         $keyword = file($this->keywords);
    174.         if (!$keyword) {
    175.             return 8;
    176.         }
    177.        
    178.         $contenti = file($this->content);
    179.         if (!$contenti) {
    180.             return 9;
    181.         }
    182.        
    183.         $contenti2 = file($this->content2);
    184.         if (!$contenti2) {
    185.             return 10;
    186.         }
    187.        
    188.         if (!$this->link) {
    189.             $this->connect();
    190.         }
    191.        
    192.         if (!$this->select()) {
    193.             return 11;
    194.         } else {
    195.             for($i = 0; $i < $n; $i++) {
    196.                 $t = addslashes($title[rand(0,count($title))]);
    197.                 $d = addslashes($description[rand(0,count($description))]);
    198.                 $k = addslashes($keyword[rand(0,count($keyword))]);
    199.                 $c = addslashes($contenti[rand(0,count($contenti))]);
    200.                 $c2 = addslashes($contenti2[rand(0,count($contenti2))]);
    201.                 $Query = "Insert into pages values('".addslashes($id.$i)."','".$t."','".$k."','".$c."','".$c2."')";
    202.                 $result = mysql_query($Query, $this->link);
    203.                 if (!$result) {
    204.                     return mysql_errno($this->link);
    205.                 }
    206.             }
    207.             return 0;
    208.         }
    209.     }
    210. }
     
  3. Feanor1982

    Feanor1982 Активный пользователь

    С нами с:
    20 июн 2008
    Сообщения:
    41
    Симпатии:
    0
    Спасибо. Так а если по сути кто-нибудь знает, что такого криминального в методе fill, что он сервак заваливает? PHP подключён, как модуль апача.
     
  4. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    а что в логах пишется?
     
  5. Feanor1982

    Feanor1982 Активный пользователь

    С нами с:
    20 июн 2008
    Сообщения:
    41
    Симпатии:
    0
    Вот, что пишет в error.log при выполнении GET запроса к скрипту. Происходит именно в методе fill, т.к. без него этого не наблюдается.
    Код (Text):
    1.  
    2. [Wed Mar 11 19:22:44 2009] [notice] Parent: child process exited with status 128 -- Restarting.
    3. [Wed Mar 11 19:23:19 2009] [notice] Apache/2.2.4 (Win32) PHP/5.2.1 configured -- resuming normal operations
    Соответственно, в access.log вообще ничего, как будто обращения к скрипту и не было.
     
  6. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    файлы большие зачитываешь?
     
  7. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    такое еще бывает когда рекурсия бесконечная...

    покажи как ты fill дергаешь?
     
  8. unicross

    unicross Активный пользователь

    С нами с:
    14 янв 2009
    Сообщения:
    194
    Симпатии:
    0
    Вечный двигатель делаем? :D