サンプル・プログラムの実行例
使い方は、URL欄にURLを入力し、[短縮]ボタンを押下するだけというシンプルなものだ。
目次
サンプル・プログラム
| shortURL.php | サンプル・プログラム本体。 |
| pahooInputData.php | データ入力に関わる関数群。 使い方は「数値入力とバリデーション」「文字入力とバリデーション」などを参照。include_path が通ったディレクトリに配置すること。 |
| バージョン | 更新日 | 内容 |
|---|---|---|
| 2.3.0 | 2026/01/11 | PHP8.5対応:curl_closeを使わない |
| 2.2.0 | 2025/08/13 | .pahooEnv 導入 |
| 2.1.0 | 2021/04/29 | pahooInputData.php 導入 |
| 2.0 | 2021/04/29 | bit.ly API v4対応, PHP8対応 |
| 1.1 | 2017/04/08 | PHP7 対応 |
| バージョン | 更新日 | 内容 |
|---|---|---|
| 2.0.1 | 2025/08/11 | getParam() bug-fix |
| 2.0.0 | 2025/08/11 | pahooLoadEnv() 追加 |
| 1.9.0 | 2025/07/26 | getParam() 引数に$trim追加 |
| 1.8.1 | 2025/03/15 | validRegexPattern() debug |
| 1.8.0 | 2024/11/12 | validRegexPattern() 追加 |
bit.ly 利用準備
取得したアクセストークンは、.pahooEnv に設定するか、定数 BITLY_TOKEN に直接代入する。
bit.ly によるURL短縮
入力パラメータ(IN)をPOST(JSON形式)で渡し、出力結果(OUT)はJSONで戻るというAPIである。今回はXMLで戻るようにする。
| URL |
|---|
| https://api-ssl.bitly.com/v4/shorten |
| フィールド名 | 要否 | 内 容 |
|---|---|---|
| long_url | 必須 | 短縮したいURL |
| domain | ドメイン | bit.ly固定 |
解説:定数など
shortURL.php
55: // 各種定数(START) ===========================================================
56:
57: // 表示幅(ピクセル)
58: define('WIDTH', 600);
59:
60: // URLの初期値
61: define('DEF_URL', 'https://www.pahoo.org/');
62:
63: // bit.lyアクセストークン
64: // https://www.pahoo.org/e-soul/webtech/php06/php06-01-02.shtm#bitly
65: // .pahooEnv ファイルもしくは下記定数に直接記入する.
66: if (isset($_ENV['PAHOO_BITLY_TOKEN'])) {
67: define('BITLY_TOKEN', $_ENV['PAHOO_BITLY_TOKEN']);
68: } else {
69: define('BITLY_TOKEN', '');
70: }
71:
72: // URL短縮API【変更不可】
73: define('BITLYv4_SHORTEN', 'https://api-ssl.bitly.com/v4/shorten');
74:
75: // 各種定数(END) =============================================================
解説:URLバリデーション
pahooInputData.php
471: /**
472: * URLバリデーションを行う.
473: * RFC 1738 Uniform Resource Locators にマッチするかどうかを照合する。
474: * @参考URL https://www.pahoo.org/e-soul/webtech/php05/php05-02-01.shtm
475: * @param string $url url(http(s)を含む)
476: * @param string $errmsg エラーメッセージを格納する
477: * @return bool TRUE:成功/FALSE:失敗
478: */
479: function validURL($url, &$errmsg) {
480: $patterns[] = '/^https?\:\/\/[\-_\.\!\~\*\'\(\)a-zA-Z0-9\;\/\?\:\@\&\=\+\$\,\%\#]+$/i';
481: $errmsg = '';
482:
483: $res = validString($url, $errmsg, 1, 9999, TRUE, $patterns);
484: if ($errmsg == '受容できない文字が含まれています') {
485: $errmsg = 'URLではありません';
486: }
487:
488: return $res;
489: }
解説:bit.ly API 呼び出し
shortURL.php
157: /**
158: * bit.ly API 呼び出し
159: * @param string $url リクエストURL
160: * @param array $header HTTP HEADER変数を格納した連想配列("変数名"=>"値")
161: * @param array $post POST変数を格納した連想配列("変数名"=>"値")
162: * @return string 取得したコンテンツ/FALSE 取得エラー
163: */
164: function callBitlyAPI($url, $header, $post) {
165: // cURL送信
166: $curl = curl_init();
167: curl_setopt($curl, CURLOPT_URL , $url);
168: curl_setopt($curl, CURLOPT_HEADER, 1) ;
169: curl_setopt($curl, CURLOPT_POST, TRUE);
170: curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); // 結果を文字列で
171: curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($post));
172: curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
173: curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
174: curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
175: curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
176: curl_setopt($curl, CURLOPT_TIMEOUT, 5);
177: $res1 = @curl_exec($curl);
178: $res2 = @curl_getinfo($curl);
179: // PHP8.5:非推奨関数
180: if (PHP_VERSION_ID < 80500) {
181: curl_close($curl);
182: }
183:
184: // 結果処理
185: if ($res1 != FALSE) {
186: $json = substr($res1, $res2['header_size']);
187: } else {
188: $json = FALSE;
189: }
190:
191: return $json;
192: }
入力パラメータはJSON形式に変換してからPOST渡しする必要がある。配列引数を使って渡す。
また、HTTP HEADER として、アクセストークン と Content-Typeを指定してやる必要がある。こちらも配列引数で指定するようにした。
解説:URLを短縮する
shortURL.php
194: /**
195: * URLを短縮する
196: * @param string $url 短縮したいURL
197: * @param string $token アクセストークン
198: * @param string $errmsg エラーメッセージ格納用
199: * @return string 短縮URL
200: */
201: function bitlyShortenURL($url, $token, &$errmsg) {
202: $api = BITLYv4_SHORTEN;
203: $post = array(
204: 'long_url' => $url,
205: 'domain' => 'bit.ly'
206: );
207: $header = array(
208: 'Authorization: Bearer ' . $token,
209: 'Content-Type: application/json'
210: );
211:
212: // URL短縮
213: $json = @callBitlyAPI(BITLYv4_SHORTEN, $header, $post);
214: $items = json_decode($json);
215: // エラーチェック
216: if ($items == FALSE) {
217: $errmsg = 'bit.ly APIを利用できません';
218: return FALSE;
219: } else if (isset($items->link)) {
220: $res = (string)$items->link;
221: } else {
222: $errmsg = 'bit.ly API -- GUIDを取得できません';
223: return FALSE;
224: }
225:
226: return $res;
227: }
ユーザー関数 callBitlyAPI の戻り値を json_decode で展開し、エラーチェックしたのち、短縮URLを戻す。
参考サイト
- 各種WebAPIの登録方法 - bit.ly:ぱふぅ家のホームページ
- PHPで短縮URLを元に戻す:ぱふぅ家のホームページ
- bit.ly
- bit.ly API

今回は、PHPで bit.lyを利用し、入力したURLを短縮するプログラムを作ってみることにする。
(2026年1月11日)PHP8.5対応:curl_closeを使わない
(2024年10月9日)pahooInputData.php 導入