2011-10-25 9 views
0

私はデータをPHPでJSONファイルに書き出しています。各JSONファイルには、field1とfield2というIDがあります。今、私が解決しようとしているのは、新しいファイルに書き込むための最良の方法ですが、最後に書き込まれたファイルから自動インクリメントされたIDがあります。私はすべてのファイルを読んで最高の数字を出したり、より良い方法がありますか?また、各JSONファイルにはどのような名前を付ける必要がありますか?PHPを使用して別のファイルにJSONキーIDをインクリメント

これは、これまで(ノートは、IDフィールドはまだ実装されていません)私のコードです:

$data[] = $_POST['data']; 

$fp = fopen('results.json', 'w'); 
fwrite($fp, json_encode($data)); 
fclose($fp); 

答えて

1

あなたは私が私の頭の上から、と考えることができ、この2つの方法で行うことができます。

  1. 自動インクリメントにMySQLを使用します。 auto_incrementが設定されたプライマリキーのみを持つテーブルを作成します。 dbに新しいレコードを挿入し、最後の挿入IDを使用します。

  2. セマフォ(ソート)を使用して、最後のIDをシステムファイルに格納します。 jsonを保存する前に、セマフォがNULLであることを確認し、ファイル(semaphore.txt)を作成し、idファイル(current_id.txtなど)を開き、番号を増分して保存し、semaphore.txtファイルを削除します。セマフォファイルが終了したら、しばらくスリープしてから、合計タイムアウト、または最大ループ回数で再試行してください。

あなたはオプション1で行く場合、あなたはちょうどあなたが保存しているファイルの名前が含まれている別のフィールドを追加することができますし、ファイル名を生成するための(または類似の)uniqidを使用します。もちろん、使用することができます<id>.json

+0

私の計画は.jsonのみを使用することです:1つのファイルに追加するほうがいいですか? – benhowdle89

+1

あなたの問題は並行性にあります。競合状態を防ぐために、ある種のロック機構を実装する必要があります。上記の両方のソリューションが可能なソリューションです。 –

関連する問題