User:Brion VIBBER/exif

bufferResults(false); $result = $dbr->select('image',   array('img_name', 'img_metadata'),    array("img_metadata != '' and img_metadata != '0'"));

foreach ($result as $row) { $name = $row->img_name; $meta = @unserialize($row->img_metadata); if (is_array($meta) && !empty($meta)) { $out = array($row->img_name); foreach($meta as $field => $val) { if (!is_array($val)) { $num = fieldKey($field); $out[] = "$num:$val"; }       }        print csvout($out); } }

function csvout($args) { return implode(',', array_map('csvField', $args)). "\n"; }

function csvField($val) { return '"' . str_replace('"', '""', $val). '"'; }

function fieldKey($field) { global $fieldKeys, $fieldFile; if (!isset($fieldKeys[$field])) { $fieldKeys[$field] = count($fieldKeys); fwrite($fieldFile, csvOut(array($field, $fieldKeys[$field]))); }   return $fieldKeys[$field]; }

<?php

require "./commandLine.inc";

/*

create table exif_fields ( ef_id int primary key,  ef_name varchar(255) unique key ) default charset=utf8; create table exif_image ( ei_id int primary key auto_increment,  ei_name varbinary(255) unique key ) default charset=utf8; create table exif_metadata ( em_img int comment 'foreign key exif_image.ei_id',  em_field int comment 'foreign key exif_fields.ef_id',  em_val varchar(255),  key (em_img,em_field),  key (em_field,em_img) ) default charset=utf8;



$dbw = wfGetDB(DB_MASTER); $infile = fopen("exif-fields.csv", "rt"); while(!feof($infile)) { $bits = fgetcsv($infile); if ($bits) { $dbw->insert('exif_fields',           array( 'ef_id' => $bits[1], 'ef_name' => $bits[0], ));   } } fclose($infile);

$count = 0;

$infile = fopen("exif.csv", "rt"); $dbw->begin; while(!feof($infile)) { $bits = fgetcsv($infile); if ($bits) { $name = array_shift($bits); $dbw->insert('exif_image',           array('ei_name' => $name)); $id = $dbw->insertId; $data = array; foreach($bits as $item) { list($field, $val) = explode(':', $item, 2); if (!isset($val)) { var_dump($bits); die; }           $data[] = array(                'em_img' => $id,                'em_field' => $field,                'em_val' => $val,            ); }       if ($data) { $dbw->insert('exif_metadata', $data); }       $count++; if($count % 1000 == 0) { print "$count...\n"; $dbw->commit; }   } } $dbw->commit; fclose($infile);