目次
サンプル・プログラムの実行例
サンプル・プログラムのダウンロード
| .pahooEnv | クラウドサービスを利用するためのアカウント情報などを記入する .env ファイル。 使い方は「各種クラウド連携サービス(WebAPI)の登録方法」を参照。include_path が通ったディレクトリに配置すること。 |
| getDropBox.php | サンプル・プログラム本体。 |
| pahooInputData.php | データ入力に関わる関数群。 使い方は「数値入力とバリデーション」「文字入力とバリデーション」などを参照。include_path が通ったディレクトリに配置すること。 |
| pahooDropboxAPI.php | Dropbox APIクラス pahooDropboxAPI。 Dropbox APIクラスの使い方は「PHPで Dropboxのファイル取得」を参照。include_pathが通ったディレクトリに配置のこと。 |
| バージョン | 更新日 | 内容 |
|---|---|---|
| 1.1 | 2022/02/12 | PHP8対応,リファラ・チェック改良 |
| 1.0 | 2018/09/15 |
| バージョン | 更新日 | 内容 |
|---|---|---|
| 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() 追加 |
| バージョン | 更新日 | 内容 |
|---|---|---|
| 1.3.0 | 2025/12/20 | PHP8.5対応:curl_closeを実行しないようにした |
| 1.2.0 | 2025/11/29 | .pahooEnv導入 |
| 1.1 | 2022/02/12 | PHP8対応 |
| 1.0 | 2018/09/14 | 初版 |
つづいて Dropbox API Explorer にアクセスし、左ペインからどれかAPIを選ぶと、下図の画面になる。
PHPプログラムでは、このアクセス・トークンを使ってAPIにアクセスする。
同梱の環境ファイル ".pahooEnv" の定数 PAHOO_DROPBOX_TOKEN にアクセス/トークンの値を記入すること。
解説:pahooDropboxAPI クラス
PHPのクラスについては「PHPでクラスを使ってテキストの読みやすさを調べる」を参照されたい。
pahooDropboxAPI.php
17: // DropboxAPI クラス ========================================================
18: class pahooDropboxAPI {
19: public $webapi; // 直前に呼び出したAPI URL
20: public $error; // エラーフラグ(エラーがあればTRUE)
21: public $errmsg; // エラーメッセージ(APIが返す error_summary の内容)
22: public $responses; // 直前の結果
23:
24: // Dropbox API
25: // https://www.pahoo.org/e-soul/webtech/php06/php06-64-01.shtm#preparation 参照
26: public $DROPBOX_TOKEN = '';
27:
28: /**
29: * コンストラクタ
30: * @param なし
31: * @return なし
32: */
33: function __construct() {
34: if (isset($_ENV['PAHOO_DROPBOX_TOKEN'])) {
35: $this->DROPBOX_TOKEN = $_ENV['PAHOO_DROPBOX_TOKEN'];
36: }
37:
38: $this->webapi = '';
39: $this->error = FALSE;
40: $this->errmsg = '';
41: $this->responses = NULL;
42:
43: // PHPバージョン・チェック
44: exitIfLessVersion('5.0.0');
45: }
解説:Dropbox API リクエスト
リクエストは全てhttps通信で処理されることから、「PHPセキュリティ対策:SSL通信を行う」で紹介した cURL 関数群を用いる。
pahooDropboxAPI.php
83: /**
84: * Dropbox API v2:アクセストークンを用いたリクエスト
85: * @param string $url リクエストURL
86: * @param array $argv Dropbox-API-Argに渡すパラメータ配列(省略可能)
87: * @param array $post POSTに渡すパラメータ配列(省略可能)
88: * @param string $upload アップロードするデータ
89: * @return bool TRUE:リクエスト成功/FALSE:失敗
90: */
91: function requestDropboxAPIv2($url, $argv=NULL, $post=NULL, $upload=NULL) {
92: $flagArg = FALSE;
93: $headers[] = 'Authorization: Bearer ' . $this->DROPBOX_TOKEN;
94:
95: // cURLを使ってリクエスト
96: $curl = curl_init() ;
97: curl_setopt($curl, CURLOPT_URL , $url);
98: curl_setopt($curl, CURLOPT_HEADER, 1) ;
99: curl_setopt($curl, CURLOPT_SSL_VERIFYPEER , FALSE); // 証明書は無視
100: curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); // 結果を文字列で
101: curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
102: curl_setopt($curl, CURLOPT_TIMEOUT, 5);
103: if ($argv != NULL) {
104: $headers[] = 'Dropbox-API-Arg: ' . json_encode($argv);
105: $flagArg = TRUE;
106: }
107: if ($upload != NULL) {
108: $headers[] = 'Content-Type: application/octet-stream';
109: curl_setopt($curl, CURLOPT_POSTFIELDS, $upload);
110: $flagArg = FALSE;
111: } else if ($post != NULL) {
112: $headers[] = 'Content-Type: application/json';
113: curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($post));
114: }
115: curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
116:
117: $res1 = curl_exec($curl);
118: $res2 = curl_getinfo($curl);
119: if (PHP_VERSION_ID < 80500) {
120: curl_close($curl);
121: }
122: $res = substr($res1, $res2['header_size']);
123:
124: // 結果処理
125: $this->webapi = $url;
126: preg_match("/HTTP\/[0-9\.]+\s([0-9]+)\s(.+)/ims", $res1, $arr);
127: if (! isset($arr[2])) {
128: $this->error = TRUE;
129: $this->errmsg = 'Dropbox API failure';
130: } else if ($arr[1] >= 300) {
131: $json = json_decode($res);
132: $this->error = TRUE;
133: $this->errmsg = $arr[2];
134: } else {
135: $this->responses = $flagArg ? $res : json_decode($res);
136: }
137: return (! $this->error);
138: }
Dropbox API v2:ファイル検索
| リクエストURL |
|---|
| https://api.dropboxapi.com/2/files/search |
| フィールド名 | 要否 | 内 容 |
|---|---|---|
| path | 必須 | 検索対象ディレクトリ。Dropboxのパスで指定する。 |
| query | 必須 | 検索パターン。ワイルドカードに加え、正規表現を利用できる。 |
| start | 任意 | 検索開始番号。省略時は0。 |
| max_results | 任意 | 検索でヒットした情報の最大数。省略時は100。 |
| mode | 任意 | 検索対象 filename:ファイル名とフォルダ名 filename_and_content:ファイル名、フォルダ名、及びファイルの内容 deleted_filename:削除したファイル目とフォルダ名 省略時はfilename。 |
pahooDropboxAPI.php
140: /**
141: * Dropbox API v2:パターンにマッチするファイルを探す
142: * @param string $pattern パターン
143: * @return array マッチするファイル・ディレクトリを含む配列/FALSE:存在しない
144: */
145: function glob($pattern) {
146: $url = 'https://api.dropboxapi.com/2/files/search'; // リクエストURL
147: $arr = pathinfo($pattern);
148: $post['path'] = $arr['dirname'];
149: $post['query'] = $arr['basename'];
150:
151: $res = array();
152:
153: if ($this->requestDropboxAPIv2($url, NULL, $post) == FALSE) {
154: $res = FALSE;
155: } else if (isset($this->responses->matches[0]->metadata->name)) {
156: foreach ($this->responses->matches as $mat) {
157: $res[] = $mat->metadata->path_display;
158: }
159: } else {
160: $res = FALSE;
161: }
162:
163: return $res;
164: }
Dropbox API v2:通常ファイルかどうか
pahooDropboxAPI.php
166: /**
167: * Dropbox API v2:ファイルのタグ情報を取得する
168: * @param string $filename ファイル名(パスを含む)
169: * @return string タグ情報
170: */
171: function get_tag($filename) {
172: $url = 'https://api.dropboxapi.com/2/files/search'; // リクエストURL
173: $arr = pathinfo($filename);
174: $post['path'] = $arr['dirname'];
175: $post['query'] = $arr['basename'];
176:
177: if ($this->requestDropboxAPIv2($url, NULL, $post) == FALSE) {
178: $res = FALSE;
179: } else if (isset($this->responses->matches[0]->metadata->name)) {
180: $tag = '.tag';
181: $res = $this->responses->matches[0]->metadata->$tag;
182: } else {
183: $res = FALSE;
184: }
185: return $res;
186: }
Dropbox API v2:ファイルの内容取得
| リクエストURL |
|---|
| https://content.dropboxapi.com/2/files/download |
| フィールド名 | 要否 | 内 容 |
|---|---|---|
| path | 必須 | ダウンロードするファイルのフルパス名。Dropboxのパスで指定する。 ファイルIDやrevでも指定できる。 |
pahooDropboxAPI.php
215: /**
216: * Dropbox API v2:ファイルの内容取得
217: * @param string $filename ファイル名(パスを含む)
218: * @return string ファイル内容/FALSE:失敗
219: */
220: function file_get_contents($filename) {
221: $url = 'https://content.dropboxapi.com/2/files/download'; // リクエストURL
222: $argv['path'] = $filename;
223:
224: return ($this->requestDropboxAPIv2($url, $argv) == FALSE) ?
225: FALSE : $this->responses;
226: }
サンプル・プログラムの流れ
getDropBox.php
124: /**
125: * Dropboxのファイル取得
126: * @param string $query 検索パターン
127: * @return array(取得データ,WebAPI,エラーメッセージ)
128: */
129: function getDropboxTextFile($query) {
130: $res = $api = $errmsg = '';
131: $pdb = new pahooDropboxAPI(); // Dropbox APIクラス
132:
133: if ($pdb->iserror()) {
134: $errmsg = $pdb->geterror();
135: // ファイル検索
136: } else if (($files = $pdb->glob($query)) == FALSE) {
137: $errmsg = $query . ' : not found';
138: // 通常ファイルかどうか
139: } else if (! $pdb->is_file($files[0])) {
140: $errmsg = $files[0] . ' : is not a file';
141: // ファイル内容取得
142: } else if (($res = $pdb->file_get_contents($files[0])) == FALSE) {
143: $errmsg = $files[0] . ' : ' . $pdb->geterror();
144: }
145: $api = $pdb->webapi;
146: $pdb = NULL;
147:
148: return array($res, $errmsg, $api);
149: }
主な処理はユーザー関数 getDropboxTextFile の通りである。検索パターンは、各自の環境に合わせて変更してほしい。
また、クラス pahooDropboxAPI には、ファイルにデータを書き込んだりアップロードするメソッド、ファイルを削除するメソッドも用意してある。各自の責任において活用してほしい。

2018年(平成30年)9月現在、Dropbox API v2 ではPHP用のSDKが用意されていないため、ここではPHP 5以上でフレームワークを必要とせず、PHPのファイル操作関数に似せたメソッドを用意することを目標にする。
(2025年12月20日).pahooEnv導入.PHP8.5対応:curl_closeを実行しないようにした