2010/05/26

CakePHPで自動レンダリングをオフにする

CakePHPはデフォルトで自動レンダリングがオンになってる。
なので、アクションが呼ばれると自動で「アクション名.ctp」が
呼ばれる。この機能がウザいときはオフにしましょ。

class CustomersController extends AppController {
// falseにすると自動レンダリングがOFFになる
var $autoRender = false;
}

2010/05/23

フォルダ内の画像数を数える

PHPで 特定のディレクトリやフォルダ内の画像数を数える方法。
なお、拡張子を変更すれば特定のファイルの数をカウントできる。

<?php
$targetDir = 'C:\xampp\htdocs\test';
$jpegFiles = glob($targetDir. DIRECTORY_SEPARATOR . "*.jpg");
echo count($jpegFile);

2010/05/22

CakePHPで半角英数字以外を削除する

半角英数字以外を削除したい場合は多い。
今回はCakePHPでの手法を紹介。

▼半角英数字と半角スペース以外を削除する(!!が消える)
$text = "CakePHP is PHP's Framework!!";
$text = Sanitaize::paranoid($text, array(" "));

▼処理後の$textの中身
CakePHP is PHP's Framework

2010/05/20

ローカルでは動くのにサーバでは動かない時の対処法

ローカルでは動くのにサーバでは動かない。よくある話ですな。
 画面が真っ白になるとか、Permission deniedとか。

画面が真っ白になる際は、原因を特定するために
画面にエラーメッセージを表示させるのが得策かと。
以下の一文をソースの先頭にでも埋めるとよい。
真っ白画面からおさらばできるはず。

ini_set('display_errors', 1);
http://php.net/manual/ja/function.ini-set.php

Permission deniedエラーが出ている際は、
パーミッションの設定が適切でないので、
適切なパーミッションを設定してネ(・ω・`)

http://ja.wikipedia.org/wiki/%E3%83%91%E3%83%BC%E3%83%9F%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3
http://ja.wikipedia.org/wiki/Chmod

PHP ベンチマーク

PHP版のベンチマークを作ってみた。
測りたい処理を//処理の部分に書くとよろし。

<?php
$start_m = microtime();
$start = time();

for ($i = 0; $i < 100000000; $i++) {
    // 処理
}

$end_m = microtime();
$end = time();
$bench = ($end - $start) + ($end_m - $start_m);
var_dump($bench);

2010/05/18

CakePHPでリダイレクトする

CakePHPリダイレクトするにゃー、以下のようにするです。

$this->redirect("/customers/index");

2010/05/17

CakePHPでSQLコマンドを実行する

CakePHPには簡略化されたO/Rマッッパーを持ってるけど、
自分でサクッとSQLを実行したいときがある。
以下で行えます。

$this->Customer->execute("TRUNCATE customers");

2010/05/16

PHPでタグクラウドを作る

はてななどで使われているタグクラウドを作ってみた。
ぶっちゃけPEARのライブラリに存在するんだけどねw
http://pear.php.net/manual/ja/package.html.html-tagcloud.php

ま、車輪の再開発がどうのうこうのって話もありますが、
そこから何かを得ることができれば無駄じゃないはず。

▼ソース
<?php
echo <<<HTML
<style>

ul.tagCloud {
    margin: 0;
    padding: 0.5em 10px;
    line-height: 1;
    font-family: Arial, Helvetica, sans-serif;
    font-size: 13px;
}

ul.tagCloud li {
    margin: 0;
    padding: 0;
    display: inline;
    font-size: 100%; /* ここで相対的に文字サイズを変更 */
}

ul.tagCloud li a {
    text-decoration: none;
}

/* タグレベル1~6 */

ul.tagCloud li.level1 a {
    font-size: 167%;
    color: #db00aa;
    font-weight: bold;
}

ul.tagCloud li.level2 a {
    font-size: 136%;
    color: #e771b4;
    font-weight: bold;
}

ul.tagCloud li.level3 a {
    font-size: 122%;
    color: #bf79b5;
}

ul.tagCloud li.level4 a {
    font-size: 114%;
    color: #a57c9d;
}

ul.tagCloud li.level5 a {
    font-size: 92%;
    color: #897c9d;
}

ul.tagCloud li.level6 a {
    font-size: 77%;
    color: #567d9d;
}

/* オンマウス色 */
ul.tagCloud li a:hover {
    color: #000;
}

</style>
HTML;

class Keyword {

    private $keyword;
    private $url;
    private $class;

    public function Keyword($keyword, $url, $class) {
        $this->keyword = $keyword;
        $this->url = $url;
        $this->class = $class;
    }

    public function getKeyword() {
        return $this->keyword;
    }
    public function getUrl() {
        return $this->url;
    }
    public function getClass() {
        return $this->class;
    }
}

$keywordList[] = new Keyword('Zend Framework', 'http://yahoo.co.jp', 'level2');
$keywordList[] = new Keyword('CakePHP', 'http://yahoo.co.jp', 'level3');
$keywordList[] = new Keyword('symfony', 'http://yahoo.co.jp', 'level1');
$keywordList[] = new Keyword('Ethna', 'http://yahoo.co.jp', 'level6');
$keywordList[] = new Keyword('Mojavi', 'http://yahoo.co.jp', 'level3');
$keywordList[] = new Keyword('SilverStripe', 'http://yahoo.co.jp', 'level2');
$keywordList[] = new Keyword('Seagull', 'http://yahoo.co.jp', 'level6');
$keywordList[] = new Keyword('Joomla!', 'http://yahoo.co.jp', 'level1');
$keywordList[] = new Keyword('Midgard', 'http://yahoo.co.jp', 'level4');

echo "<div style=border: 1px; solid red; width:500px;>";
echo "<ul class=\"tagCloud\">";
foreach ($keywordList as $keyword) {
    echo "<li class='" . $keyword->getClass()  . "'><a href =" . $keyword->getUrl() .">" .$keyword->getKeyword() ."</a></li>";
}
echo "</ul>";
echo "</div>";

▼実行結果





2010/05/15

PHPの開発環境を作る(1) XAMPP

PHPが動く環境構築するには、少なくともApacheやPHPが必要。
データベースにはMySQLが多く使われたり。
PHP開発をしたくても初心者だと環境を作ることが困難だったりします。
そこで、楽に環境をつくることができるXAMPPを紹介します。

XAMPPとは、Apache、MySQLとWebプログラミング言語であるPHPや
Perlの4つの主要ソフトウェアとphpMyAdminなどの管理ツールなど、
いくつかの補助的なソフトウェアとライブラリモジュールが1つになってます。



以下、PHPの環境設定方法

※私はVista環境で環境を作ったけど、Windows系なら以下の方法でイケます。

1.以下からXAMPPをダウンロードする
apache friends
・XAMPP Windows版 1.7.3, 2009/12/23 と記載されている方の[EXE]をクリックし、
ダウンロードする

2.ダウンロードしたファイルをダブルクリックしてXAMPPをインストールする









 




なお、C:\xampp となるようにしてください。

3.Apacheを起動する
[スタートメニュー]→[プログラム(P)]→[XAMPP for Windows]→[XAMPP Control Panel]を
クリックする。すると下記のウィンドウが表示されるので[Apache]の右側のStartボタンを
押すと、Apacheが起動する。














 


4.Webアプリケーションを作る!!
たとえば、C:\xampp\htdocs\test とかネ。
次に、以下のソースをコピペして作ったファイルをtest 配下に設置し試してみてください♪▼index.php
<html>
<body>
<?php
echo 'Hello サクサクPHP!!';
?>
</body>
</html>

拡張子は「.php」にしてネ!



最後に…
http://localhost/test でWebアプリにアクセスできます☆
「'Hello サクサクPHP!!'」と表示されるはずです。
いえーい♪



C:\xampp\htdocs\の下に好きな名前でフォルダを作る。

CakePHPでテーブルの作成日時、更新日時を自動的に更新させる

CakePHPは、ある規則に従ってテーブルを作ると、
テーブル作成日時更新日時自動的更新してくれます。

以下、手自動更新のためのテーブル作成規則。
  1. カラム名:データ挿入日時はcreated、修正日時はmodified または updated
  2. 型:datetime
  3. NULL:許可
  4. デフォルト値:空文字
これさえ守れば、いちいちupdateする際に更新日時を気にする
必要がなくなります。小さいことですが、さりげなくありがたい
(*゚∀゚)=3ハァハァ


CakePHPのsaveメソッドの戻り値

saveメソッドの戻り値について。
成功したらtrue、失敗したらfalseを返す。


のではなく…
  • 成功したら、modelにセットしたデータを返す
  • 失敗したら、falseを返す
  • modelにセットしたデータが正しい形でないときtrueを返す
割とトリッキーなメソッドですよネ。
戻り値は成功・失敗の2値(true or false)にして、
成功した場合、第2引数にtrueが渡されたら
modelにセットしたデータを返す仕様の方がわかりやすいのでは…
(・ω・`)

PHP SwitchでPHP4とPHP5を簡単に切り替える

ソフトウェア開発においてバージョンに悩まされることがある。
PHPでは、PHP Switchを使うことでPHP4とPHP5を簡単に切り替えることが出来る。
なお、PHP Switchは
XAMPPに付属されている(=゜ω゜)ボー

▼使い方
C:\xampp\php-switch.bat

4を入力すると、PHPが 4 => 5 に切り替わります。

PHP4がアクティブな場合、同様に php-switch.batするだけで、PHPが 5 => 4 に切り替わる。

2010/05/13

Javaの変数名にひらながな、カタカナを使う

Javaの変数名にひらがなやカタカナって使えるの?
って質問がWeb上に溢れかえってます。なので、1例をご紹介。

public class Hoge {
public static void main(String[] args) {
boolean ω = true;

// 顔文字ループ(笑)
for (;ω;) {
System.out.println("※無限ループに入ります!");
}
}
}

下記サイトが参考になるかと。
5分でわかる今週のJava ホットトピック

2010/05/12

html_checkboxes拡張 N個目で改行させる

html_checkboxes は簡単にチェックボックスを作成する
Smartyのカスタム関数。

▼PHP
$technologyList['0'] ='symfony';
$technologyList['1'] ='CakePHP';
$technologyList['2'] ='Zend Framework';
$technologyList['3'] ='CodeIgniter';
$technologyList['4'] ='Maple';

▼Smarty
{html_checkboxes name="language" options=$technologyList separator="<br />"}

▼実行結果









上記の例では、チェックボックス1つ表示するごとにseparator属性で指定した
値で区切られてしまうため、3つ表示したら改行するように拡張

▼Smarty

{html_checkboxes name="language" options=$technologyList assign="checkboxes"}
{foreach from=$checkboxes item="checkbox"}
{$checkbox}{cycle values=",,<br />"}
{/foreach}

▼実行結果




若干ずれているのはtableタグとCSSを使えばサクっと直りますネ。

2010/05/11

PHPとは

PHPとは、プログラミング言語の1つ。
Microsoft WordやInernet Explorerもプログラミング言語を
使って作られている。ただし、PHPは主にWebアプリケーションの
開 発に使われます。

Webアプリケーションってのは以下のような
ブラウザを介して使うアプリだと思えばよいかと。

GREE
http://gree.jp/

Yahoo! ブックマーク
http://bookmarks.yahoo.co.jp/

ちなみに、上記サイトは2つともPHPによって作られ てます。

うん?プログラミング言語ってJavaとかC#とか色々あるけど、
PHPを使うメリットって何?と思う方もいますかね。
な ので、PHPのメリットとデメリットを挙げておきます。

メリット
・ 習得が簡単
・各種ライブラリが充実
・開発において単価が安い

デメリット
・関数名などに一貫性がない(開発において実害は無い)
・セキュアでない(開発において実害は無 い)

職業がエンジニアのため、日頃からPHPを触っているわけですが、
Webサイトを俳諧しているとPHPって?PHPとは?というキーワードを
見かけます (・ω・`)なので、自分なりにPHPの紹介をしてみた。