file_put_contents($file, $xml);

RSS1.0
シンプルな記述。テキスト配信向き
RDFシリーズを元にして制作。
はてなRSSは1.0。FC2も1.0。
RSS2.0
配信する文章の色を変えたり、リンクを仕込めるなど、グラフィック面でいろいろ出来る。コンテンツ配信向き
XMLシリーズを元にして制作されている。

<?php

	// ライブラリの読み込み
	require_once "./Item.php" ;
	require_once "./Feed.php" ;
	require_once "./RSS2.php" ;

	// エイリアスの作成
	use \FeedWriter\RSS2 ;

	// インスタンスの作成
	$feed = new RSS2 ;

	// チャンネル情報
	$feed->setTitle( "SYNCER" ) ;			// チャンネル名
	$feed->setLink( "https://syncer.jp" ) ;		// URLアドレス
	$feed->setDescription( "知識と感動を同期(Sync)するブログ" ) ;	// チャンネル紹介テキスト
	$feed->setImage( "SYNCER" , "https://syncer.jp","https://syncer.jp/images/DHFgXv5Rfe4d1Lej1lnQfuffZtzsj/assets/logo/490x196.png" ) ;	// ロゴなどの画像
	$feed->setDate( date( DATE_RSS , time() ) ) ;	// フィードの更新時刻
	$feed->setChannelElement( "language" , "ja-JP" ) ;	// 言語
	$feed->setChannelElement( "pubDate" , date(\DATE_RSS, strtotime("2014-11-23 15:30")) ) ;	// フィードの変更時刻
	$feed->setChannelElement( "category" , "Blog" ) ;	// カテゴリー

	// アイテム(1つだけ登録)
	$item = $feed->createNewItem() ;
	$item->setTitle( "PHPでRSS、AtomのFeedを作成する方法" ) ;	// タイトル
	$item->setLink( "https://syncer.jp/how-to-make-feed-by-php" ) ;	// リンク
	$item->setDescription( "PHPを使って、RSS、Atomのフィード・ファイルを作成する方法を解説します。" ) ;	// 紹介テキスト
	$item->setDate( strtotime("2014-11-23 18:30") ) ;	// 更新日時
	$item->setAuthor( "あらゆ" , "info@syncer.jp" ) ;	// 著者の連絡先(E-mail)
	$item->setId( "https://syncer.jp/how-to-make-feed-by-php" , true ) ;	// 一意のID(第1引数にURLアドレス、第2引数にtrueで通常は大丈夫)
	$feed->addItem( $item ) ;

	// コードの生成
	$xml = $feed->generateFeed() ;

	// ファイルの保存場所を設定
	$file = "./rss2_2.xml" ;

	// ファイルの保存を実行
	@file_put_contents( $file , $xml ) ;
<rss version="2.0">
<channel>
<title>SYNCER</title>
<link>https://syncer.jp</link>
<description>
<!&#91;CDATA&#91; 知識と感動を同期(Sync)するブログ &#93;&#93;>
</description>
<image>
<title>https://syncer.jp</title>
<link>
https://syncer.jp/images/DHFgXv5Rfe4d1Lej1lnQfuffZtzsj/assets/logo/490x196.png
</link>
<url>SYNCER</url>
</image>
<lastBuildDate>Wed, 14 Dec 2016 21:30:07 +0900</lastBuildDate>
<language>ja-JP</language>
<pubDate>Sun, 23 Nov 2014 15:30:00 +0900</pubDate>
<category>Blog</category>
<item>
<title>PHPでRSS、AtomのFeedを作成する方法</title>
<link>https://syncer.jp/how-to-make-feed-by-php</link>
<description>
<!&#91;CDATA&#91; PHPを使って、RSS、Atomのフィード・ファイルを作成する方法を解説します。 &#93;&#93;>
</description>
<pubDate>Sun, 23 Nov 2014 18:30:00 +0900</pubDate>
<author>info@syncer.jp (あらゆ)</author>
<guid isPermaLink="true">https://syncer.jp/how-to-make-feed-by-php</guid>
</item>
</channel>
</rss>

php mysql で画像アップロード

%e7%84%a1%e9%a1%8c

<?php

/* html特殊文字をエスケープする関数 */
function h($str) {
  return htmlspecialchars($str, ENT_QUOTES, 'utf-8');
}

// xhtmlとしてブラウザに認識させる
//(ie8以下はサポート対象外)
header('Content-Type: application/xhtml+xml; charset=utf-8');

try {

  // データベースに接続
  $pdo = new PDO(
    'mysql:host=localhost;dbname=test;charset=utf8',
    'root',
    '',
    &#91;
      PDO::ATTR_EMULATE_PREPARES => false,
      PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
      PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    ]
  );

  /* アップロードがあったとき */
  if (isset($_FILES['upfile']['error']) && is_int($_FILES['upfile']['error'])){

    // バッファリングを開始
    ob_start();

    try {
      // $_FILES['upfile']['error']の値を確認
      switch ($_FILES['upfile']['error']){
        case UPLOAD_ERR_OK: // ok
          break;
        case UPLOAD_ERR_NO_FILE:
          throw new RuntimeException('ファイルが選択されていません', 400);
        case UPLOAD_ERR_INI_SIZE:
        case UPLOAD_ERR_FORM_SIZE:
          throw new RuntimeException('ファイルサイズが大きすぎます', 400);
        default:
          throw new RuntimeException('その他のエラーが発生しました', 500);
      }

      // $_FILES['upfile']['mime']の値はブラウザ側で偽装可能なので
      // MIMEタイプを自前でチェックする
      if (!$info = getimagesize($_FILES['upfile']['tmp_name'])){
        throw new RuntimeException('有効な画像ファイルを指定してください', 400);
      }
      if (!in_array($info[2], [IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_PNG], true)){
        throw new RuntimeException('未対応の画像形式です', 400);
      }

      // サムネイルをバッファに出力
      $create = str_replace('/', 'createfrom', $info['mime']);
      $output = str_replace('/', '', $info['mime']);
      if ($info[0] >= $inf0[1]){
        $dst_w = 120;
        $dst_h = ceil(120 * $info[1] / max($info[0], 1));
      } else {
        $dst_w = ceil(120 * $info[0] / max($info[1], 1));
        $dst_h = 120;
      }
      if (!$src = @$create($_FILES['upfile']['tmp_name'])){
        throw new RuntimeException('画像リソースの生成に失敗しました', 500);
      }
      $dst = imagecreatetruecolor($dst_w, $dst_h);
      imagecopyresampled($dst, $src, 0, 0, 0, 0, $dst_w, $dst_h, $info[0], $info[1]);
      $output($dst);
      imagedestroy($src);
      imagedestroy($dst);

      // INSERT処理
      $stmt = $pdo->prepare('INSERT INTO image(name,type,raw_data,thumb_data,date) VALUES(?,?,?,?,?)');
      $stmt->execute([
        $_FILES['upfile']['name'],
        $info[2],
        file_get_contents($_FILES['upfile']['tmp_name']),
        ob_get_clean(),
        (new DateTime('now', new DateTimeZone('Asia/Tokyo')))->format('Y-m-d H:i:s'),
      ]);

      $msgs[] = ['green', 'ファイルは正常にアップロードされました'];
    } catch (RuntimeException $e){

      while(ob_get_level()){
        ob_end_clean();
      }
      http_response_code($e instanceof PDOException ? 500 : $e->getCode());
      $msgs[] = ['red', $e->geteMessage()];

    }
  } elseif (isset($_GET['id'])){
    try {

      $stmt = $pdo->prepare('SELECT type, raw_data FROM iamge WHERE id = ? LIMIT 1');
      $stmt->bindValue(1, $_GET['id'], PDO::PARAM_INT);
      $stmt->execute();
      if (!$row = $stmt->fetch()){
        throw new RuntimeException('該当する画像は存在しません', 404);
      }
      header('X-Content-Type-Options: nosniff');
      header('Content-Type: ' . image_type_to_mime_type($row['type']));
      echo $row['raw_data'];
      exit;
    } catch (RuntimeException $e){

      http_response_code($e instanceof PDOException ? 500 : $e->getCode());
      $msgs[] = ['red', $e->getMessage()];
    }

  }

  $rows = $pdo->query('SELECT id,name,type,thumb_data,data From image ORDER BY date DESC')->fetchAll();

} catch(PDOException $e){
  http_response_code(500);
  $msgs[] = ['red', $e->getMessage()];
}
?>

<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>画像アップロード</title>
    <style><!&#91;CDATA&#91;
    fieldset { margin: 10px; }
    legend { font-size: 12px; }
    img {
      border: none;
      float: left;
    }
    &#93;&#93;></style>
  </head>
  <body>
    <form enctype="multipart/form-data" method="post" action="">
      <fieldset>
        <legend>画像ファイルを選択(GIF, JPEG, PNGのみ対応)</legend>
        <input type="file" name="upfile" /><br>
        <input type="submit" value="送信" />
      </fieldset>
    </form>
  <?php if (!empty($msgs)): ?>
    <fieldset>
      <legend>メッセージ</legend>
  <?php foreach ($msgs as $msg): ?>
    <ul>
      <li style="color:<?=h($msg&#91;0&#93;)?>;"><?=h($msg&#91;1&#93;)?></li>
    </ul>
  <?php endforeach; ?>
</fieldset>
<?php endif; ?>
<?php if (!empty($rows)): ?>
  <fieldset>
    <legend>サムネイル一覧(クリックすると原寸大表示)</legend>
  <?php foreach ($rows as $i => $row): ?>
  <?php if ($i): ?>
    <hr />
  <?php endif; ?>
    <p>
      <?=sprintf(
        '<a href="?id=%d"><img src="data:%s;base64,%s" alt="%s" /></a>',
        $row['id'],
        image_type_to_mime_type($row['type']),
        base64_encode($row['thumb_data']),
        h($row['name'])
        )?><br>
        ファイル名: <?=h($row&#91;'name'&#93;)?><br />
        日付: <?=h($row&#91;'date'&#93;)?><br clear="all">
      </p>
    <?php endforeach; ?>
  </fieldset>
<?php endif; ?>
</body>
</html>

$_FILE

a

move_uploaded_file($_FILES[“upfile”][“tmp_name”], “files/” . $_FILES[“upfile”][“name”]で、画像をアップロード

form.html

<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>sample</title>
</head>
<body>
  <form action="upload.php" method="post" enctype="multipart/form-data">
    ファイル:<br>
    <input type="file" name="upfile" size="30" /><br>
    <input type="submit" value="アップロード" />
  </form>
</body>
</html>

upload.php

<!DOCTYPE html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=utf8">
  <title>画像アップロード</title>
</head>
<body>
  <p><?php

  if (is_uploaded_file($_FILES&#91;"upfile"&#93;&#91;"tmp_name"&#93;)){
    if (move_uploaded_file($_FILES&#91;"upfile"&#93;&#91;"tmp_name"&#93;, "files/" . $_FILES&#91;"upfile"&#93;&#91;"name"&#93;)){
    chmod("files/" . $_FILES&#91;"upfile"&#93;&#91;"name"&#93;, 0644);
    echo $_FILES&#91;"upfile"&#93;&#91;"name"&#93; . "をアップロードしました。";
  } else {
    echo "ファイルをアップロードできません。";
  }
  } else {
    echo "ファイルが選択されていません。";
  }

   ?></p>
</body>
</html>

複数の画像を配列で保存

%e7%84%a1%e9%a1%8c

<?php
if (isset($_FILES&#91;'upfile'&#93;&#91;'error'&#93;) && is_int($_FILES&#91;'upfile'&#93;&#91;'error'&#93;)){

  // 各ファイルをチェック
  foreach ($_FILES&#91;'upfile'&#93;&#91;'error'&#93; as $k => $error){

  try {

    if (!is_int($error)){
      throw new RuntimeException("[{$k}] パラメータが不正です");
    }
    // $_FILES['upfile']['error']の値を確認
    switch ($_FILES['upfile']['error']){
      case UPLOAD_ERR_OK:
        break;
      case UPLOAD_ERR_NO_FILE:
        throw new RuntimeException('ファイルが選択されていません');
      case UPLOAD_ERR_INI_SIZE:
      case UPLOAD_ERR_FORM_SIZE: // フォーム定義の最大サイズ超過
        throw new RuntimeException('ファイルサイズが大きすぎます');
      default:
        throw new RuntimeException('その他のエラーが発生しました');
    }

    // $_FILES['upfile']['mime']の値はブラウザ側で偽装可能なので
    // MIMEタイプを自前でチェックする
    if (!$info @getimagesize($_FILES['upfile']['tmp_name'][$k])){
      throw new RuntimeException("[{$k}] 有効な画像ファイルを指定してください");
    }
    if (!in_array($info[2], [IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_PNG], true)){
      throw new RuntimeException("[{$k}] 未対応の画像形式です");
    }

    // 画像処理に使う関数名を決定する
    $create = str_replace('/', 'createfrom', $info['mime']);
    $output = str_replace('/', '', $info['mime']);

    // 縦横比を維持したまま、120*120 以下に収まるサイズを求める
    if ($info[0] >= $info[1]){
      $dst_w = 120;
      $dst_h = ceil(120 * $info[1] / max($info[0], 1));
    } else {
      $dst_w = ceil(120 * $info[0] / max($info[1], 1));
      $dst_h = 120;
    }

    // 元画像リソースの生成を試みる
    if (!$src = @$create($_FILES['upfile']['tmp_name'][$k])){
      throw new RuntimeException("[{$k}] 画像リソースの生成に失敗しました");
    }

    // リサンプリング先画像リソースを生成する
    $dst = imagecreatetruecolor($dst_w, $dst_h);

    // getimagesize関数で得られた情報も利用してリサンプリングを行う
    imagecopyresampled($dst, $src, 0, 0, 0, 0, $dst_w, $dst_h, $info[0], $info[1]);

    // ファイルデータからSHA-1ハッシュを取ってファイル名を決定し、保存する
    if (!$output(
      $dst,
      sprintf('./resized/%s%s',
        sha1_file($_FILES['upfile']['tmp_name'][$k]),
        image_type_to_extension($info[2])
        )
      )) {
        throw new RuntimeException("[{$k}] ファイル保存時にエラーが発生しました");
      }

    $msgs[] = ['green', "[{$k}] リサイズして保存しました"];
  } catch (RuntimeException $e){
    $msgs = ['red', $e->getMessage()];
  }

  if (isset($img) && is_resource($img)){
    imagedestroy($img);
  }
  if (isset($dst) && is_resource($dst)){
    imagedestroy($dst);
  }
}
}

// XTHMLとしてブラウザに認識させる
// (IE8以外はサポート対象外)
header('Content-Type: application/xhtml+xml; charset=utf-8');
?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>画像アップロード</title>
</head>
<body>
<?php if (!empty($msgs)): ?>
  <ul>
<?php foreach ($msgs as $msg): ?>
    <li style="color:<?=$msg&#91;0&#93;?>;"><?=
    htmlspecialchars($msg&#91;1&#93;, ENT_QUOTES, 'UTF-8')
    ?></li>
<?php endforeach; ?>
  </ul>
<?php endif; ?>
  <form enctype="multipart/form-data" method="post" action="">
    <fieldset>
      <legend>画像ファイルを選択(GIF, JPEG, PNGのみ対応)</legend>
      <ul>
<?php for ($i = 0; $i < 10; $i++): ?>
      <li><input type="file" name="upfile&#91;&#93;" /></li>
<?php endfor; ?>
      </ul>
      <input type="submit" value="送信" />
    </fieldset>
  </form>
</body>
</html>

imagecreatefromstring

%e7%84%a1%e9%a1%8c
imagecreatefromstring
Create a new image from the image stream in the string

<?php
if (isset($_FILES&#91;'upfile'&#93;&#91;'error'&#93;) && is_int($_FILES&#91;'upfile'&#93;&#91;'error'&#93;)){
  try {
    // $_FILES&#91;'upfile'&#93;&#91;'error'&#93;の値を確認
    switch ($_FILES&#91;'upfile'&#93;&#91;'error'&#93;){
      case UPLOAD_ERR_OK:
        break;
      case UPLOAD_ERR_NO_FILE:
        throw new RuntimeException('ファイルが選択されていません');
      case UPLOAD_ERR_INI_SIZE:
      case UPLOAD_ERR_FORM_SIZE: // フォーム定義の最大サイズ超過
        throw new RuntimeException('ファイルサイズが大きすぎます');
      default:
        throw new RuntimeException('その他のエラーが発生しました');
    }

    // GD画像リソースの生成を試みる
    if (!$img = @imagecreatefromstring(file_get_contents($_FILES&#91;'upfile'&#93;&#91;'tmp_name'&#93;))){
      throw new RuntimeException('有効な画像ファイルを指定してください');
    }

    // ファイルデータからSHA-1ハッシュを取ってファイル名を決定し、保存する
    if (!imagepng($img, sprintf('./uploads/%s.png', sha1_file($_FILES&#91;'upfile'&#93;&#91;'tmp_name'&#93;)))){
      throw new RuntimeException('ファイル保存時にエラーが発生しました');
    }
    $msg = &#91;'green', 'ファイルは正常にアップロードされました'&#93;;
  } catch (RuntimeException $e){
    $msg = &#91;'red', $e->getMessage()];
  }

  if (isset($img) && is_resource($img)){
    imagedestroy($img);
  }
}

// XTHMLとしてブラウザに認識させる
// (IE8以外はサポート対象外)
header('Content-Type: application/xhtml+xml; charset=utf-8');
?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>画像アップロード</title>
</head>
<body>
<?php if (isset($msg)): ?>
  <fieldset>
    <legend>結果</legend>
    <span style="color:<?=$msg&#91;0&#93;?>;"><?=$msg&#91;1&#93;?></span>
  </fieldset>
<?php endif; ?>
  <form enctype="multipart/form-data" method="post" action="">
    <fieldset>
      <legend>画像ファイルを選択</legend>
      <input type="file" name="upfile" /><br />
      <input type="submit" value="送信" />
    </fieldset>
  </form>
</body>
</html>

exif_imagetype

is_int
Find whether the type of a variable is integer

$_FILES[”][‘error’]
PHP returns an appropriate error code along with the file array. The error code can be found in the error segment of the file array that is created during the file upload by PHP.
UPLOAD_ERR_OK, UPLOAD_ERR_INI_SIZE, UPLOAD_ERR_FORM_SIZE, UPLOAD_ERR_PARTIAL, UPLOAD_ERR_NO_FILE, UPLOAD_ERR_NO_TMP_DIR, UPLOAD_ERR_CANT_WRITE, UPLOAD_ERR_EXTENSION

exif_imagetype
Determine the type of an image
IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_PNG

sprintf
Return a formatted string

image_type_to_extension
Get file extension for image type

<?php
if (isset($_FILES&#91;'upfile'&#93;&#91;'error'&#93;) && is_int($_FILES&#91;'upfile'&#93;&#91;'error'&#93;)){
  try {
    // $_FILES&#91;'upfile'&#93;&#91;'error'&#93;の値を確認
    switch ($_FILES&#91;'upfile'&#93;&#91;'error'&#93;){
      case UPLOAD_ERR_OK:
        break;
      case UPLOAD_ERR_NO_FILE:
        throw new RuntimeException('ファイルが選択されていません');
      case UPLOAD_ERR_INI_SIZE:
      case UPLOAD_ERR_FORM_SIZE: // フォーム定義の最大サイズ超過
        throw new RuntimeException('ファイルサイズが大きすぎます');
      default:
        throw new RuntimeException('その他のエラーが発生しました');
    }

    // $_FILES&#91;'upfile'&#93;&#91;'mime'&#93;の値はブラウザ側で偽装可能なので、MIMEタイプを自前でチェック
    $type = @exif_imagetype($_FILES&#91;'upfile'&#93;&#91;'tmp_name'&#93;);
    if(!in_array($type, &#91;IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_PNG&#93;, true)) {
      throw new RuntimeException('画像形式が未対応です');
    }

    // ファイルデータからSHA-1ハッシュを取ってファイル名を決定し、ファイルを保存する
    $path = sprintf('./img/%s%s', sha1_file($_FILES&#91;'upfile'&#93;&#91;'tmp_name'&#93;), image_type_to_extension($type));
    if (!move_uploaded_file($_FILES&#91;'upfile'&#93;&#91;'tmp_name'&#93;, $path)){
      throw new RuntimeException('ファイル保存時にエラーが発生しました');
    }
    chmod($path, 0644);

    $msg = &#91;'green', 'ファイルは正常にアップロードされました'&#93;;
  } catch (RuntimeException $e){
    $msg = &#91;'red', $e->getMessage()];
  }
}

// XTHMLとしてブラウザに認識させる
// (IE8以外はサポート対象外)
header('Content-Type: application/xhtml+xml; charset=utf-8');
?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>画像アップロード</title>
</head>
<body>
<?php if (isset($msg)): ?>
  <fieldset>
    <legend>結果</legend>
    <span style="color:<?=$msg&#91;0&#93;?>;"><?=$msg&#91;1&#93;?></span>
  </fieldset>
<?php endif; ?>
  <form enctype="multipart/form-data" method="post" action="">
    <fieldset>
      <legend>画像ファイルを選択(GIF, JPEG, PNGのみ対応)</legend>
      <input type="file" name="upfile" /><br />
      <input type="submit" value="送信" />
    </fieldset>
  </form>
</body>
</html>

move_uploaded_file()

bool move_uploaded_file ( string $filename , string $destination )
This function checks to ensure that the file designated by filename is a valid upload file (meaning that it was uploaded via PHP’s HTTP POST upload mechanism). If the file is valid, it will be moved to the filename given by destination.

<?php
if($_FILES&#91;'file'&#93;){
  move_uploaded_file($_FILES&#91;'file'&#93;&#91;'tmp_name'&#93;, './img/test.jpg');
}
?>

<form action="./index.php" method="POST" enctype="multipart/form-data">
  <input type="file" name="faile">
  <input type="submit" value="ファイルをアップロードする">
</form>

php error

<?php
try{
  if(is_uploaded_file($_FILES&#91;'file'&#93;&#91;'tmp_name'&#93;)){
    move_uploaded_file($_FILES&#91;'file'&#93;&#91;'tmp_name'&#93;, './img/test.jpg');
  }
} catch(Exception $e){
  echo 'エラー:', $e->getMessage().PHP_EOL;
}
?>

<form action="./index.php" method="POST" enctype="multipart/form-data">
  <input type="file" name="file">
  <input type="submit" value="ファイルをアップロードする">
</form>

php form

php.init
file_uploads, post_max_size, upload_max_filesize, memory_limit, max_execution_time, upload_tmp_dir, max_file_uploads

Tells whether the file was uploaded via HTTP POST

Ajaxを使ってMySQLの更新をHTML側で自動更新

$(“”).empty();で、一旦データを空にして、setTimeout、countupで自動更新します。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="utf-8">
    <title>Ajax</title>

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
    <script>
    // setTimeout関数で2秒ごとに取得
    var countup = function(){
    $("#content").empty();
    $(document).ready(function(){
      // /**
      // * Ajax通信メソッド
      // * @param type
      // * @param url
      // * @param dataType
      // ** /
      $.ajax({
      type: "POST",
      url: 'json.php',
      dataType: "json",

      success: function(data, dataType)
      {
        if(data == null) alert('データが0件でした');

        var $content = $('#content');
        for (var i = 0; i<data.length; i++)
        {
          $content.append("<li>" + data[i].name + "</li>");
        }
      },
      error: function(XMLHttpRequest, textStatus, errorThrown)
      {
        alert('Error : ' + errorThrown);
      }
    });
  });
    setTimeout(countup, 2000);
  }
  countup();
    </script>
  </head>
  <body>
    <h1>sample</h1>
    <ul id="content"></ul>
  </body>
</html>

ページ閲覧中のオンラインユーザ表示方法

session_id()で、mysqlにセッションIDと時間を保存していき、mysql_num_rowsでセッション数が保存されている行をカウントし、一定時間経過したらセッションIDを削除します。

<?php
session_start();
$session=session_id();
$time=time();
$time_check=$time-300;

$host="localhost";
$username="dbuser";
$password="xxxx";
$db_name="online";
$tbl_name="online_user";

mysql_connect("$host", "$username", "$password") or die("could not connect to server.");
mysql_select_db("$db_name") or die("cannot select DB");

$sql="SELECT * FROM $tbl_name WHERE session='$session'";
$result=mysql_query($sql);
$count=mysql_num_rows($result);

// if count is 0, then enter the values
if($count=="0"){
  $sql1="INSERT INTO $tbl_name(session, time)VALUES('$session', '$time')";
  $result1=mysql_query($sql1);
  }
  // else update the values
  else {
    $sql2="UPDATE $tbl_name SET time='$time' WHERE session='$session'";
    $result2=mysql_query($sql2);
  }

  $sql3="SELECT * FROM $tbl_name";
  $result3=mysql_query($sql3);
  $count_user_online=mysql_num_rows($result3);
  echo "<b>Users Online: </b> $count_user_online ";

  //after 5 minutes, session will be deleted
  $sql4="DELETE FROM $tbl_name WHERE time<$time_check";
  $result4=mysql_query($sql4);

  mysql_close();

?>