エントリー

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=test1test2=テスト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=test1test2=テスト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では大げさすぎる場合に使えるみたい。

利用方法

公式サイトから silex.phar をダウンロードしてrequireするだけで使える。現在はphar形式にはなっていない。

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標準のテキストエディタが開いたり。ルールがよく解らない…。

Finderから設定可能

設定したとおりにフォントが反映されなかったり、モードの設定が反映されなかったり。

あちらこちらに設定が記録されているのでOFFにする

UTF-8のテキストファイルが文字化けすることがある。

mi Helpの「テキストエンコーディングと文字化けについて」に書かれていることが原因。

「モード設定」の「開く」で「確定できないときはデフォルトのテキストエンコーディングにする」にチェックを入れるといい。

デフォルトのエンコーディングは「モード設定」の「デフォルト」の「エンコーディング」で設定できる。ここをUTF-8にしておけばいい。

jQueryでネタバレボタン作成

クリックすると文章を表示できるという、いわゆるネタバレボタンをjQueryで作成してみます。

利用、流用は自由にどうぞ。またプラグイン作成の基本は jQueryプラグインの作成メモ 前編jQueryプラグインの作成メモ 後編 を参考にしてください。

以下、内容を解説していきます。

続きを読む

ギルティクラウン公式サイトの私的な技術メモ

ギルティクラウンの公式サイトを見て、

  • ローディング画面はどんな方法で表示しているんだろう?
  • CHARACTERページでのページ切り替えはどうやっているんだろう?

が気になったので調べてみたメモ。あと、普通のHTMLページっぽくないページを作るのに使えそうなものをメモ。プラグインの詳細解説や使い方は、ググると出てきます。

QueryLoader2

ページが読み込まれてから表示する、いわゆる「Now Loading」画面を作れるjQueryプラグイン。ギルティクラウンのサイトで使われているのはバージョン1だけど、そっちは最新のjQueryには対応していないみたい。

hashchange

「Ajaxでページ遷移させたいけど、ブラウザの進む・戻る機能も使えるようにしたい」ができるjQueryプラグイン。CHARACTERページみたいに、普通のページ遷移とは違った見せ方をしたい場合に。

以下は、ギルティクラウンの公式サイトとは関係なくメモ。

jScrollPane

クロスブラウザでスクロールバーのデザインを変えたい場合に。同じ機能のプラグインをいくつか試したけど、HTMLが一番綺麗だったので採用。

自作プラグイン

最近作ったjQueryプラグインから、普通のHTMLページっぽくないページを作るのに使えそうなものをメモ。

jQueryでツールチップ表示

jQueryでツールチップを表示する仕組みです。ブラウザ標準のツールチップとは違い、CSSで自由に装飾することができます。

利用、流用は自由にどうぞ。またプラグイン作成の基本は jQueryプラグインの作成メモ 前編jQueryプラグインの作成メモ 後編 を参考にしてください。

以下、内容を解説していきます。

続きを読む

ユーティリティ

カテゴリー

検索

エントリー検索フォーム
キーワード

過去ログ

過去ログ表示フォーム
キーワード

Feed