|
|
|
| Здрасте, помогите решить такую проблему:
Есть файл с расширением .dbf, но нету доступа к базе. Весит он порядка 50 мегабайт. Лежит на локале, И надо его перекинуть в mysql на виртуальный сервер. Помогите со скриптом.
Я использовал во этот:
include ('config.php');
set_time_limit(400);
// Разделитель
$separator = ";";
// Читаем содержимое в переменную
$file = file_get_contents("c:/banks.dbf");
// Разбиваем по строкам
$strings = explode("\n", $file);
// Формируем цикл
for ($i = 0; $i < count($strings); $i++) {
$sub_string = explode($separator, $strings[$i]);
for ($k = 0; $k < count($sub_string); $k++) {
$query = "INSERT INTO 'banks' VALUES
(".$sub_string[0].",
".$sub_string[1].",
".$sub_string[2].",
".$sub_string[3].",
".$sub_string[4].",
".$sub_string[5].",
".$sub_string[6].",
".$sub_string[7].",
".$sub_string[8].",
".$sub_string[9].",
".$sub_string[10].",
".$sub_string[11].",
".$sub_string[12].",
".$sub_string[13].",
".$sub_string[14].",
".$sub_string[15].",
".$sub_string[16].",
".$sub_string[17].",
".$sub_string[18].",
".$sub_string[19].",
".$sub_string[20]."
)";
mysql_query($query);
}
}
|
но он пишет ошибку
Notice: Undefined offset: 1 in z:\home\unistream.cz\www\2.php on line 24
|
и т.д.
Может кто подскажет как надо правильно? Заранее спасибо | |
|
|
|
|
|
|
|
для: Kien
(01.11.2007 в 11:53)
| | 50 мега - в переменную ?!?! :O | |
|
|
|
|
|
|
|
для: Kien
(01.11.2007 в 11:53)
| | Индеска 1 не найдено в массиве, это значит что ваш массив содеджит одну строку. Ваш исходник это "порожедение Windows" и вы зря на нем ищите "\n", нет такого в нем, в Windows перевод строк это последовательность Chr(13).Chr(10). | |
|
|
|
|
|
|
|
для: sim5
(01.11.2007 в 12:42)
| | Ок, а как можно это все закинуть? Это реально сделать посредствам РНР? | |
|
|
|
|
|
|
|
для: Kien
(01.11.2007 в 13:11)
| | Я бы никуда бы не закидывал, а сохранил это стандартным дампом sql запроса, а уж потом с помощью РМА экспортировал. | |
|
|
|
|
|
|
|
для: sim5
(01.11.2007 в 14:06)
| | А каким же образом можно сохранить стандартным дампом? Че-то я не очень понимаю....:( | |
|
|
|
|
|
|
|
для: Kien
(01.11.2007 в 16:05)
| | Вместо запроса к базе формируйте в цикле текстовую переменную, затем запишите ее в файл. Сделайте все это отдельным временным скриптом. | |
|
|
|
|
|
|
|
для: sim5
(01.11.2007 в 16:12)
| | Млин..... вот с этим у меня хуже..... Может покажете как это примерно....... а? | |
|
|
|
|
|
|
|
для: Kien
(01.11.2007 в 16:14)
| |
<?
$sql = ''
for ($i = 0; $i < count($strings); $i++) {
$sub_string = explode($separator, $strings[$i]);
for ($k = 0; $k < count($sub_string); $k++) {
$sql .= "INSERT INTO 'banks' VALUES
(".$sub_string[0].",
".$sub_string[1].",
".$sub_string[2].",
".$sub_string[3].",
".$sub_string[4].",
".$sub_string[5].",
".$sub_string[6].",
".$sub_string[7].",
".$sub_string[8].",
".$sub_string[9].",
".$sub_string[10].",
".$sub_string[11].",
".$sub_string[12].",
".$sub_string[13].",
".$sub_string[14].",
".$sub_string[15].",
".$sub_string[16].",
".$sub_string[17].",
".$sub_string[18].",
".$sub_string[19].",
".$sub_string[20]."
)";
}
}
$f = fopen('damp.sql','w');
fputs($f, $sql);
fclose($f);
|
Это с учтетом того, что разделять надо не по \r. Просмотрите потом обыкновенным блокнотом, нет ли ошибок в полученном дампе, если что, можно будет в ручную отредактировать. И уж потом через РМА экспорт. | |
|
|
|
|
|
|
|
для: sim5
(01.11.2007 в 16:24)
| |
Эт че значит? | |
|
|
|
|
|
|
|
для: Kien
(01.11.2007 в 16:40)
| | Вы как на РНР пишите? $sql = '' ; (точку с запятой забыл) - это объявление перменной, в которую будет записан дамп запроса после прохождения цикла, и которая потом запишется в файл. | |
|
|
|
|
|
|
|
для: sim5
(01.11.2007 в 17:17)
| | А все равно ошибку пишет
Notice: Undefined offset: 1 in z:\home\unistream.cz\www\2.php on line.....
|
| |
|
|
|
|
|
|
|
для: Kien
(01.11.2007 в 17:27)
| | Проверьте:
echo count($strings);
и
$sub_string = explode($separator, $strings[$i]);
echo count($sub_string);
Вы не верно разделяете строку где-то, потому и нет такого смещения (идекса), я вам это уже говорил. Проверьте исходник (что он их себя представляет) и разбейте правильно. | |
|
|
|