PHP MYSQL BLOB экспорт в формат CSV - PullRequest
0 голосов
/ 30 января 2012

Я пытаюсь создать скрипт, который может экспортировать данные из базы данных mysql, содержащей файлы (в основном pdf).Затем эти данные импортируются в локальную версию системы.

Однако у меня есть проблема с полем BLOB, когда я экспортирую и импортирую с помощью PHPMYADMIN, он работает нормально, однако при использовании моего сценария поле BLOBимеет дополнительный код, добавленный к вершине.Почти как если бы это был код для инструктирования программ, как с ним работать.Когда я пытаюсь импортировать эту версию в PHPMYADMIN, она не работает.

Это ошибка форматирования, нужно ли мне преобразовать ее в тип.В настоящее время он просто извлекается из базы данных как элемент строки ['content'], а затем выводится в CSV

. Любая помощь будет высоко ценится

С уважением

///////////////// исходный код моего сценария

$file = 'supportingFiles'; // csv name.
$result = mysql_query("SHOW COLUMNS FROM files");
$a = 0;

if (mysql_num_rows($result) > 0) {                                      //print column titles based on number of columns in the two files
while ($row = mysql_fetch_assoc($result)) {
$a++;
}
}

$values = mysql_query("SELECT * FROM files ");          //select client details wehere required

while ($rows = mysql_fetch_array($values)) {                                        //print client information
for ($k=0;$k<$a;$k++) {

$csv_output .= $rows[$k].",";
}
$csv_output .= "\n";            //end of line
}

$filename = $file."_".date("d-m-Y_H-i",time());

header("Content-type: application/csv");
header("Content-disposition: csv" . date("Y-m-d") . ".csv");
header( "Content-disposition: filename=supportingFiles.csv");

echo $csv_output;           //output data file

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

%âãÏÓ
%%ISIS AfpToPdf-V.6.2/h3 '2008-05-19 (build:6.20.0.08205)'
4 0 obj
[
/DeviceRGB
]
endobj
5 0 obj
[/Pattern 4 0 R] 
endobj
6 0 obj
[
/DeviceCMYK
]
endobj
7 0 obj
[/Pattern 6 0 R] 
endobj
14 0 obj
<</Length 1221/Filter/FlateDecode>>
stream
xÚ•WÛnã6ýÿümÌ%)’¢úo6Š6Û„ûTÈckW–RYÎ6ýüh‡CJ¶Ûi€\à™áp.gÇ‹|Æ!ÿ6{wÃA@~‚ãçgø3Í    %ph×3ü^ïÿæ[P2cB‚É4Käw?
R<¦èØo-\ïðs³_oüqŽ.yL11°Ø·uåžà}ÕìÜTûáÏüã-\-ó©.ÿ„ÅŸ^þ!Ÿý=óõ‘YÆRƒ=±ÌÀ¬Á$´îÊ”)•TÉ   ±6a¶×JŸúXËY¦ÇJµÖ²äìQ«/]k&ÍyÇœyV›¦gµši{^›0c†¨\c-jÏÆlì!ªÚQ!    Íä^#YrÁóQ™_juÊ5x¶“˜µaâÂYÉôùZ)ëQÛk³ÉY•2~>_¥Ž1×{þ4[ä’ŒÉÅv2<¾ÿâ{Œ_ïªr…ŒžÂð©©„9øú™FFÄZÄ«ª†1Ö        ŒÎ’58Tj˜â‡$áb¯D`²H‡¾
üí</m›ºÛ|¿ƒÕ¦h×n²ã¯—ˆøQc¿¼Ç‰ãvûå·ê k<ÙyJ+¦
"2¦75^‚Ó ãg&x M„ñ4–êØå  wÈ°\äå%BÄËØŒ4쉷è÷çßASÃsb¢ñ(¾t_bO¼Gî…›7]Qõe„û¦=ªo:9ø|   Ö”3¾2õØéPü74–š 2qÔYle%Ûn‹ö š{xjö-«U³¯»·5Wáhz‹ª¨Wˆ¿¶ÙÂCëËf¿ƒeœ¥ Ÿ”Ã\{IÆðE   9i=î…    ð3ŠŠß‹§­«;DõÊ•îî¸  4ñþYöóÓÎ^¯<ÁeN$…ö±öG    ¥§÷kÔå”^]¥Xò2¼cˆ}\>¢LdQÅSA7=6RN¾‘¥B—    dXêjë[w{z¿Uâ‡WIÈxVÊK¥`ܬpЗֈx—þ! U¦¨¿ús    ½%ÁBŒœãÃ%؃ï¤ïž«p†ËzMÁaÞ6Ê»†"
iç\lMÏ>ÈL®v‘€šû8ê:Ú<kwh
‰h¶l#ì†ý"ô·+ÊjÇN½ü§7\2¥éû=0å‹¡¾ô½&±HW´ƒ„J^…–ǯ"?

1 Ответ

1 голос
/ 30 января 2012

это потому, что CSV не очень хорошо стандартизирован как формат (даже не "запятая", как в "значениях, разделенных запятыми") и это потому, что phpmyadmin выполняет некоторую кодировку / декодирование значений при экспорте /importing.

Вам нужна эта часть кодирования / декодирования, потому что ваш двоичный файл BLOB (как вы сказали, в основном PDF) может легко содержать запятые, разрывы строк, кавычки и все виды вещей, которые разбивают синтаксический анализатор CSV.

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

В качестве альтернативы, если вам нужен собственный механизм экспорта / импорта (скажем, вы пишете свой собственный импортер, соответствующий вашему экспортеру), тогда вы могли бы использовать здесь кодировку base64, чтобы обеспечить ваш CSV (который предназначен как простой кстати, текстовый формат) правильно хранит двоичные данные.

экспортер:

// convert binary blob to text format
$plaintextdata_for_csv = base64_encode($binarydata_from_blob); 

импортер:

// decode text format to binary blob
$binarydata_for_blob = base64_decode($plaintextdata_from_csv); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...