ラベル PHP の投稿を表示しています。 すべての投稿を表示
ラベル PHP の投稿を表示しています。 すべての投稿を表示

2014年2月9日日曜日

CakePHPでマルチパートでないPost通信を受信する

CakePHPでマルチパートでないHTTP-Postリクエストを受信する方法を記載する。

動作環境
・Ubuntu 12.04.3 LTS
・CakePHP 2.4.4
・Apache 2.2.22

Webで実装方法を検索してみたところ、ピュアPHPではすぐに見つかったのだが、CakePHPではなかなか見つけることができなかった。
Webで検索するキーワードが悪かったのかもしれない。

HTTPクライアントはAndroidでHttpURLConnectionを使用した。
サンプルコードはこちら。
androidからAsyncTaskLoaderでHTTP-Post通信をする

 

ピュアPHPの場合

ピュアPHPでPostリクエストのデータを取得する場合は、file_get_contentsメソッドを使用する。

引数に「php://input」を指定する。

リクエストデータは戻り値で取得できる。

<?php
// 受信データ格納
$data = file_get_contents("php://input");

// レスポンス
echo "POST DATA RECEIVED. data[".$data."]"
?>

 


CakePHPの場合


CakePHPでPOSTデータを取得する場合、


 CakeRequest::data[‘key’]


などでデータを取得するが、マルチパートでないPOSTデータの場合、取得できない。
上記の「key」を「php://input」としても取得できない。


といっても、CakePHPのどこかで「php://input」からPOSTデータを取得している箇所があるはずなので、CakePHPのコードを「php://input」で検索してみる。


すると、CakeRequest::_readInputメソッドで「php://input」を使用していた。
_readInputメソッドはprotectedなので、さらに_readInputメソッドを使用している箇所を検索してみる。


_readInputメソッドを使用している箇所は2カ所あったが、CakeRequest::inputメソッドがpublicだったので、ここからPOSTデータを取得できそう。


というわけで、CakeRequest::inputメソッドを使用する。


inputメソッドは引数にデコード用コールバックを指定できるが、省略可能引数となっているため、今回は省略する。


リクエストデータは戻り値で取得できる。


下記のサンプルでは、取得したリクエストデータを、そのままレスポンスデータとして送信している。

<?php
class PostSamplesController extends AppController {
public function index() {
if($this->request->is('post')) { // Post通信
// 受信データ格納
$input_data = $this->request->input();

// レスポンス
$this->response->body($input_data);
return $this->response;
}
}
}
?>

2014年2月2日日曜日

CakePHPでMySQLデータベースのテーブルにアクセスする(scaffold)

CakePHPでデータベースのテーブルにscaffoldでアクセスする。
読み方はスキャフォールド(でよいと思う)。

scaffoldを使用すれば、手っ取り早くテーブルにアクセスすることができる。
実際のアプリケーション運用で使用することはないが、開発者がアプリケーションの動作確認を目的にデータベースの操作を行う場合に有用といえる。

2014年2月1日土曜日

CakePHPでデータベースの接続設定

CakePHPでデータベースへ接続する。database.phpを編集する。

2014年1月26日日曜日

CakePHPのディレクトリ構成

CakePHPはフレームワークなので、ファイルの格納場所や変更に制限がある。

下記の図に大まかに整理した。
頻繁に使用するディレクトリには◎、書き換えてはいけないディレクトリには×をつけた。

CakePHP    
 ├ app   アプリケーションを格納
 │  ├ Config 設定ファイル
 │  ├ Console   コンソール機能用のシェルなど
 │  ├ Controller アプリの制御を司る部分
 │  ├ Lib   自分で作成したライブラリ
 │  ├ Locale   国際化のための辞書ファイル
 │  ├ Model データベース処理
 │  ├ Plugin   CakePHPを拡張するプラグイン
 │  ├ Test   試験用の試験ケース
 │  ├ tmp   ログや一時ファイルが格納される
 │  ├ Vendor   外部のライブラリを格納
 │  ├ View 表示用ファイル
 │  └ webroot   画像などの静的なコンテンツ
 ├ lib    
 │  └ Cake × CakePHPの核となる部分
 ├ plugins    
 └ vendors    外部ライブラリを格納
     
     

2014年1月20日月曜日

CakePHPをUbuntuにインストールする


UbuntuにCakePHPの実行環境を構築してみる。
作業環境は、Ubuntu 12.04.3 LTSで実施する。

2013年12月23日月曜日

PHPのmysql関数が非推奨になっていた

しばらくぶりにPHPからMySQLにアクセスしようと、
Webでmysql_queryなどの使い方を調べていたら、
PHPのmysql関数がPHP5.5.0から非推奨になっていた。
http://www.php.net/manual/ja/intro.mysql.php

mysql関数の代わりにどうやってMySQL接続するかだが、
PHP標準には接続方法が三種類あって、
mysql(これまで使用していたもの)、mysqli、PDOのいずれかを使用できるようだ。
PHP: どの API を使うか - Manual

mysql関数が非推奨になった(PHP5.5.0が公開された)のはだいぶ前のことなので、
mysqliとPDOのどちらかを使うのがよいだろう。
どちらがよいか検索してみると、比較しているサイトを見つけることができた。
mysql関数からの置き換えやすいのはmysqli、
DBの抽象化をしておく必要があるのならPDO、などなど。

どちらを使うべきか、検討中。