以前用Python写了一个处理SQL文件的小程序,今天也同样碰到了一个类似的要求,不过处理的对象是PHP文件,于是就用PHP写了一个处理程序。
问题的描述如下:被处理的文件的文件名类似于{$channel_id}_{$category_id}.php,所有文件内都包含一个Array变量,文件结构类似于下面:
<?php
$arrLeftMoreInfo = array (
'0' => array (
'name' => 'Laptop Blog',
'url' => 'http://blogs.smarter.com/gadgets/category/laptops/',
'icon' => 'icon_leftmoreinfo.gif',
'type' => 'Review'
),
'1' => array (
'name' => 'How Laptops Work',
'url' => 'http://communication.howstuffworks.com/laptop.htm',
'icon' => 'icon_leftmoreinfo.gif',
'type' => 'Review'
),
'2' => array (
'name' => 'Laptop Magazine',
'url' => 'http://www.laptopmag.com/',
'icon' => 'icon_leftmoreinfo.gif',
'type' => 'Review'
)
);
?>
现在的要求就是生成一个SQL文件,里面的内容就是对应表的数据插入语句。所以生成的SQL语句看起来应该类似于这个样子:
INSERT INTO `sit_seomoreinfo` (`id`,`ChannelID`,`CategoryID`,`name`,`url`,`icon`,`type`,`created`,`modified`) VALUES (null,2,31,'Laptop Blog','http://blogs.smarter.com/gadgets/category/laptops/','icon_leftmoreinfo.gif','Review',now(),now()), (null,2,31,'How Laptops Work','http://communication.howstuffworks.com/laptop.htm','icon_leftmoreinfo.gif','Review',now(),now()), (null,2,31,'Laptop Magazine','http://www.laptopmag.com/','icon_leftmoreinfo.gif','Review',now(),now()), ……
最终的代码就是下面这个样子:
<?php
$curDir = dirname(__FILE__);
$dh = opendir($curDir);
$i = 0;
$sqlArray = array ();
while ($file = readdir($dh)) {
if ($file != '.' && $file != '..' && preg_match("/^([0-9]+)_([0-9]+)/.php$/", $file, $name)) {
require $file;
foreach ($arrLeftMoreInfo as $k => $v) {
$i++;
$sqlArray[] = "(null,{$name[1]},{$name[2]},'{$v['name']}','{$v['url']}','{$v['icon']}','{$v['type']}',now(),now())";
}
}
}
closedir($dh);
$sqlFile = "INSERT INTO `sit_seomoreinfo` /r/n" .
"(`id`,`ChannelID`,`CategoryID`,`name`,`url`,`icon`,`type`,`created`,`modified`) /r/n" .
"VALUES /r/n" . implode(",/r/n", $sqlArray).';';
pr($i);
file_put_contents('import_moreinfo.sql',$sqlFile);
?>
打完收工。