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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> запись нескольких файлов, проблема.. 
:(
    Опции темы
MrCherry
Дата 17.9.2007, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

if(isset($_POST['backup'])) {
 $i = 0;
 $tbl = $_POST['tables'];
 set_time_limit(12000);
 while($tbl[$i]) {
  //------------------------------------------------
 $f = fopen('db_data/'.$tbl[$i].'.inc.php',"w+");
 $res = mysql_query("SELECT * FROM ecomponent.".$tbl[$i]);
 //------------------------------------------------
 fwrite($f,'<?php
'); 
 while ($rw  = mysql_fetch_row($res)) 
 {
   $db_data = '$'."res = mysql_query('INSERT INTO $tables[$j] VALUES(";
   for ($i = 0; $i < sizeof($rw); $i++) {
    $dd = str_replace('"','\"',$rw[$i]);
    $dd = str_replace("'","\'",$dd);
    $db_data .= '"'.$dd.'"';
    if($i != sizeof($rw)-1) $db_data .= ',';
   }
   $db_data .= ");');
";
   fputs($f,$db_data); 
   fflush ($f);
   $db_data = "";
 }
 fwrite($f,'?>
'); 
 //------------------------------------------------
  $i++;
 }
}

такой вот код, при одном файле или нескольких маленьких - записывает нормально, если пытаться записать много инфы - зависает.
что делать?? 
PM MAIL   Вверх
ewolf
Дата 17.9.2007, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Много инфы это сколько?


По скрипту - у тебя в коде несколько ошибок:

Цитата


if(isset($_POST['backup'])) {
 $i = 0;
 $tbl = $_POST['tables'];
 set_time_limit(12000);
 while($tbl[$i]) {  лучше использовать for( $i = 0; $i < count($tbl); $i++ ) 
  //------------------------------------------------
 $f = fopen('db_data/'.$tbl[$i].'.inc.php',"w+");
 $res = mysql_query("SELECT * FROM ecomponent.".$tbl[$i]);
 //------------------------------------------------
 fwrite($f,'<?php
'); 
 while ($rw  = mysql_fetch_row($res)) 
 {
   $db_data = '$'."res = mysql_query('INSERT INTO $tables[$j] VALUES("; мы имеем массив $tbl, а не $tables, к тому же от куда индекс $j
   for ($i = 0; $i < sizeof($rw); $i++) {  $i уже используется 
    $dd = str_replace('"','\"',$rw[$i]);
    $dd = str_replace("'","\'",$dd);
    $db_data .= '"'.$dd.'"';
    if($i != sizeof($rw)-1) $db_data .= ',';
   }
   $db_data .= ");');
";
   fputs($f,$db_data); пиши не по маленьким кускам, а сразу бекап всей таблицы
   fflush ($f);
   $db_data = "";
 }
 fwrite($f,'?>
'); 
 //------------------------------------------------
  $i++;
 }

}


Я бы переписал твой код так: (не выполнял, может содержать ошибки)

Код

<?
if( isset($_POST['backup']) )
{
    $tbl = $_POST['tables'];
    for( $i = 0; $i < count($tbl); $i++ )
    {        
        $res = mysql_query("SELECT * FROM ecomponent.".$tbl[$i]);       
        
        $values = array();
        while ($rw  = mysql_fetch_row($res)) 
        {
            $values[] = '('.implode("','",$rw).')';
        }    
        $file_content = '<?php $res = mysql_query(\'INSERT INTO '.$tbl[$i].' VALUES '.implode(",\r\n",$values).'\'); ?>';
        
        $f = fopen('db_data/'.$tbl[$i].'.inc.php',"w+"); 
        fwrite($f, $file_content);
        fclose($f);
    }
}
?>

А по сути, бекап лучше делать в виде просто SQL запросов, а не ввиде php-скрипта - тогда воспользоваться таким бекапом можно будет имея любую систему для работы с базой данных.


Это сообщение отредактировал(а) ewolf - 17.9.2007, 10:38
PM MAIL ICQ   Вверх
MrCherry
Дата 17.9.2007, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

А по сути, бекап лучше делать в виде просто SQL запросов, а не ввиде php-скрипта - тогда воспользоваться таким бекапом можно будет имея любую систему для работы с базой данных.

этот код я несколько месяцев назад писал, тогда у меня была проблема со считыванием с файла. нормально считывало только мелкие файлы... 
Цитата

лучше использовать for( $i = 0; $i < count($tbl); $i++ ) 

ну я бы не назвал это ошибкой... 
Цитата

мы имеем массив $tbl, а не $tables, к тому же от куда индекс $j

этот код просто из другого скрипта взят(моего, просто там дампер базы отдельный, а тут я в админку вставляю..)
Цитата

$i уже используется

от плин.. вот для этого у меня и была $j в том скрипте.... 
Цитата

пиши не по маленьким кускам, а сразу бекап всей таблицы

на производительность влияет?

PM MAIL   Вверх
MrCherry
Дата 17.9.2007, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



вопсчем вроде такой вод кодик получился, может кому нить пригодится... 
Код

if(isset($_POST['backup'])) {
 $tbl = $_POST['tables'];
 set_time_limit(12000);
 for($i = 0; $i < sizeof($tbl); $i++) {
  $res = mysql_query("SELECT * FROM ecomponent.".$tbl[$i]);
  if(mysql_num_rows($res)>0) { 
  $f = fopen('db_data/'.$tbl[$i].'.inc.php',"w+");
  $db_data = '';
   while ($rw  = mysql_fetch_row($res)) {
    $db_data .= 'INSERT INTO ecomponent.'.$tbl[$i].' VALUES(';
    for($j = 0; $j < sizeof($rw); $j++) {
     $dd = str_replace('"','\"',$rw[$j]);
     $dd = str_replace("'","\'",$dd);
     $db_data .= '"'.$dd.'"';
     if($i != sizeof($rw)-1) $db_data .= ',';
    }
    $db_data .= ");\n";
   }
   fwrite($f,$db_data); 
  }
 }
}


Это сообщение отредактировал(а) MrCherry - 17.9.2007, 12:19
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0714 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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