@php
@フォロワー #0
[PHP]PHPでHTTP POSTされたJSON本文を受け取る方法について @Post @JSON @php
iQi @回答 • 2015-05-28 11:59 • @フォロワー #1 • 1 回答 • 3858 Views
2ch(2ちゃんねる)のIDのようなIDの作り方について @bbs @2ch @php
iQi @回答 • 2014-09-15 15:50 • @フォロワー #2 • 1 回答 • 5358 Views
[PHP]Error:PHP Deprecated: Function split() is deprecated in... @php
iQi @回答 • 2014-09-12 21:22 • @フォロワー #2 • 1 回答 • 2228 Views
[Mysql]Error:extension is deprecated and will be removed in the future: use mysqli or PDO instead @php
iQi @回答 • 2014-09-12 21:20 • @フォロワー #2 • 1 回答 • 3109 Views
[PHP]URL取得・表示について @php
iQi @回答 • 2014-07-29 17:03 • @フォロワー #2 • 1 回答 • 2247 Views
PHPにてURLで指定した画像の存在チェック @php
iQi @回答 • 2014-06-16 01:56 • @フォロワー #2 • 1 回答 • 2346 Views
スマートフォンにも個体識別番号はあるの? @php
iQi @回答 • 2014-06-02 15:39 • @フォロワー #2 • 1 回答 • 2187 Views
{ 賛成 }: Lubo
PHPでJSON形式を出力する方法です。まずは、連想配列に項目を追加しておき、表示します。
{{{
// 連想配列を生成
// 表示内容
// {
// "name":"アイスケット",
// "address...
{{{
// 連想配列を生成
// 表示内容
// {
// "name":"アイスケット",
// "address":"神奈川県",
// "work":{
// "program":"PHP",
// "design":"CSS",
// "database":"MySQL"
// }
// }
$jsonArray = array(
'name' => 'アイスケット',
'address' => '神奈川県',
'work' => array(
'program' => 'PHP',
'design' => 'CSS',
'database' => 'MySQL'
)
);
}}}
// 生成した連想配列からJSON形式に変換して、表示
echo json_xencode($jsonArray);
json_xencodeという関数は別途定義した関数です。PHP5.3でも利用できるように記述したものです。
以下の関数は「オープンソースこねこね」様のサイトを参考にさせて頂きました。ありがとうございます。
{{{
/**
* ----------------------------------------------------------
* PHP5.4からでないと対応していないUnicodeアンエスケープをPHP5.3でもできるようにしたラッパー関数
* @param mixed $value
* @param int $options
* @param boolean $unescapee_unicode
* ----------------------------------------------------------
*/
function json_xencode($value, $options = 0, $unescapee_unicode = true)
{
$v = json_encode($value);
if ($unescapee_unicode) {
$v = unicode_encode($v);
// スラッシュのエスケープをアンエスケープする
$v = preg_replace('/\\\\\//', '/', $v);
}
return $v;
}
/**
* ----------------------------------------------------------
* Unicodeエスケープされた文字列をUTF-8文字列に戻す。
* 参考:http://d.hatena.ne.jp/iizukaw/20090422
* @param unknown_type $str
* ----------------------------------------------------------
*/
function unicode_encode($str)
{
return preg_replace_callback("/\\\\u([0-9a-zA-Z]{4})/", "encode_callback", $str);
}
function encode_callback($matches) {
return mb_convert_encoding(pack("H*", $matches[1]), "UTF-8", "auto");
}
}}}
json_xencode関数を定義しておけば、連想配列がそのままJSON形式で出力できるので非常に便利です。JSONというと難しく感じてしまう方もいるかもしれませんが、この関数を利用すれば特に意識することなく利用できると思います。
{ 賛成 }: Lubo
この内容をresponse.jsonというファイルを作って、ファイルの内容を以下のようにしておきます。
{{{
response.json
{
"name":"アイスケット",
"addres...
{{{
response.json
{
"name":"アイスケット",
"address":"神奈川県",
"work":{
"program":"PHP",
"design":"CSS",
"database":"MySQL"
}
}
}}}
次にPHPですが、先ほどのresponse.jsonと同じフォルダにPHPファイルを作ってください。
{{{
<?php
// ファイルからJSONを読み込み
$json = file_get_contents("response.json");
// 文字化けするかもしれないのでUTF-8に変換
$json = mb_convert_encoding($json, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN');
// オブジェクト毎にパース
// trueを付けると連想配列として分解して格納してくれます。
$obj = json_decode($json, true);
// パースに失敗した時は処理終了
if ($obj === NULL) {
return;
}
// 表示
// アイスケット
echo $obj['name'];
// 表示
// PHP
echo $obj['work']['program'];
?>
}}}
上記の例は連想配列でパースしたものですが、オブジェクト形式のまま返す方法もあります。先程と違うのはjson_decode関数にtrueを付けないところと、オブジェクトへのアクセスが波括弧となるところです。
{{{
<?php
// ファイルからJSONを読み込み
$json = file_get_contents("response.json");
// 文字化けするかもしれないのでUTF-8に変換
$json = mb_convert_encoding($json, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN');
// オブジェクト毎にパース
// trueを付けないとオブジェクトとしてアクセスして格納してくれます。
$obj = json_decode($json);
// パースに失敗した時は処理終了
if ($obj === NULL) {
return;
}
// 表示
// アイスケット
echo $obj->{'name'};
// 表示
// PHP
echo $obj->{'work'}->{'program'};
?>
}}}
{ 賛成 }: lujian
ch(2ちゃんねる)のID
掲示板サイト2ちゃんねるに書き込むと ID:U+5EtO9y という形式のIDが表示されます。
PHPでこれと似たIDを作るには、以下のようです。
{{{
$str = "210.221.12.10";
$st...
掲示板サイト2ちゃんねるに書き込むと ID:U+5EtO9y という形式のIDが表示されます。
PHPでこれと似たIDを作るには、以下のようです。
{{{
$str = "210.221.12.10";
$str_md5 = substr(md5($str), 0, 30);
$date_md5 = substr(md5(date("Y-m-d")), 0, 20);
$key_md5 = substr(md5("samplekey"), 0, 10);
$id_md5 = md5($str_md5 . $date_md5 . $key_md5);
$id = substr(base64_encode($id_md5), 0, 8);
echo $id;
}}}
PCサイトの場合、IDの元になる文字列は、IPアドレスが一般的です。
携帯サイトの場合は、携帯のユーザーID(uid)や固体識別番号などが良いと思います。
日付が変わった時にIDを変えたい場合は、上記サンプルのようにIDの生成に日時を含めます。
例:http://api.jp.ai/2ch?ip=210.221.12.10
追記:
IDは書き込みの日付の最後に自動的につきます。これは書き込んだ本人のIPアドレスと日付から自動的に生成される文字列です。これによって自作自演の書き込みを防ぐことができますが、例えば携帯電話とパソコンを使い分けるなどの方法で複数の人が書き込んでいるように装うことができてしまいます。
IDは書き込んだ個人を識別する働きがありますが、決して個人を特定するものではなく、IDからIPアドレス等の情報を調べることはできません。
{ 賛成 }: lujian
ステータスコード 301(恒久的移動)を送出してリダイレクトしたい場合、
{{{
header('HTTP/1.1 301 Moved Permanently');
header('Location: http://example.com/');
}}}
また...
{{{
header('HTTP/1.1 301 Moved Permanently');
header('Location: http://example.com/');
}}}
または、
{{{
header('Location: URL', true, 301);
}}}
追記(ロケーションヘッダを送出する例のメモ):
{{{
// 301 Moved Permanently
header('Location: http://example.com/', true, 301);
// 302 Found
header('Location: http://example.com/', true, 302);
header('Location: http://example.com/');
// 303 See Other
header('Location: http://example.com/', true, 303);
// 307 Temporary Redirect
header('Location: http://example.com/', true, 307);
}}}
3xx Redirection リダイレクション
{{{
300 Multiple Choices
複数の選択。リクエストしたリソースが複数存在し、ユーザやユーザーエージェントに選択肢を提示するときに返される。
301 Moved Permanently
恒久的に移動した。リクエストしたリソースが恒久的に移動されているときに返される。Location:ヘッダに移動先のURLが示されている。
例としては、ファイルではなくディレクトリに対応するURLの末尾に/を書かずにアクセスした場合に返される。
302 Found
発見した。リクエストしたリソースが一時的に移動されているときに返される。
303 See Other
他を参照せよ。リクエストに対するレスポンスが他のURLに存在するときに返される。
304 Not Modified
未更新。リクエストしたリソースは更新されていないことを示す。
305 Use Proxy
プロキシを使用せよ。
306 (Unused)
将来のために予約されている。
307 Temporary Redirect
一時的リダイレクト。
}}}
HTTPステータスコードを送出する例
ロケーションヘッダ以外も色々試してみたところ、第一引数にHTTPを入れればHTTPステータスコードを送出することも出来る模様。取り敢えず良く使いそうなものを載せておく。
{{{
// 400 Bad Request
header('HTTP', true, 400);
// 403 Forbidden
header('HTTP', true, 403);
// 404 Not Found
header('HTTP', true, 404);
// 500 Internal Server Error
header('HTTP', true, 500);
}}}
{ 賛成 }: lujian
{{{
$arr = array('key1' => 'value1', 'key2' => 'value2');
}}}
$arr = array('key1' => 'value1', 'key2' => 'value2');
}}}
{ 賛成 }: lujian
{{{
function img_exists($url){
$ch = curl_init();
curl_setopt($ch, curlopt_url,$url);
curl_setopt($ch, cur...
function img_exists($url){
$ch = curl_init();
curl_setopt($ch, curlopt_url,$url);
curl_setopt($ch, curlopt_nobody, 1);
curl_setopt($ch, curlopt_failonerror, 1);
curl_setopt($ch, curlopt_returntransfer, 1);
if(curl_exec($ch)!==false)
return true;
else
return false;
}
}}}
または
{{{
function url_exists($url) {
$head=@get_headers($url);
if(is_array($head) && !strstr($head[0],'404') ) {
return true;
}
return false;
}
}}}
{ 賛成 }: lujian
{{{
$array = (array) $yourObject;
}}}
詳細は下記公式サイトの内容をご参考ください。
http://www.php.net/manual/en/language.types.array.php
$array = (array) $yourObject;
}}}
詳細は下記公式サイトの内容をご参考ください。
http://www.php.net/manual/en/language.types.array.php
下記、MongoDBをPHPから使う方法です。
###環境構築
まずは拡張パッケージのインストール
{{{
sudo pecl install mongo
}}}
次にphp.iniに
{{{
extension=mongo.so
}}}
を追記します。
...
###環境構築
まずは拡張パッケージのインストール
{{{
sudo pecl install mongo
}}}
次にphp.iniに
{{{
extension=mongo.so
}}}
を追記します。
php.iniが何処にあるかわからない場合はphpinfo()を実行すると場所がわかります。
CentOS6でyumを使ってデフォルトのままインストールすると/etcの下にあると思います。
これで環境構築は終わりです。
チュートリアルを試す。
これに従います。
コメントを追記したものを下に貼り付けてみます。
{{{
<?php
// MongoDBに接続 localhost:27017
$m = new Mongo();
// リモートホストにデフォルトポート27017で接続
// $m = new Mongo("exsample.com");
//リモートホストに任意のポートで接続(xxxxxはポート番号)
// $m = new mongo("exsample.com:xxxxx");
/*
データベースは $m->dbname; で選択できる。
存在しなければ作成される。
これは便利ではあるが、タイプミスをした場合、
そのままデータベースが作成されてしまうので気をつけて下さい。
*/
// データベース(comedy)を選択
$db = $m->comedy;
/*
コレクションもデータベースと同様に
$db->collection_name; で取得できます。
存在しなければ作成されます。
コレクション≒テーブル
*/
// コレクション(cartoons)を取得
$collection = $db->cartoons;
// コレクションにドキュメントを挿入します。
// まずはドキュメントを作成します。
/*
JSON形式を意識して
key => valueでドキュメントを連想配列として作成します。
*/
$obj = array("title" => "Calvin and Hobbes", "author" => "Bill Watterson");
// コレクションにドキュメントを挿入
$collection->insert($obj);
// 別のドキュメントを作成し、挿入します。
$obj = array("title" => "XKCD", "online" => true );
$collection->insert($obj);
// ドキュメントを全件取得します
$cursor = $collection->find();
// 全て表示します
foreach($cursor as $obj){
echo $obj["title"] . "\n";
}
?>
}}}
何回も実行すると、どんどんドキュメントが増えていきます。
実行後にMongoDBコンソールでデータベースが作成されていることを確かめます。
MongoDBコンソールを起動
mogno
データベースが出来ていることの確認(comedyが在ればOK)
show dbs;
データベースの選択
use comedy
コレクションの一覧取得(cartoonsが在ればOK)
db.getCollectionNames();
ドキュメントの一覧取得
db.cartoons.find();
チュートリアルの下の方には様々な関数の使い方などが解説されています。
時間があれば、そのうち記事にしようと思います。
以上です。
https 判定サンプルコード
{{{
if(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on')
{
//'https'
} else if (isset($_SERVER['HTT...
{{{
if(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on')
{
//'https'
} else if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
//'https'
} else {
// 'http'
}
}}}
下記、みつの方法、いずれこのエラーを修正できますが、エラー内容通り、ソースコードを修正すべきである。
1.php.iniファイルを修正する
{{{
display_errors = On → display_errors = Off
}}}
2.Depreca...
1.php.iniファイルを修正する
{{{
display_errors = On → display_errors = Off
}}}
2.Deprecatedのエラーを吐かないようにするといい。
{{{
error_reporting(E_ALL ^ E_DEPRECATED);
}}}
3.ソースコードを修正する。
{{{
<?php
$link = mysql_connect('localhost', 'user', 'password');
mysql_select_db('dbname', $link);
→
<?php
$link = mysqli_connect('localhost', 'user', 'password', 'dbname');
<?php
mysql_query('CREATE TEMPORARY TABLE `table`', $link);
→
mysqli_query($link, 'CREATE TEMPORARY TABLE `table`');
}}}