Доброго времени суток, возникла проблема при экспорте БД в файл csv.
Исходник выглядит следующим образом:
<?
define('SITE', true);
include 'config.php';
@mysql_connect($sdd_db_host,$sdd_db_user,$sdd_db_pass);
@mysql_select_db($sdd_db_name);
$ath=mysql_query("select * from sprav");
$f=fopen('1.csv','w');
while($ar = mysql_fetch_array($ath))fputcsv($f,$ar);
fclose($f);
header("Content-Type: application/octet-stream'");
header('Content-Disposition: attachment; filename="1.csv"');
readfile('1.csv');
?>
данный код экспортирует файлы но:
1. Русские буквы ложатся в файл в неправильной кодировке
2. Каждое значение ложиться по 2 раза
3. автоматически ставиться разделитель не точка с запятой а запятая...
как бы решить данные проблемы?
Спустя 3 часа, 12 минут, 42 секунды (26.01.2012 - 14:06) Winston написал(а):
Цитата (Undertaker @ 26.01.2012 - 09:54) |
Русские буквы ложатся в файл в неправильной кодировке |
После
mysql_select_db попробуй прописать такой запрос
mysql_query("SET NAMES cp1251");
Цитата (Undertaker @ 26.01.2012 - 09:54) |
Каждое значение ложиться по 2 раза |
Это все из-за того, что mysql_fetch_array - возвращает ассоциативный и числовой массив, то есть 2 копии одного ряда результата. Вместо этой ф-и используй mysql_fetch_assoc.
Цитата (Undertaker @ 26.01.2012 - 09:54) |
автоматически ставиться разделитель не точка с запятой а запятая |
Ф-я fputcsv имеет еще 3 параметр - разделитель. Потому можно написать так fputcsv($f,$ar, ';');
Спустя 13 минут, 46 секунд (26.01.2012 - 14:20) bob marley написал(а):
Undertaker
попробуй $f=fopen('1.csv','w');
заменить на $f=fopen('1.csv','w+');
Спустя 2 минуты, 2 секунды bob marley написал(а):
Первый раз вижу такую строчку
while($ar = mysql_fetch_array($ath))fputcsv($f,$ar); Спустя 16 часов, 5 минут, 13 секунд (27.01.2012 - 06:25) Undertaker написал(а):
Winston
Цитата |
Русские буквы ложатся в файл в неправильной кодировке
После mysql_select_db попробуй прописать такой запрос
mysql_query("SET NAMES cp1251");
Цитата (Undertaker @ 26.01.2012 - 09:54) Каждое значение ложиться по 2 раза
Это все из-за того, что mysql_fetch_array - возвращает ассоциативный и числовой массив, то есть 2 копии одного ряда результата. Вместо этой ф-и используй mysql_fetch_assoc. Цитата (Undertaker @ 26.01.2012 - 09:54) автоматически ставиться разделитель не точка с запятой а запятая
Ф-я fputcsv имеет еще 3 параметр - разделитель. Потому можно написать так fputcsv($f,$ar, ';'); |
Спасибо огромное, после восползования советом (Все татарин кроме я
) импорт заработал как положено.
Спустя 2 минуты, 25 секунд (27.01.2012 - 06:28) Undertaker написал(а):
bob marley
Цитата |
попробуй $f=fopen('1.csv','w'); заменить на $f=fopen('1.csv','w+');
Спустя 2 минуты, 2 секунды bob marley написал(а): Первый раз вижу такую строчку while($ar = mysql_fetch_array($ath))fputcsv($f,$ar); |
К сожалению 'w+' не прокатило, но всё равно спасибо за помощь
_____________
Из отчета службы безопасности:
... по поводу взлома китайцами сервера Пентагона:
1) Каждый китаец попробовал один пароль.
2) Каждый второй пароль был - maodzedun.
3) На 657983241-й попытке сервер согласился что у него пароль - maodzedun