コンピューター ウィンドウズ インターネット

災害日はreghtmlになります。 ドメイン名の更新日の監視。 それでは、今後の作業のためにメインスクリプトを作成しましょう。

良い一日の友達! PHPでのユーザー登録を見てみましょう。 まず、ユーザー登録の条件を定義しましょう。

  • アルゴリズムを使用してパスワードを暗号化します MD5
  • パスワードは「ソルト」されます
  • ログインがビジーかどうかを確認します
  • 手紙によるユーザーの活性化。
  • でのデータの書き込みと保存 MySQL DBMS

このスクリプトを作成するには、ユーザー登録とは何かを理解する必要があります。 ユーザー登録とは、実際のユーザーからデータを受け取り、データを処理して保存することです。

説明するなら 簡単な言葉でその場合、登録とは、この場合、ユーザーを承認できる特定のデータの記録と保存にすぎません。これは、ログインとパスワードです。

承認とは、特定の個人または個人のグループに特定のアクションを実行する権利を付与すること、およびこれらのアクションを実行しようとするときにこれらの権利を検証するプロセスです。 簡単に言えば、承認を使用して、Webサイト上のこのコンテンツまたはそのコンテンツへのアクセスを区切ることができます。

承認付きの登録を実装するためのスクリプトディレクトリの構造を考えてみましょう。 スクリプトを論理コンポーネントに分割する必要があります。 登録モジュールと承認モジュールを別のディレクトリに配置しました。 また、データベースへの接続を別のディレクトリに配置します。 MySQL、カスタム関数を含むファイル、スタイルファイル CSSと私たちのテンプレート HTML..。 この構造により、スクリプトをすばやくナビゲートできます。 たくさんのモジュールなどがある大規模なサイトがあると想像してください。 そして、秩序がなければ、そのような混乱の中で何かを見つけることは非常に難しいでしょう。

すべてのデータをに保存するので MySQL DBMS次に、登録データを格納する小さなテーブルを作成しましょう。

まず、データベースにテーブルを作成する必要があります。 テーブルは呼び出されます bez_regどこ ベズはテーブルプレフィックスであり、 regテーブル名。

テーブル構造: bez_reg

---テーブル構造 `bez_reg` --CREATE TABLE IF NOT EXISTS` bez_reg`(` id` int(11)NOT NULL AUTO_INCREMENT、 `login` varchar(200)NOT NULL、` pass` varchar(32)NOT NULL、 `salt `varchar(32)NOT NULL、` active_hex` varchar(32)NOT NULL、 `status` int(1)NOT NULL、PRIMARY KEY(` id`))ENGINE = MyISAM DEFAULT CHARSET = utf8 AUTO_INCREMENT = 1;

それでは、今後の作業のためにメインスクリプトを作成しましょう。

INDEX.PHPファイル

CONFIG.PHPファイル

"); ?>

404.htmlファイル

エラー404

エラー404

ページで404エラーが発生しました

戻る


BD.PHPファイル

INDEX.HTMLファイル

電子メールアクティベーションを使用したPHPMySQLユーザー登録



FUNCT.PHPファイル

"。" \ n "; if(is_array($ data))(foreach($ data as $ val)$ err。="

  • "。$ val。"
  • "。" \ n ";)else $ err。="
  • "。$データ。"
  • "。" \ n "; $ err。=""。" \ n "; return $ err;)/ ** MySQLクエリの単純なラッパー* @ param string $ sql * / function mysqlQuery($ sql)($ res = mysql_query($ sql); / *結果の確認Thisは、MySQLに送信された実際のクエリとエラーを示しています。デバッグに便利です。* / if(!$ res)($ message = "Invalid query:"。mysql_error()。 "\ n"; $ message。= "完全なクエリ: "。$ sql; die($ message);)return $ res;)/ **単純なソルトジェネレータ* @ param string $ sql * / function salt()($ salt = substr(md5(uniqid()) )、-8); $ saltを返す;)

    登録の作成に取り掛かりましょう。 まず、ユーザーがデータを入力して処理できるように、登録フォームテンプレートを作成する必要があります。 次に、フォームハンドラー自体を作成する必要があります。これにより、入力されたユーザーデータが正しいかどうかがチェックされます。 データが正常に検証された後、データをデータベースに書き込み、ユーザーに手紙を送信してアカウントをアクティブ化します。

    REG.PHPファイル

    登録に成功しました。 アカウントを有効にしてください!!"; //アカウントをアクティブ化if(isset($ _ GET [" key "]))(//キーを確認$ sql =" SELECT * FROM` "。BEZ_DBPREFIX。" Reg` WHERE` active_hex` = ""。 Escape_str($ _GET ["key"])。 "" "; $ Res = mysqlQuery($ sql); if(mysql_num_rows($ res)== 0)$ err ="アクティベーションキーが正しくありません! "; //エラーをチェックし、ユーザーに表示if(count($ err)> 0)echo showErrorMessage($ err); else(//ユーザーのアドレスを取得$ row = mysql_fetch_assoc($ res); $ email = $ row ["login "]; //アカウントユーザーをアクティブ化$ sql =" UPDATE` "。BEZ_DBPREFIX。" reg` SET `status` = 1 WHERE` login` =" "。$ email。" ""; $ res = mysqlQuery($ sql ); //アクティブ化するためのメールを送信$ title = "(!LANG:http://サイトのアカウントが正常にアクティブ化されました"; $message = "Поздравляю Вас, Ваш аккаунт на http://сайт успешно активирован"; sendMessageMail($email, BEZ_MAIL_AUTOR, $title, $message); /*Перенаправляем пользователя на нужную нам страницу*/ header("Location:". BEZ_HOST ."less/reg/?mode=reg&active=ok"); exit; } } /*Если нажата кнопка на регистрацию, начинаем проверку*/ if(isset($_POST["submit"])) { //Утюжим пришедшие данные if(empty($_POST["email"])) $err = "Поле Email не может быть пустым!"; else { if(!preg_match("/^!} [メール保護](+ \。)+(2,6)$ / i "、$ _POST [" email "]))$ err ="電子メールが正しく入力されていません "。" \ N ";)if(empty($ _ POST [ "pass"]))$ err = "パスワードフィールドを空にすることはできません"; if(empty($ _ POST ["pass2"]))$ err = "パスワードフィールドを空にすることはできません"; //エラーをチェックしますif(count($ err)> 0)echo showErrorMessage($ err); else(/ *入力されたデータのチェックを続行パスワードの一致をチェック* / if($ _ POST ["pass"]!= $ _POST ["pass2"])$ err = "パスワードが一致しません"; //エラーをチェックし、ユーザーに表示しますif(count($ err)> 0)echo showErrorMessage($ err); else(/ *チェックデータベースにそのようなユーザーがいる場合* / $ sql = "SELECT` login` FROM`"。BEZ_DBPREFIX。 "reg` WHERE` login` =" "。escape_str($ _ POST [" email "])。" " "; $ res = mysqlQuery($ sql); if(mysql_num_rows($ res)> 0)$ err ="申し訳ありませんがログイン: "。$ _ POST [" email "]。"ビジー! "; //エラーをチェックしてユーザーに表示if(count($ err)> 0)echo showErrorMessage($ err); else(//ソルトのハッシュを取得$ salt = salt(); / /パスワードをソルトします$ pass = md5(md5($ _ POST ["pass"])。$ salt); / *問題がなければ、データベースにデータを書き込みます* / $ sql = "INSERTINTO`"。BEZ_DBPREFIX 。 "reg` VALUES(" "、" ".escape_str($ _ POST [" email "])。" "、" "。$ pass。" "、" "。$ salt。" "、" "。md5( $ salt)。 ""、0) "; $ res = mysqlQuery($ sql); //アクティブ化するためのメールの送信$ url = BEZ_HOST。" less / reg /?mode = reg&key = "。md5($ salt ); $ title = "(!LANG:http:// siteでの登録"; $message = "Для активации Вашего акаунта пройдите по ссылке ". $url .""; sendMessageMail($_POST["email"], BEZ_MAIL_AUTOR, $title, $message); //Сбрасываем параметры header("Location:". BEZ_HOST ."less/reg/?mode=reg&status=ok"); exit; } } } } ?>!}

    REG_FORM.HTMLファイル

    電子メールアクティベーションを使用したPHPMySQLユーザー登録

    Eメール *:
    パスワード *:
    パスワードの確認 *:

    アイコンのあるフィールド *必要です

    ユーザーを登録する準備ができたので、認証を作成します。 ユーザー認証用のフォームを作成し、認証フォームハンドラーを作成して、最後にスクリプトを作成しましょう。 show.phpこれにより、システムで許可されているかどうかがわかります。

    AUTH.PHPファイル

    0)echo showErrorMessage($ err); else(/ *データベースからフェッチクエリを作成して、ユーザーの信頼性を確認します* / $ sql = "SELECT * FROM`"。BEZ_DBPREFIX。 "reg` WHERE` login` =" ".escape_str($ _ POST [" email "])。" "AND` status` = 1"; $ res = mysqlQuery($ sql); //ログインが一致する場合は、パスワードを確認しますif(mysql_num_rows($ res)> 0)(//データを取得するテーブル$ row = mysql_fetch_assoc($ res); if(md5(md5($ _ POST ["pass"])。$ row ["salt"])== $ row ["pass"])($ _SESSION [" user "] = true; //パラメータヘッダーをリセットします(" Location: "。BEZ_HOST。" Less / reg /?mode = auth "); exit;)else echo showErrorMessage(" Wrong password! ");)Else echo showErrorMessage( "ログイン "。$ _ POST [" email "]。"見つかりません! ");))?>

    最新バージョンのPHPをお持ちの方のために、このスクリプトを使用して投稿します。 PDO以来 拡大 MySQL非推奨になり、新しいPHPバージョンから削除されました。 登録と承認をダウンロードするphpmysql pdo

    アーカイブは2015年2月24日に更新されました。

    注意:このスクリプトを次のようなローカルサーバーで使用している場合 デンワー,XAMPP、その後、あなたはあなたのメールボックスへの手紙を待つべきではありません。 文字は空白です sendmail..。 V デンワーあなたは途中でそれらを見つけることができます Z:\ tmp \!Sendmail \これらのファイルは、任意のメールクライアントで開くことができます。

    .RU、.РФ、およびSUドメイン登録サービスの更新が有効期限までに支払われない場合、Whoisサービスのpayed-tillフィールドで指定された日にサービスが一時停止されます(ドメイン委任はキャンセルされます)。 シャットダウン予定日が週末または休日に当たる場合、ドメインのシャットダウンは週末後の最初の営業日に繰り越されます。

    ドメイン委任の一時停止後、ドメインへのすべてのhttpリクエストは、サービスの提供の一時的な失敗に関する情報とともにサービスページにリダイレクトされます。 .RUおよび.РФドメインの管理者は、任意の形式でアドレスにリクエストを送信することにより、ドメイン名登録期間が満了する前にサービスページへのリダイレクトを拒否できます。

    サービスの有効期限が切れてから30日以内(優先更新期間中)、. RU、.РФ、または.SUドメインの登録者は、更新の料金を支払う機会を保持します。

    支払いの場合、サービスの提供が再開されます。

    不払いのためのレジストリからのドメイン.RU、.SU、.РФの削除

    ドメイン登録の更新が終了後30日以内(優先更新期間中)に支払われない場合、登録はキャンセルされます(ドメインは解放されます)。

    登録期間の満了後、ドメインに関する情報の自由日付フィールドに公開されます。

    RU-CENTERは、計画された解放日の日付からいつでも.SUドメインを削除できます。 これが発生しない場合、ドメインはテクニカルセンターによって自動的に削除されます。

    先制更新期間中、.RUおよび.РФドメイン名はキャンセルされません。

    テクニカルセンターによるドメイン削除の日付

    ドメイン.RU、.РФ、およびSUは、削除予定日(自由日)に対応する日にテクニカルセンターによって削除されます。

    ドメイン.RU、.РФ、または.SUは、削除日が週末または週末の翌日に当たる場合、週末の2営業日目に削除されます。

    テクニカルセンターでドメインを削除する手順が機能し始めます。

    • ドメインの場合.RU、.РФ17:00(MSK)、
    • ドメインの場合。19:30(MSK)のSU。

    リリースの対象となる.RU、.SU、.РФドメインのRU-CENTERを介した登録

    レジストリから解放されているドメインの登録申請は、ドメインがレジストリから解放される前に、www..site / auction / serverで提出できます。

    .RUおよび.РФドメインの場合、RUおよびRFドメインに解放されたドメインを登録するサービスに従って、ドメインがレジストリから解放される日の30日前にアプリケーションの受け入れが開始されます。

    SUドメインの場合-ドメインSU、COM.RU、NET.RU、ORG.RU、PP.RU、およびジオドメインでの解放されたドメインの登録サービスに従って、ドメインがレジストリから解放される前の任意の時点。

    ドメイン.RU、.SU、.РФの場合-ドメインがページのWebインターフェイスを介してレジストリから削除された日。

    • 取られた措置についての手紙は、申請者の連絡先に送られます。

    2.国際および外国

    有効期間が満了する前にサービスの更新が支払われない場合、の有効期限フィールドで指定された日付の翌日、サービスの提供が一時停止されます(ドメイン委任はキャンセルされます)。 シャットダウン予定日が週末または休日に当たる場合、ドメインのシャットダウンは週末の2営業日後に繰り越されます。

    サービスの有効期限が切れてから30日以内に、ドメイン管理者は更新の料金を支払う機会を保持します。 支払いの場合、サービスの提供が再開されます。

    国際および外国の国内ドメインのレジストリからドメインを削除する

    ドメイン登録の更新がサービスの有効期限から30日以内に支払われない場合、RU-CENTERはレジストリでドメイン削除手順を開始します。 削除日が週末または祝日である場合、ドメイン削除手順の開始は週末の2営業日目に延期されます。

    レジストリ内のドメインを削除する手順は35日かかります。 例外は次のとおりです。

    • .HNドメイン。削除は15日間続き、この期間中はドメインを復元または更新できません。
    • ドメイン.NAME。登録期間の満了後30日後に削除されます。
    • ドメイン.KZ。登録期間の満了後20日後に削除されます。

    この場合、30日間のレジストリは、ドメインに対応するステータスを次のように設定します。
    .NET、.COM、.CC、.TV、.AG、.BZ、.LC、.MN、.SC、.VC-RedemptionPeriod、
    .BIZ、.TEL-削除待ち、
    .INFO、.ORG、.ME、.MOBI、.AERO、.TRAVEL、.XXX、.PRO-PendingDelete復元可能。

    30日の期間の開始日は、次のフィールドに表示されます。
    .NET、.COM、.CC、.TV、.AG、.BZ、.HN、.LC、.MN、.SC、.VCドメインの更新日
    ドメインの最終更新日-BIZ、.TEL、または
    最終更新日-INFO、.ORG、.ME、.MOBI、.AERO、.TRAVEL、.XXX、.PRO。

    ドメインリカバリ

    削除手順の開始から25日以内に、ドメイン管理者の要求に応じて、ドメインを復元および更新できます(.HN、NAME、.KZを除く)。

    ドメインが復元および更新されていない場合、RedemptionPeriod(PendingDeleteまたはPendingDeleteRestorable)の終了から5日後にレジストリから削除されます。 この5日間(レジストリのドメインステータス-PendingDelete)、ドメインを復元、更新、または登録することはできません。

    ドメインがレジストリから削除された後、ドメインは誰でも登録できます。

    3.第3レベルのドメイン

    不払いのためのドメイン委任の削除

    サービスの更新が有効期間の終了前に支払われない場合、Whoisサービスのpayed-tillフィールドで指定された日付の翌日、サービスの提供が一時停止されます(ドメイン委任はキャンセルされます)。 .NET.RU、.ORG.RU、および.PP.RUドメインの場合、Whoisサービスのpayed-tillフィールドで指定された日にサービスが一時停止されます(ドメインの委任はキャンセルされます)。

    シャットダウン予定日が週末または休日に当たる場合、ドメインのシャットダウンは週末の2営業日後に繰り越されます。

    ドメイン委任の一時停止後、.NET.RU、.ORG.RU、および.PP.RUドメインへのすべてのhttpリクエストは、.NET.RU、.ORG.RU、および.PP.RUの公式Webサイトにリダイレクトされます。ドメイン管理者、TsVKS "MSK-IX"、委任の終了の理由に関する情報。

    サービスの有効期限が切れてから30日以内(優先更新期間)でも、ドメイン管理者は更新の料金を支払うことができます。 支払いの場合、サービスの提供が再開されます。

    プリエンプティブ更新期間中、.NET.RU、.ORG.RU、および.PP.RUドメインはキャンセルされません。

    サービス更新の支払いが優先更新期間の最終営業日に行われた場合、RU-CENTERは更新の成功について責任を負いません。

    ドメインの削除

    ドメイン名登録の有効期限から30暦日以内に更新されない場合、第3レベルのドメイン名の登録は取り消されます(ドメインは解放されます)。

    ドメインのリリース予定日登録期間の満了後、RU-CENTERWhoisサービスのドメイン情報の自由日付フィールドに公開されます。 この場合、削除日(自由日+1)が非稼働日または非稼働日の翌日(それ以外の場合)に該当しない場合は、リリース予定日より1日遅れて削除されます。削除は週末の2営業日後に行われます)。

    .NET.RU、.ORG.RU、および.PP.RUドメインは、削除予定日(自由日)に対応する日にテクニカルセンターによって削除されます。 ドメイン.NET.RU、.ORG.RU、および.PP.RUは、削除日が週末または週末の翌日に当たる場合、週末の2営業日目に削除されます。

    リリースされる第3レベルドメインのRU-CENTERを介した登録

    レジストリまたは.COM.RUドメインからの空のドメインの登録申請は、サービス「空のドメインの登録」に従って、ドメインがレジストリから解放される前であればいつでもwww..site / auction / serverで送信できます。 .COM.RUドメインとジオドメイン」。

    ドメイン削除の日に、ドメイン登録サービスの申し込みは、ページのWebインターフェイスを介して受け付けられます。

    • 処理時にドメインが空いている場合、アプリケーションは満たされます。
    • 申請者の連絡先メールアドレスに、取られた措置についての手紙が送られます。

    ドメイン名の更新日の監視は、過小評価してはならないアクションです。 私はすでにそれについて書きました、そして今、別の一般的な問題に対処しましょう-ドメイン名登録期間の予期しない満了。 今日のすべてのレジストラは、これについて事前に(通常は数回)思い出させているようです。 しかし、問題は、これらの文字が読まれないか、何らかの形でスパムになってしまうことです。 一般的に、ドメイン名の登録期間が終了していることに誰もが気付いているわけではありません。 その結果、サイトが機能せず、人々はその理由を理解できず、何が起こっているのかを理解するために多くの時間を費やすことがあります。 その間、ドメイン名はDNSキャッシュから消え、数日後(または、さまざまな要因によってはそれ以前)、訪問者はサイトにアクセスできなくなります。 ドメイン名登録の有効期限を監視する方法を見てみましょう。 当然、bashスクリプト。

    ドメイン名登録日を取得する方法

    最も簡単なオプションは、グローバルwhoisデータベースを使用することです。 組織、担当者、連絡先、登録日、登録有効期限などのドメイン名に関する情報を保存します。 そして、これはまさに私たちが必要としているものです。 例として人気のあるドメインを取り上げましょう。 yandex.ruとします。 このドメインに関してwhoisデータベースに保存されている情報は次のとおりです。

    $ whois yandex.ru%RIPNのWhoisサービスにクエリを送信することにより、%次の利用規約に従うことに同意したことになります。%http://www.ripn.net/about/servpol.html#3.2(ロシア語) %http://www.ripn.net/about/en/servpol.html#3.2(英語)。ドメイン:YANDEX.RU nserver:ns1.yandex.ru。213.180.193.1、2a02:6b8 :: 1 nserver: ns2.yandex.ru.93.158.134.1、2a02:6b8:0:1 :: 1状態:登録済み、委任済み、検証済み組織:YANDEX、LLC.registrar:RU-CENTER-RU admin-contact:https:// www。 nic.ru/whois作成:1997.09.23有料まで:2017.10.01無料-日付:2017.11.01ソース:TCI最終更新日2017.01.03 05:46:31 MSK

    関心のあるフィールドは「paid-till」です。これは、ドメインの支払いが完了するまでの日付です。

    ドメイン名の更新日の監視は、証明書の監視とほぼ同じ方法で行いますが、はるかに簡単です。 ドメインデータを取得し、登録の有効期限を含むフィールドを探します。存在する場合(このドメインのwhoisデータが閉じられていない場合)、この日付を取得し、今日の日付を取得して、日数の差を表示します。 必要に応じて、たとえば登録終了までの残り日数が30日未満の場合は、手紙の送信を追加できます。 しかし、それはそれほど単純ではありません。 少なくとも3種類の登録有効期限レコードがあるためです。 最初は次のようになります。

    支払われるまで:2017.10.01

    2番目は次のようになります。

    レジストラ登録の有効期限:2020-09-13T21:00:00-0700

    そして3番目は次のようになります:

    レジストリの有効期限:2018-05-11T04:00:00Z

    したがって、3つのオプションすべてを提供する必要があります。 または、4番目がある場合は、4番目です。 とりあえず、この3つを扱いましょう。

    スクリプトは次のようになります。

    #!/ bin / bash#パラメータが指定されていない場合は、ヒントを表示して終了しますif ["$ 1" == ""] then cat<< EOF Script that monitors how many days left until domain registration ends. Usage: $(basename $0) domain.name EOF exit fi # Получаем строку, содержащую дату окончания регистрации PAIDTILL=$(whois $1 | grep "paid-till\|Registrar Registration Expiration Date\|Registry Expiry Date") # Если такая строка не найдена, выходим с ошибкой if [ -z "$PAIDTILL" ] then echo "Registration end date is not available in whois database" exit 1 else # Если дата выглядит как ГГГГ.ММ.ДД, то добавляем 00:00:00 в конец [[ "$PAIDTILL" =~ "paid-till" ]] && PAIDTILL=${PAIDTILL//./-}" 00:00:00" # Удаляем из строки всё до двоеточия, само двоеточие # плюс автоматически будут удалены пробелы PAIDTILL=${PAIDTILL#*:} # Получаем текущую дату CURRENTDATE=$(date "+%Y-%m-%d %H:%M:%S") # Находим разницу между датами, получаем количество оставшихся дней DAYS_LEFT=$((($(date -d "$PAIDTILL" +%s) - $(date -d "$CURRENTDATE" +%s)) / 86400)) # Выводим, сколько дней осталось echo $DAYS_LEFT days left fi

    この記事の執筆時点でのさまざまなドメインに対するこのスクリプトの出力は次のとおりです。

    $ ./check-dn-reg.shlinux.org残り492日$。/ check-dn-reg.sh yahoo.com残り2206日$。/ check-dn-reg.shyandex.ru残り270日$。 /check-dn-reg.shgoogle.com残り1349日$。/ check-dn-reg.shok.ru残り331日$。/ check-dn-reg.shvk.com残り170日$。/ check -dn-reg.shlinux.org残り492日$。/ check-dn-reg.shlinux.org.ru残り345日

    同意します、それは快適に見えます。 サイズがわずか660バイトのスクリプトによるドメイン名更新日の監視。 NagiosまたはZabbixを使用したモニタリングですでに使用できます。

    追加、コメントがある場合は、コメントに書き込んでください。