refirio.org
気ままな雑記帳&実験場。好き勝手に色々やっています。
エントリー
file_get_contents()でgetリクエストとpostリクエストを送るメモ
PHPの file_get_contents() を使えばファイルの内容を表示できますが、指定したサーバーにgetやpostのリクエストを送ることもできます。
WebAPIを扱うときなど、たまに過去のコードを探すので自分用にメモ。
get
<?php
$result = file_get_contents('http://www.example.com/get.php?test1=test1&test2=テスト2');
echo '<pre>' . $result . '</pre>';
?>
http://www.example.com/get.php に対して test1=test1 と test2=テスト2 をgetで送信し、結果を画面に表示。
post
<?php
$result = file_get_contents(
'http://www.example.com/post.php',
false,
stream_context_create(
array(
'http' => array(
'method' => 'POST',
'header' => implode(
"\r\n",
array(
'Content-Type: application/x-www-form-urlencoded'
)
),
'content' => http_build_query(
array(
'test1' => 'test1',
'test2' => 'テスト2'
)
)
)
)
)
);
echo '<pre>' . $result . '</pre>';
?>
http://www.example.com/post.php に対して test1=test1 と test2=テスト2 をpostで送信し、結果を画面に表示。
PHPで日付を扱うメモ
ごく基本的な機能だけど、コピー&ペーストのために定期的に過去のコードを漁るので自分用にメモ。
<?php
//日時を表示
echo date('Y-m-d H:i:s');
//曜日を表示
$weeks = array('日', '月', '火', '水', '木', '金', '土');
echo $weeks[date('w')];
//日時を指定して表示
echo date('Y-m-d H:i:s', strtotime('2012-07-01'));
echo date('Y-m-d H:i:s', strtotime('2012-07-04 16:30:21'));
?>
Vicuna CMS - Freo
metal-mad.com さんがカスタマイズしてくれた、Vicuna CMS テンプレートを適用させてみた。
テンプレートの値をいじると見た目やレイアウトが切り替わったりと、何だか色々凄いみたい。まだ調整したい箇所はあるので、少しずついじっていくとします。(`・ω・´)
Silexでセッションとデータベースとテンプレートを使うメモ
Silexの機能をいくつか使ってみたのでメモ。
主にSilexユーザーガイドを参考にしていますが、自分のやりやすいように解説と違っている箇所があります。Silex自体の導入はSilex導入メモに記載しています。
Silexでセッションを使う
セッションを使う仕組みは、標準で用意されている。
$app->register(new Silex\Provider\SessionServiceProvider(), array(
));
でセッションプロバイダーを使うことを宣言。あとは $app['session'] にアクセスすれば、セッションを扱うための命令を呼び出せる。
以下は参考コード。
<?php
require_once __DIR__ . '/silex/vendor/autoload.php';
$app = new Silex\Application();
$app['debug'] = true;
$app->register(new Silex\Provider\SessionServiceProvider(), array(
));
$app->get('/', function() use($app) {
$app['session']->start();
if ($app['session']->has('count')) {
$count = $app['session']->get('count');
} else {
$count = 0;
}
$app['session']->set('count', ++$count);
return 'count=' . $app['session']->get('count');
});
$app->run();
exit;
?>
Silexでデータベースを使う
Doctrine経由でデータベースに接続する仕組みが、標準で用意されている。ただしDoctrineそのものは同梱されていないので、自分で導入する必要がある。
まずはDoctrineからファイルをダウンロードする。解凍して作成されたファイルを silex/vendor/doctrine/ 内に配置する。
test / index.php
|
+-- silex / LICENSE
|
+-- src / ~略~
|
+-- vendor / autoload.php
|
+-- composer / ~略~
|
+-- doctrine / doctrine-mapping.xsd
| | LICENSE
| | package.xml
| | UPGRADE_TO_2_0
| | UPGRADE_TO_2_1
| | UPGRADE_TO_2_2
| | UPGRADE_TO_ALPHA3
| | UPGRADE_TO_ALPHA4
| |
| +-- bin / ~略~
| |
| +-- Doctrine / ~略~
|
+-- pimple / ~略~
|
+-- symfony / ~略~
次に
$app->register(new Silex\Provider\DoctrineServiceProvider(), array(
'db.options' => array(
'dbname' => 'データベース名',
'user' => 'データベース接続ユーザー名',
'password' => 'データベース接続パスワード',
'host' => '接続先',
'driver' => 'ドライバ',
),
'db.dbal.class_path' => __DIR__ . '/silex/vendor/doctrine',
'db.common.class_path' => __DIR__ . '/silex/vendor/doctrine'
));
でDoctrineプロバイダーを使うことを宣言。あとは $app['db'] にアクセスすれば、データベースを扱うための命令を呼び出せる。
以下は参考コード。
<?php
require_once __DIR__ . '/silex/vendor/autoload.php';
$app = new Silex\Application();
$app['debug'] = true;
$app->register(new Silex\Provider\DoctrineServiceProvider(), array(
'db.options' => array(
'dbname' => 'test',
'user' => 'xxxx',
'password' => 'yyyy',
'host' => 'localhost',
'driver' => 'pdo_mysql',
),
'db.dbal.class_path' => __DIR__ . '/silex/vendor/doctrine',
'db.common.class_path' => __DIR__ . '/silex/vendor/doctrine'
));
$app->get('/', function() use($app) {
$stmt = $app['db']->query('SELECT * FROM address');
$result = '';
while ($row = $stmt->fetch()) {
$result .= $row['no'] . ' / ' . $row['name'] . ' / ' . $row['tel'] . '<br />';
}
return $result;
});
$app->run();
exit;
?>
Silexでテンプレートを使う
Twig経由でテンプレートを使用する仕組みが、標準で用意されている。ただしTwigそのものは同梱されていないので、自分で導入する必要がある。
まずはTwigからファイルをダウンロードする。解凍して作成されたファイルを silex/vendor/twig/ 内に配置する。
test / index.php
|
+-- silex / LICENSE
|
+-- src / ~略~
|
+-- vendor / autoload.php
|
+-- composer / ~略~
|
+-- pimple / ~略~
|
+-- symfony / ~略~
|
+-- twig / .travis.yml
| AUTHORS
| CHANGELOG
| composer.json
| LICENSE
| package.xml.tpl
| phpunit.xml.dist
| README.markdown
|
+-- bin / ~略~
|
+-- doc / ~略~
|
+-- ext / ~略~
|
+-- lib / ~略~
|
+-- test / ~略~
次に
$app->register(new Silex\Provider\TwigServiceProvider(), array(
'twig.path' => __DIR__ . '/views',
'twig.class_path' => __DIR__ . '/silex/vendor/twig/lib',
));
でTwigプロバイダーを使うことを宣言。(twig.path は、テンプレートを配置するためのディレクトリ)あとは $app['twig'] にアクセスすれば、Twigを扱うための命令を呼び出せる。
以下は参考コード。
<?php
require_once __DIR__ . '/silex/vendor/autoload.php';
$app = new Silex\Application();
$app['debug'] = true;
$app->register(new Silex\Provider\TwigServiceProvider(), array(
'twig.path' => __DIR__ . '/views',
'twig.class_path' => __DIR__ . '/silex/vendor/twig/lib',
));
$app->get('/', function() use($app) {
$variables['test1'] = 'これはテストです。';
$variables['test2'] = array('テスト1', 'テスト2', 'テスト3');
return $app['twig']->render('test.html', $variables);
});
$app->run();
exit;
?>
テンプレートは views ディレクトリ内に test.html を作成し、以下の内容を記述する。
<html>
<head>
<meta charset="utf-8" />
<title>title</title>
</head>
<body>
<h1>テスト</h1>
<p>{{ test1 }}</p>
<ul>
<!--{% for test in test2 %}-->
<li>{{ test }}</li>
<!--{% endfor %}-->
</ul>
</body>
</html>
Silex導入メモ
Silexを試してみたので導入メモ。
Silexとは
PHP5.3以降で利用できる、ライトウェイトなフレームワーク。Symfony2のクラスを利用しているらしい。Symfony2では大げさすぎる場合に使えるみたい。
利用方法
公式サイトから 現在はphar形式にはなっていない。silex.phar をダウンロードしてrequireするだけで使える。
pharとは
「PHp ARchive」の略で、複数のファイルをまとめたもの。
動かない
ロリポップサーバーで Class 'Silex\Application' not found とか表示された。どうやら、環境によってはpharファイルの利用は問題があるらしい。pharをバラせば普通のPHPファイルになるので、それを使えばいい。
pharコマンドを使える環境でroot権限で、silex.phar に対して以下を実行。(rootでないと「ライセンスエラー」とか表示された。)
$ phar extract -f silex.phar
作成されたファイルを、まるごと silex フォルダに突っ込む。そして silex.phar の読み込み処理を
//require_once __DIR__ . '/silex.phar';
require_once __DIR__ . '/silex/vendor/autoload.php';
のようにするとSilexを使える。
ディレクトリ構成
参考に、ディレクトリ構成とプログラムの内容全文。
testディレクトリ内で動作させるとする- Silexは
test/silex/に配置するとする - 本番環境では
test/silex/にアクセス制限をかけたり、公開ディレクトリ外に設置するとよさそう - LICENSEファイルや説明書ファイルなどは、動作には不要(自分でどのファイルか判りやすいように書いているだけ)
test / index.php
|
+-- silex / LICENSE
|
+-- src / ~略~
|
+-- vendor / ~略~
test/index.php の内容は以下のとおり。
<?php
require_once __DIR__ . '/silex/vendor/autoload.php';
$app = new Silex\Application();
$app['debug'] = true;
$app->get('/', function() use($app) {
return 'index';
});
$app->run();
exit;
?>
ブラウザソフトから index.php にアクセスして、index と表示されれば成功。
各機能の使用方法はSilexでセッションとデータベースとテンプレートを使うメモに記載。
MacでFinderを使う際に躓いたことメモ
不可視ファイルの表示
Macでは不可視ファイル(「.」から始まる名前のファイル)は非表示になっているけど、.htaccess なども非表示になって作業しづらい。かと言って不可視ファイルを表示するようにすると、当然ながら全部の不可視ファイルが表示されてしまうので嫌。デスクトップにも .DS_Store と .localized が表示されてしまうし…。
色々調べたところ、TotalFinder(シェアウェア)を導入することにした。Finderについて色々と細かな設定ができるようになるのだけど、特に「フォルダ→ファイルの順に表示できる」「不可視ファイルの制御ができる」という設定ができるので、自分にとっては必須になりそう。
.DS_Store の自動作成を抑制
.DS_Store は何か作業をするたびに勝手に作られてしまみたいだけど、WindowsやUNIXとファイルをやり取りする場合は不要なデータ。できれば勝手に作ってほしくないので対処方法を調べてみたら、以下のページが出てきた。
でもこれは「Finder が ローカルボリュームにおいて .DS_Store ファイルを作成しないようにしたり、すでに存在する .DS_Store ファイルがリモートファイルサーバにコピーされないようにすることはできません。」とあるので、あくまでもネットワーク接続時だけみたい。
さらに色々調べたところ、Asepsisを導入することにした。インストールしたところ、.DS_Store ファイルが作成されなくなったっぽい!
でもAsepsisをインストールして再起動したら、Finderのサイドバーが表示されなくなった。表示させようとしても設定をいじれなくなっていた。(Asepsisが直接の原因なのかどうかは不明。)調べてみたら
こんなのがあった。そしてこの手順で、Finderが元に戻った!設定ファイルが壊れていたっぽい。
でもOS起動直後は、何故かTotalFinderの設定に関わらず .DS_Store と .localized がデスクトップに表示されてしまう…。
.DS_Store はファイルやフォルダの情報を管理するデータ。.localized はローカライズ(フォルダの日本語化とか)を行うファイル。これらは配置したフォルダとそれ以下のフォルダに反映される。…と自分では理解している。つまりはデスクトップに何も置かないのなら不要なファイルなので、潔く捨ててみた。OSの再起動とか試してみたけど、今のところ問題なし。これで行ってみる。(`・ω・´)
結局のところ、TotalFinderによる不可視ファイルの制御は意味のないものになってしまったけど、他にも便利な機能がたくさんあるので良しとします。
まとまりが無い文章…。
Macでmiを使う際に躓いたことメモ
MacBook Air を購入したので色々設定中。テキストエディタmiを扱う際に、エディタの設定とMacそのものの仕様で色々躓いたのでメモ。
「ジャンプリスト」と「最近開いたファイル」を非表示にしようとしても、ウインドウメニューからは切り替えられない。
表示メニューの「情報ペインカラム表示切り替え」から非表示にできた。
拡張子がphpのファイルをダブルクリックした時、miが開いたりMac標準のテキストエディタが開いたり。ルールがよく解らない…。
設定したとおりにフォントが反映されなかったり、モードの設定が反映されなかったり。
UTF-8のテキストファイルが文字化けすることがある。
mi Helpの「テキストエンコーディングと文字化けについて」に書かれていることが原因。
「モード設定」の「開く」で「確定できないときはデフォルトのテキストエンコーディングにする」にチェックを入れるといい。
デフォルトのエンコーディングは「モード設定」の「デフォルト」の「エンコーディング」で設定できる。ここをUTF-8にしておけばいい。
jQueryでネタバレボタン作成
- 2012/01/07 16:18
- カテゴリー:制作, プログラム
- タグ:JavaScript
クリックすると文章を表示できるという、いわゆるネタバレボタンをjQueryで作成してみます。
利用、流用は自由にどうぞ。またプラグイン作成の基本は jQueryプラグインの作成メモ 前編 と jQueryプラグインの作成メモ 後編 を参考にしてください。
以下、内容を解説していきます。
ギルティクラウン公式サイトの私的な技術メモ
- 2012/01/05 20:40
- カテゴリー:制作, プログラム
- タグ:JavaScript
ギルティクラウンの公式サイトを見て、
- ローディング画面はどんな方法で表示しているんだろう?
- CHARACTERページでのページ切り替えはどうやっているんだろう?
が気になったので調べてみたメモ。あと、普通のHTMLページっぽくないページを作るのに使えそうなものをメモ。プラグインの詳細解説や使い方は、ググると出てきます。
QueryLoader2
ページが読み込まれてから表示する、いわゆる「Now Loading」画面を作れるjQueryプラグイン。ギルティクラウンのサイトで使われているのはバージョン1だけど、そっちは最新のjQueryには対応していないみたい。
hashchange
「Ajaxでページ遷移させたいけど、ブラウザの進む・戻る機能も使えるようにしたい」ができるjQueryプラグイン。CHARACTERページみたいに、普通のページ遷移とは違った見せ方をしたい場合に。
以下は、ギルティクラウンの公式サイトとは関係なくメモ。
jScrollPane
クロスブラウザでスクロールバーのデザインを変えたい場合に。同じ機能のプラグインをいくつか試したけど、HTMLが一番綺麗だったので採用。
自作プラグイン
最近作ったjQueryプラグインから、普通のHTMLページっぽくないページを作るのに使えそうなものをメモ。
jQueryでツールチップ表示
- 2012/01/03 15:02
- カテゴリー:制作, プログラム
- タグ:JavaScript
jQueryでツールチップを表示する仕組みです。ブラウザ標準のツールチップとは違い、CSSで自由に装飾することができます。
利用、流用は自由にどうぞ。またプラグイン作成の基本は jQueryプラグインの作成メモ 前編 と jQueryプラグインの作成メモ 後編 を参考にしてください。
以下、内容を解説していきます。
ユーティリティ
カテゴリー
タグクラウド
- 33分探偵1
- AMBITIOUS JAPAN!1
- ARIA2
- Air2
- Android2
- BLACK CAT2
- C#1
- Chrome2
- FINAL FANTASY2
- Flash2
- GAE1
- JavaScript18
- Kindle1
- Mac2
- MySQL7
- PHP68
- PayPal1
- Perl3
- PostgreSQL2
- Python1
- Ruby1
- SQLite6
- Switch1
- TinyMCE4
- Windows Media Player1
- bot1
- fragile1
- freo53
- iPhone3
- iTunes1
- levis1
- mod_rewrite2
- node.js1
- sola1
- true tears1
- いつかのメリークリスマス1
- いつか帰るところ1
- けいおん!1
- ここにしか咲かない花3
- とある魔術の禁書目録1
- とらドラ!2
- ひぐらしのなく頃に2
- みなみけ1
- イラスト4
- ガンダム003
- クロノトリガー1
- ザナルカンドにて4
- テラ1
- ニコニコ動画8
- ハゲタカ2
- ピアノ36
- マクロスF3
- ユニットテスト1
- ルパン三世1
- ローズ・オブ・メイ4
- 初音ミク1
- 半分の月がのぼる空1
- 名探偵コナン1
- 戦場のメリークリスマス5
- 携帯10
- 攻殻機動隊1
- 桜2
- 機工魔術士1
- 決行~姫をさがして~1
- 涼宮ハルヒの憂鬱10
- 深愛2
- 灼眼のシャナ4
- 聖剣伝説2
- 蕾3
- 蟲師2
- 返信2
- 野球1
- 鋼の錬金術師1