2011-12-03 17 views
0

SQLデータベースを作成するには、各フィールドと行のすべてのデータを.txtファイルにアップロードします。私のインターネット接続が悪いときは、私は多くの問題を抱えており、時にはプロセスが中止されます。 問題を解決するには、.txtファイルを圧縮形式(.zipまたは可能であれば他の形式:.rar ...など)でアップロードします。このようにして、ファイルサイズは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); 
    ... 

:ここ

は私が現時点で使用されているコード? 詳細が必要な場合は、私に尋ねてください。さらに貼り付けてください。私は、彼らはすべてをよりよく説明し、自分のニーズに合わせて修正するための正しい行だと推測しました。

ご協力いただきありがとうございます。

Mattew

UPDATES: 私は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の非常に新しいです、そして、おそらく私の問題は初心者です、私を許してください。

Bye。

+0

を参照してくださいPHP ZIPARCHIVE - http://www.php.net/manual/en/zip.examples.php – Treffynnon

+0

Treffynnonを、あなたの提案は非常に有用でした!私はいくつかの変更を加え、それが私が望むように動作するようです、私が編集し、更新した質問をお読みください。さようなら! – mattew

答えて

1

利用可能なライブラリはすべて異なるインタフェースを使用するため、アプローチは使用する圧縮メカニズムによって異なります。典型的には、bzip2は私にとっては最もシンプルなのでここに示します。ローカルでは、任意の* ixコマンドラインシェルでbzip2 <file>を実行してください。 Windowsの場合は、 7 - .bz2ファイルを作成するためのZip。

あなたのPHPでは、1行ではなくファイル内容全体を読みたいと思うでしょう(圧縮されたファイルでは1行は意味がありません)。

/* 
// 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 

注:だから、ファイルを開くから始まるあなたのコードを変更する必要がありますのために利用できるPHPのライブラリがあり"compression" formatsの、唯一のLZFを使用することも同様に簡単です(あなただけに必要があるだろうbzdecompresslzf-decompressに置き換えます。他の形式(ZIPやRARなど)は圧縮形式だけでなくアーカイブ形式(複数の圧縮ファイルを保持できることを意味する)でもあるためです。それは少し難しくなっています。詳細はdocumentationをご覧ください。

+0

すぐにお返事ありがとうございます。 zipファイルをアップロードし、一時ディレクトリに解凍すると想像しました。ここで、readfile.phpは通常データベースを読み込んでデータを読み込みます。それは悪いアプローチですか? – mattew

+0

大きなファイルをアップロードしている場合や、一度に複数のファイルをアップロードしたい場合は、メモリの使用が懸念される場合は、おそらくもっと良い考えです。 – codeling

1

は、ZIPのラッパーを使用します

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

私はちょうど1つのファイルを得るためにこの考えが好きです。私はzLibファイルストリームラッパーを忘れていました。 http://www.php.net/manual/en/wrappers.compression.phpを参照してください。 – Treffynnon

関連する問題