Php 将多个文本文件及其标题导入MySQL
我有一个包含大约10000个文本文件的文件夹。我想将这些文件导入到一个包含两列的MySQL表中。对于每一行,我希望在一列中显示文本文件的标题(例如1234.txt),在另一列中显示文件的内容。我会用PHP。您建议我怎么做?您可以尝试以下方法,下面的代码将遍历目录中的所有文本文件,并将每个文件的文件名作为标题,将内容作为内容添加到MySQL数据库中Php 将多个文本文件及其标题导入MySQL,php,mysql,Php,Mysql,我有一个包含大约10000个文本文件的文件夹。我想将这些文件导入到一个包含两列的MySQL表中。对于每一行,我希望在一列中显示文本文件的标题(例如1234.txt),在另一列中显示文件的内容。我会用PHP。您建议我怎么做?您可以尝试以下方法,下面的代码将遍历目录中的所有文本文件,并将每个文件的文件名作为标题,将内容作为内容添加到MySQL数据库中 <?php $size = ""; //Change "MyFolder" with the path and name of the dire
<?php
$size = "";
//Change "MyFolder" with the path and name of the directory where the .txt files are located.
$dir = "MyFolder";
if ($handle = opendir($dir)) {
while (false !== ($file = readdir($handle))) {
if($file == '.' || $file == '..') continue;
$myFile = "$dir/$file";
$fh = fopen($myFile, 'r');
$size = filesize($myFile);
if ($size > 0) {
$content = fread($fh, $size);
$title = $file;
echo $title."</br>";
}
$con=mysqli_connect("HostName","Username","Password","Database");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
mysqli_query($con,"INSERT INTO table_name (Title, Content) VALUES ('$title', '$content')");
mysqli_close($con);
fclose($fh);
}
closedir($handle);
}
?>
您可以使用(ab)在列中加载整个文件。“技巧”只是提供文件中不存在的字符序列作为行/字段终止:
mysql> create table tbl(fname CHAR(255), data TEXT);
Query OK, 0 rows affected (0.35 sec)
mysql> LOAD DATA INFILE '/tmp/demo.txt' INTO TABLE tbl
FIELDS TERMINATED BY 'XXX' LINES TERMINATED BY 'YYY'
(data) SET fname = 'demo.csv';
Query OK, 1 row affected (0.00 sec)
Records: 1 Deleted: 0 Skipped: 0 Warnings: 0
mysql> select * from tbl;
+----------+--------------------------------------------------------------------------------------------------+
| fname | data |
+----------+--------------------------------------------------------------------------------------------------+
| demo.csv | Date, Amount, Name
2013-01-01, 1000, "Apple"
2013-01-02, 500, "Orange"
2013-01-03, 250, "Prune"
|
+----------+--------------------------------------------------------------------------------------------------+
1 rows in set (0.00 sec)
如果要加载文件夹中的所有文件,必须使用宿主语言从循环中调用该语句,甚至可以使用一个简单的shell脚本:
for i in *.txt; do
echo "LOAD DATA INFILE '$i' INTO TABLE tbl
FIELDS TERMINATED BY 'XXX' LINES TERMINATED BY 'YYY'
(data) SET fname = '$i';";
done
| mysql -p -u user_name -h host_name db_name
一般来说,我建议将文件保存在文件系统中,而不是数据库中。谢谢你的建议。我需要用一个只在MySQL上可用的脚本来处理文本。所以我需要找到一种导入文件的方法。这里需要一些澄清。首先,你最大的文本文件的长度是多少?您需要了解这一点才能选择适当的数据类型,例如VARCHAR(255)
、TEXT
、MEDIUMTEXT
,等等。其次,您的“脚本”如何使用此表?它是否使用全文
搜索?它是否需要文本列上的索引?第三,你的文本是用ASCII、拉丁文1、UTF-8还是什么格式记录的?我认为你不能只用MySQL来记录。你能使用像PHP这样的脚本语言吗?我试着在bash中这样做,但我放弃了(逃跑是个问题)。@OllieJones:最大的文件是3K个字符。我需要一个文本列的索引。我不知道编码是什么。非常感谢你的回答。我只是测试了一下,它似乎不起作用。你知道为什么吗?没有错误,没有任何内容,它只是不加载表中的任何内容。包含所有文本文档的文件夹“myfolder”与php脚本位于同一文件夹中。糟糕,这是一个目录问题。成功了!非常感谢!没问题,这可能不是最好的解决方案,但我希望它能有所帮助。确实如此!不过,我有一个简短的问题要问你。我的文件夹中有8K个文本文件。我添加了一个echo$标题;在脚本中,以便我可以确保导入所有文档。奇怪的是,所有名称都显示为已导入,但数据库中缺少2K行。我试了两次。有什么想法吗?好的,没问题。我将查看代码并更新我的答案。