0

このように、改行を含む値を含むテキスト ファイルがあります。

Lawrence
Barse
Sifron
etc
etc

このファイルを読み取り、各値をデータベース テーブルに挿入したいと考えています。挿入された各値に関する情報をフロント エンド ページに表示するようにします。

Value Lawrence inserted successfully

だから、私はこのように私のPHPコードを書きました

$count = 0;
$fileName = "names.txt";
    $fhandler = fopen($fileName, 'r');
    $theData = fread($fhandler, filesize($fileName));
    fclose($fhandler);

    $myArray = explode("\n", $theData);

したがって、変数 $myArray には、テキスト ファイルのすべての値が含まれます。

次に、$myArray[0] からデータ挿入 PHP スクリプト ページに値を送信する Javascript 関数を作成しました。これは次のようなものです。

<script >
    var cnt;
    function init()
    {
        var str = "<?php echo $myArray[$count] ?>";
        alert("Str is "+str);
    }
    function writeData(data)
        {
            if (window.XMLHttpRequest)
              {// code for IE7+, Firefox, Chrome, Opera, Safari
              xmlhttp=new XMLHttpRequest();
              }
            else
              {// code for IE6, IE5
              xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
              }
            xmlhttp.onreadystatechange=function()
              {
                if (xmlhttp.readyState==4 && xmlhttp.status==200)
                {
                    document.getElementById("my_content").innerHTML += xmlhttp.responseText;
                    repeat();
                }
              }
            $data = ""+data+"";
            xmlhttp.open("GET","returnVals.php?b="+$data,true);
            xmlhttp.send();
        }
    function repeat()
    {
        <?php echo $count++; ?>
        cnt = "<?php echo $count ?>";
        var val = "<?php echo $myArray[$count] ?>";
        alert("Count is "+cnt+" and Val is "+val);
        writeData(val);
    }
</script>

私の returnVals.php は、すべてのデータの挿入、エコー、および出力を処理するスクリプトであり、応答ハンドラーで出力します。

また、プログラミングの標準的な方法ではない、javascript 内で php の値をエコーし​​ていることは知っていますが、他の方法は見当たりません。私の Javascript の repeat() 関数は、$count 値に基づいて writeData 関数を再呼び出ししますが、この値をインクリメントすることはできません。

これを達成するためのより良い方法はありますか...

前もって感謝します!!!

4

1 に答える 1

0

何度か遭遇しました。完了前に PHP のタイムアウトを超える、長時間実行されるインポート プロセス用の非 AJAX パターンを開発しました。いつか AJAX にアップグレードするかもしれませんが、これは私にはかなり簡単に思えます。うまくいけば、それはあなたの助けになります。

パターン

  • 新しいスタート地点にジャンプ
  • 一定数の新しいレコードを出力する
  • リンクを続ける
  • 続行リンクへの自動リロード (オプション)

コード

<?php
// variables
$num_rows = 25;  // number of rows to handle per page view

// get the starting index
$start_at  = (isset($_REQUEST['start'])) ? $_REQUEST['start'] : 0;
$new_start = $start_at + $num_rows;

// skip ahead to $start_at
$in_file   = fopen(...);
for ($i = 0; $i < $start_at; $i++) {
    // skip over this many rows
    fgets($in_file);
}

// process num_rows
for ($i = 0; $i < $num_rows; $i++) {
    $line = fgets($in_file);

    // process the line

    $morework = !!$line;  // fgets returns FALSE when done
}

// write out continue link with auto reload trigger
if ($morework) {
    echo "<a id='clickme' href='/my/page?start={$new_start}'>Continue from {$new_start}</a";
    echo "<script>";
        echo "window.location = document.getElementById('clickme').href";
    echo "</script>";
} else {
    echo "DONE";
}
于 2013-10-22T17:59:12.937 に答える