上载并读取压缩文件以填充数据库

时间:2011-12-03 01:14:57

标签: php

为了填充sql数据库,我上传了包含每个字段和行的所有数据的.txt文件。当我的互联网连接不好时,我遇到了很多问题,有时会中止流程。 要解决这个问题,我会以压缩格式(.zip或其他格式:.rar ...等)上传.txt文件。通过这种方式,文件大小了15倍,我可以更轻松,更快地上传。 我该怎么办?

以下是我目前使用的代码:

upload.php的

  ...
  <form action="readfile.php" enctype="multipart/form-data" method="post">
  <br>Filename:&nbsp;<input name="userfile" type="file">
  <p><input type="reset" value="Reset">
  <input type="submit" value="Upload">
  </form>
  ...

readfile.php

  ...
  // Read data posted from form
$browser_name = $_FILES['userfile']['name'];
$temp_name = $_FILES['userfile']['tmp_name'];
$usrname = $_POST['uname'];

// Connect to the database
if (!($connection = @ mysql_connect ($hostName,
                    $username,
                    $password)))
    die ("Could not connect to database");

if (!mysql_select_db ($databaseName, $connection))
    showerror();

echo "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\"http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd\">";
echo "<html>";
echo "<head>";
echo "<title>Upload file</title>";
echo "</head>";
echo "<body>";

// Was a file uploaded?
if (is_uploaded_file ($temp_name))
{
    echo "<h1>File Upload $browser_name</h1>";
    echo "<p>Filename - $browser_name\n";
    echo "<br>User name - $uname\n";

    // Open the file
    if (!($file = fopen ($temp_name, "r")))
        die ("Could not open the file $file\n");

    // Read the first line
    $string = fgets ($file, 1024);
  ...

修改和/或添加代码的位置? 如果您需要更多详细信息,请询问我并粘贴更多:我认为它们是更好地解释所有内容并根据我的需求进行修改的正确方法。

非常感谢您的帮助。

马修

更新: 我使用ZipArchive做了一些新的修改。简而言之,.zip文件现在上传到一个文件夹中并解压缩。因此,nomefile.txt文件可以作为特定文件夹内的普通.txt文件进行读取和处理。 不幸的是,fopen会查找特定的文件名。我的想法是将任何解压缩的文件(具有随机名称但扩展名为.txt)重命名为特定文件(例如myfile.txt)。通过这种方式,我可以修复具有小/国会大厦字母的“不同”扩展名的问题,例如.txt和.TXT

这是我之前提到的代码:       ...

  //unzip del file
   $zip = new ZipArchive;
   $zip->open('file.zip');
   $zip->extractTo('./');
   $zip->close();
   echo "File unzipped and ready to be processed";



    if (!($file = fopen ("namefile.txt", "r")))
        die ("Could not open the file $file\n");

    // Read the first line
    $string = fgets ($file, 1024);
    ....

评论?帮助? 在此先感谢,我是非常新的PHP,也许我的问题是基本的,对不起。

再见。

2 个答案:

答案 0 :(得分:1)

该方法与您使用的压缩机制不同,因为可用的库都使用不同的接口;示例,我会在这里展示bzip2,因为这对我来说似乎是最简单的。在本地,只需在任何* ix命令行shell上执行bzip2 <file>;在Windows上你可以使用例如7-Zip用于创建.bz2文件。

在你的php中,你需要读取整个文件内容而不是单行(单行在压缩文件中没有多大意义)。因此,您必须从打开文件开始更改代码:

/*
// Open the file
if (!($file = fopen ($temp_name, "r")))
    die ("Could not open the file $file\n");

// Read the first line
$string = fgets ($file, 1024);
*/

$compressed_filecontent = file-get-contents($temp_name);
$filecontent = bzdecompress($compressed_filecontent);
...
// instead of reading from the file line by line,
// you'd then have to split up the $filecontent variable
// in separate lines and work on them

注意:在"compression" formats可用的PHP库中,只有LZF同样易于使用(您只需将bzdecompress替换为lzf-decompress);这是因为其他格式(如ZIP和RAR)不仅是压缩格式,还有归档格式(意味着这些文件可以容纳多个压缩文件)。这使得阅读它们变得更难 - 请参阅documentation以获取更多信息。

答案 1 :(得分:1)

使用ZIP包装器:

$filedata = file_get_contents("zip://absolutepathtozip.zip#pathintozip/file.txt");