ホームページ >バックエンド開発 >PHPチュートリアル >PHP のキュー原理とファイルを書き込むためのグラフィック コードの詳細な説明

PHP のキュー原理とファイルを書き込むためのグラフィック コードの詳細な説明

黄舟
黄舟オリジナル
2017-11-02 09:21:371411ブラウズ

この記事の例では、PHP キューの原則とキューベースのファイル書き込みケースについて説明します。参考のために皆さんと共有してください。詳細は次のとおりです:

キューは線形テーブルであり、先入れ先出しの原則に従って実行されます:

Entry:

終了:

キューのPHP実装: 最初の要素はキューの先頭で、最後の要素はキューの末尾です

<?php
/**
 * 队列就是这么简单
 *
 * @link
 */
$array = array(&#39;PHP&#39;, &#39;JAVA&#39;);
array_push($array, &#39;PYTHON&#39;); //入队列
array_shift($array); //出队列

両端キューとは(または双方向キュー) Deque、正式名称は両端キューですか?

つまり、これらのメソッド insertLeft() と insertRight() を呼び出すと、要素はキューのどの部分でも入力またはキューから取り出されます。また、removeLeft() と RemoveRight() も呼び出すことができます。 insertLeft() メソッドとremoveLeft() メソッドの呼び出しが厳密に禁止されている場合 (または、右側のセグメントの操作が無効になっている場合)、両端キューはスタックのように機能します。 insertLeft() と RemoveRight() (またはその逆の別のメソッドのペア) を呼び出すことは禁止されており、その機能はキューと同じです。デキューは、スタックやキューと比較して多用途のデータ構造です。

PHP は両端キュー

<?php
class Deque
{
  public $queue = array();
  /**(尾部)入队 **/
  public function addLast($value)
  {
    return array_push($this->queue,$value);
  }
  /**(尾部)出队**/
  public function removeLast()
  {
    return array_pop($this->queue);
  }
  /**(头部)入队**/
  public function addFirst($value)
  {
    return array_unshift($this->queue,$value);
  }
  /**(头部)出队**/
  public function removeFirst()
  {
    return array_shift($this->queue);
  }
  /**清空队列**/
  public function makeEmpty()
  {
    unset($this->queue);
  }
  /**获取列头**/
  public function getFirst()
  {
    return reset($this->queue);
  }
  /** 获取列尾 **/
  public function getLast()
  {
    return end($this->queue);
  }
  /** 获取长度 **/
  public function getLength()
  {
    return count($this->queue);
  }
}

を実装しています。キューの使用:

キューは、データベースに頻繁にデータを挿入し、頻繁に検索する場合、エンジンが送信する場合に、データの送信と保存を非常にうまく処理できます。データをキューに非同期的に挿入できます。さらに、FLV ビデオ変換、携帯電話のテキスト メッセージの送信、電子メールの送信など、メッセージ キューを介した処理のために、低速の処理ロジックや同時実行性が制限された処理ロジックをバックグラウンドに配置することもできます。

プロジェクトのケースここにプロジェクトがあります。サーバーの権限の問題のため、キュープログラムをインストールする方法はなく、サービスプロバイダーのデータベースへの最大接続数は300以上です。 300. この問題を解決するために、簡単なキュー プログラムを作成しました。コードは次のとおりです

キュー コードを読みます:

<?php
set_time_limit(0);
$file_name3 = &#39;3.txt&#39;;//这个地方是讲队列文件读出的内容写入文件,test中代替的是mysql数据库操作
$file3 = fopen($file_name3,&#39;a&#39;);
while(true)
{
  $c = FALSE;
  $file_name = &#39;1.txt&#39;;//队列文件
  $file = fopen($file_name,&#39;r&#39;);
  if(!feof($f))
  {
    //获得第一条数据
    $a = fgets($file);
    if(!empty($a))
    {
      $c = TRUE;
      fwrite($file3,$a);//这里可以改为数据库操作
    }
  }
  fclose($file);
  if($c)
  {
    //将文件的第一条数据删除
    exec(&#39;sed -i \&#39;1d\&#39; /var/www/csv_sql/1.txt&#39;);
  }
  sleep(1);
  if(time()>=strtotime(&#39;20160416150000&#39;))
  {
    exit;
  }
}
fclose($file3);

シャットダウン ポイントが設定されていない場合、読み取りキュー プログラムは実際には無限ループ プログラムです。 、ループし続けます

ファイルを読み取ります

キュープログラムを書くことは比較的簡単です、つまり、ファイルを書き込む

<?php
set_time_limit(0);
$file_name2 = &#39;2.txt&#39;;//test中用来比对队列程序是否正常的
$file2 = fopen($file_name2,&#39;a&#39;);
for($i=1;$i<11;$i++)
{
  $file_name = &#39;1.txt&#39;;//队列文件
  $file = fopen($file_name,&#39;a&#39;);//fopen的mode属性必须是a或a+
  $str = $i.&#39;--&#39;.rand(100001,999999);
  fwrite($file,$str."\n");
  fwrite($file2,$str."\n");
  sleep(1);
  fclose($file);
}
fclose($file2);

以上がPHP のキュー原理とファイルを書き込むためのグラフィック コードの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。