PHP開発戦闘解析シリーズカタログ
- PHP開発の実践分析(1):mysql操作フィールド(マルチデータテーブルの複数フィールドの追加、削除、変更、追加)
- PHP開発の実践分析(2):Cookieの動的利用(設定、取得、削除、原理の好み推測、ショッピングカート呼び出し)
- php開発の実践分析(3):phpで変数が空(0、false、null)であることを判定する方法
- PHP開発の実践分析(4): PHP呼び出しカプセル化関数には、異なるディレクトリに対するファイルパス適応ソリューション($_SERVER['DOCUMENT_ROOT']と__DIR__マジック定数)が含まれています
- PHP開発の実践分析(5): ファイルとディレクトリの操作
- PHP開発の実践分析⑥:設定ファイルやキャッシュファイルの生成と呼び出し
- PHP開発の実践分析(7):mysqlライブラリ操作の高度な利用
- php開発の実践分析(8):mysqlクラスライブラリを操作するためのAPI開発の高度な使い方(フィールド操作、権限付与、日付フォーマット、クロステーブルクエリ、データサブテーブル)
PHP開発の実践分析9:ソリューションを利用してショートアドレスの共有を実現する
1. 短いアドレスを使用する理由
短い URL を使用する主な目的は、長い URL をより簡潔にし、覚えやすく、共有しやすくすることです。一般的な原因は次のとおりです。
-
美しく簡潔: 通常、長い URL には複数の文字とパラメータが含まれますが、短い URL では数文字に簡素化できるため、URL が短くすっきりします。これにより、ユーザー エクスペリエンスが向上し、Web サイトがより美しくなります。
-
覚えやすい: 長くて複雑な URL は、特にモバイル デバイスのユーザーにとって覚えにくいことがよくあります。通常、短いアドレスには簡潔な文字の組み合わせが使用されるため、覚えやすくなります。
-
共有が簡単: 短いアドレスは、ソーシャル メディア、SMS、チャット アプリなどの限られたスペースでの共有に適しています。長いアドレスは切り捨てられたり、行が折り返されたりして、ターゲット ページを正しく開けない可能性がありますが、短いアドレスを使用するとこの問題を回避できます。
-
実際のアドレスを隠す: 機密情報や秘密にしておく必要があるコンテンツの場合、短いアドレスを使用すると、実際のターゲット URL を隠すことができます。これにより、ある程度のセキュリティが強化され、ユーザーが長いアドレスに直接アクセスして機密情報を取得するのを防ぐことができます。
-
URLの統計とモニタリング:ショートアドレスサービスプロバイダーが提供する統計機能を使用すると、ショートアドレスのクリック数やコンバージョン率などのデータを追跡でき、データ分析やモニタリングに便利です。これは、マーケティング キャンペーンやプロモーション リンクなどに重要な影響を及ぼします。
つまり、短いアドレスを使用すると、ユーザー エクスペリエンスが向上し、URL が簡素化され、共有と統計が容易になるため、多くのシナリオで検討できます。
2. ショートアドレスを実現する方法
-
自己インクリメント型デジタル ショート コード: ハッシュ アルゴリズムに基づいて、長いリンクから短い文字列を生成し、短い文字列と長いリンクをデータベースに保存します。短いリンクを取得するには、短い文字列を通じてデータベースにクエリを実行して、対応する長いリンクを取得し、ユーザーを長いリンクにリダイレクトします。
-
データベースの自動インクリメント ID 変換: 長いリンクの ID を 62 に変換し、事前設定されたドメイン名と組み合わせて短いリンクを形成します。ショート リンクを取得する場合は、ショート リンク内の 62 ビット ID を介してロング リンクを取得し、ユーザーをロング リンクにリダイレクトします。
-
bit.ly、goo.gl などのサードパーティのショート リンク サービスを使用します。長いリンクをサービス プロバイダーに送信し、短いリンクを取得してデータベースに保存します。短いリンクを取得するには、短いリンクを通じてユーザーをサービス プロバイダーのインターフェイスにリダイレクトし、サービス プロバイダーがユーザーを長いリンクにリダイレクトさせます。
-
独自のショート リンク サービスに基づいて、分散 ID ジェネレーター (Snowflake など) を使用して一意の ID を生成し、それをショート リンクに変換します。ショートリンクを取得する際には、ショートリンク内の固有IDに基づいてロングリンクを取得し、ユーザーをロングリンクにリダイレクトします。
3. 開発実践例
1. 短いアドレスの使用方法
形式: https://test.com/t.php?t=21_1
/*
* 短地址系统
* 为方便微信内传播,直接使用ID进行短域名缩写
* 参数方式:$Id_0
* $Id为加密方式密文
* _分割符号
* 0,项目链接,1,培训链接,2单位邀请注册
* By Woodcutter 2023-05-17
*/
2.パラメータを取得する
$t = get_param('t');
$pid = explode("_", $t)[0];
$fromUrl = explode("_", $t)[1];
if (stripos($t, '_') == false) {
die("参数错误,无法正常访问");
}
3.ジャンプ条件判定
//判断跳转;
switch ($fromUrl) {
case "0";//项目分享
$row = $db->fetch('project', 'project_id', array('project_id' => $pid), ' project_id DESC');
if ($row['project_id']) {
$url = 'app.php?m=Course&a=courseList&act=list&project_id=' . $row['project_id'];
} else {
die("项目信息不存在,无法访问");
}
break;
case "1";//培训分享
$row = $db->fetch('course', 'project_id,course_id', array('course_id' => $pid), ' course_id DESC');
if ($row['course_id']) {
$url = 'app.php?m=Course&a=courseDetails&act=show&project_id=' . $row['project_id'] . '&course_id=' . $row['course_id'];
} else {
die("培训信息不存在,无法访问");
}
break;
case "2";//PC端单位分享
$row = $db->fetch('depart', 'depart_id,depart_name,depart_no,province,city,area', array('depart_id' => $pid), ' depart_id DESC');
if ($row['depart_id']) {
$url = 'index.php?m=Index&a=register&depart_id=' . $row['depart_id'] . '&user_depart=' . UrlEncode($row['depart_name']) . '&depart_no=' . UrlEncode($row['depart_no']) . '&province=' . UrlEncode($row['province']) . '&city=' . UrlEncode($row['city']) . '&area=' . UrlEncode($row['area']);
} else {
die("单位信息不存在,无法访问");
}
break;
case "3";//手机端单位分享
$row = $db->fetch('depart', 'depart_id,depart_name,depart_no,province,city,area', array('depart_id' => $pid), ' depart_id DESC');
if ($row['depart_id']) {
$url = 'app.php?m=Index&a=register&depart_id=' . $row['depart_id'] . '&user_depart=' . UrlEncode($row['depart_name']) . '&depart_no=' . UrlEncode($row['depart_no']) . '&province=' . UrlEncode($row['province']) . '&city=' . UrlEncode($row['city']) . '&area=' . UrlEncode($row['area']);
} else {
die("单位信息不存在,无法访问");
}
break;
case "4";//签到二维码分享
$row = $db->fetch('course', 'project_id,course_id', array('course_id' => $pid), ' course_id DESC');
if ($row['course_id']) {
$url = 'app.php?m=Course&a=courseCheck&act=check&project_id=' . $row['project_id'] . '&course_id=' . $row['course_id'];
} else {
die("培训信息不存在,无法访问");
}
break;
default:
die("短域名参数错误,无法正常访问。");
@時々漏れます