phpで変数がからっぽか判断

phpで変数に何も入ってないか判断するのに

とありますが少々思ったのと違う結果になります

$var = ''; // 空文字だからfalseがほしい
var_dump(empty($var));
// -> true
var_dump(is_null($var));
// -> false

$var = 0; // 0が入ってるからtrueがほしい
var_dump(empty($var));
// -> true
var_dump(is_null($var));
// -> false

変数に何も入ってない ” とか nullはtrueになって欲しいですが
変数に空文字のときはis_nullはtrueになってほしい、
変数に0のときはemptyはfalseになってほしい、、

とそんなときは、文字の長さを見る

を使うといいと思います

$var = ''; // 空文字だからfalseがほしい
var_dump(strlen($var) === 0);
// -> false

$var = 0; // 0が入ってるからtrueがほしい
var_dump(strlen($var) === 0);
// -> true

イコールが3ついるので注意です

phpで一時ファイルを用意する

phpでサーバーでデータを処理して、いったんサーバーに保存、それからダウンロード処理を走らせるってときにつかえそうな
標準であるtempnamを使ってみました

$path = tempnam( ディレクトリ, 先頭につける文字 )

と呼び出すと、

  • ディレクトリ内に「先頭につける文字」から始まるかぶらないファイル名で、ファイルを作成
  • 返り値はファイルのパス

となります
昔はSessionIDつけたりしてやってた気がします

ComposerでCakephpにphpunitとdebugkitを入れてみる

ComposerでCakephpを入れてみたの続きです

phpunitとdebugkitを入れてみます

github上の
https://github.com/cakephp/cakephp/blob/master/composer.json
のcompoer.jsonをcakephpのディレクトリに保存します
(projectの下で、前回の続きだと「app」の中)

$ composer install
でphpunitとdebugkitが入ります

autoloaderの読み込み先を修正
$ vim Config/bootstrap.php

require ROOT . DS . APP_DIR . '/vendor/autoload.php';

phpunitが動くか確認します

http://(cakephpへのアクセス)/test.php
へブラウザでアクセス

cakephp-test

とでれば、うまくいってます

DebugKitの設定をします

$ vim Core/bootstrap.php

CakePlugin::load('DebugKit');       

を追記

$ vim Controller/AppController.php

class AppController extends Controller {
    public $components = array('DebugKit.Toolbar');                                                                                                                                                         
}

とcomponentを読み込みます
これですべての画面で有効になります

トップ画面にブラウザへアクセスして

cakephp-allgreen

オールグリーン!
で設定できました

ComposerでいれたCakephpを動かしてみる

ComposerでCakephpとPHPUnitを入れてみたの続きです

bake でプロジェクトを作ります
プロジェクト名はappにしました

/home/user/ws/vagrant/precise/cakephp/
がカレントディレクトリのときの実行結果です

$ Vendor/bin/cake bake project app

Welcome to CakePHP v2.6.1 Console
---------------------------------------------------------------
App : cakephp
Path: /home/user/ws/vagrant/precise/cakephp/
---------------------------------------------------------------
Skel Directory: /home/user/ws/vagrant/precise/cakephp/Vendor/cakephp/cakephp/lib/Cake/Console/Templates/skel
Will be copied to: /home/user/ws/vagrant/precise/cakephp/app
---------------------------------------------------------------
Look okay? (y/n/q) 
[y] > y
---------------------------------------------------------------
Created: app in /home/user/ws/vagrant/precise/cakephp/app
---------------------------------------------------------------
 * Random hash key created for 'Security.salt'
 * Random seed created for 'Security.cipherSeed'
 * Cache prefix set
 * app/Console/cake.php path set.
CakePHP is not on your `include_path`, CAKE_CORE_INCLUDE_PATH will be hard coded.
You can fix this by adding CakePHP to your `include_path`.
 * CAKE_CORE_INCLUDE_PATH set to /home/user/ws/vagrant/precise/cakephp/Vendor/cakephp/cakephp/lib in webroot/index.php
 * CAKE_CORE_INCLUDE_PATH set to /home/user/ws/vagrant/precise/cakephp/Vendor/cakephp/cakephp/lib in webroot/test.php
   * Remember to check these values after moving to production server
Project baked successfully!

Security.saltとSecurity.cipherSeedは勝手に生成してくれるようです

CAKE_CORE_INCLUDE_PATHを変えます

$ vim app/webroot/index.php

define('CAKE_CORE_INCLUDE_PATH',  ROOT . DS . 'Vendor' . DS . 'cakephp' . DS . 'cakephp' . DS . 'lib');

autoloaderを調整します

$ vim app/Config/bootstrap.php

// composerのautoloadを読み込み
require ROOT . DS . 'Vendor/autoload.php';

// CakePHPのオートローダーをいったん削除し、composerより先に評価されるように先頭に追加する
// https://github.com/composer/composer/commit/c80cb76b9b5082ecc3e5b53b1050f76bb27b127b を参照
spl_autoload_unregister(array('App', 'load'));
spl_autoload_register(array('App', 'load'), true, true);

ROOTが作成したappの一つ上、DSはDIRECTORY_SEPARATORで、ディレクトリの区切り文字です

データベースを用意します
mysqlを入れていたので、cakephpという名前でcreate databaseしておいて
設定ファイルのベースをコピー
$ cp app/Config/database.php.default
$ vim app/Config/database.php

データベース名、データベースユーザー、パスワードを変更します

で、画面にアクセスすると
cakephp-top

DebugKitを入れてない他はクリアしました

参考:
Cakephpでルーティングが動かない!? – bgbgbg