スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Tag:スポンサー広告 

【PHP/SQL】プリペアドステートメントでLIKEを含むSQLを発行する時の%の扱いについて

PHPからMySQLやSQLiteに対してSQL文を発行するときは大抵PDOなどのデータベース抽象化モジュールを使うと思います。

さらにはSQLインジェクションの脆弱性を考慮し、プリペアドステートでSQLを発行するかと思います。

今回はそのプリペアドステートメントを発行する時にSQLにLIKEを入れる場合に部分一致をさせるための%の扱いでハマったことがあったのでちょっと書き残したいと思います。

書いていた処理をすべてのせる事はしませんが、以下のような処理を書いた時にうまく部分一致で引っ掛けることができませんでした。



これはそもそもの使い方が間違っています。

正しくは



とするのが正しいですね。

どうやら

http://www.php.net/manual/ja/pdo.prepare.php

によると

SQL ステートメントは、文が実行されるときに実際の値に置き換えられる 0 個もしくはそれ以上の名前 (:name) もしくは疑問符 (?) パラメータマークを含むことができます。



とのことなので%などはステートメントに含めることができないということですね。

普段あんまりLIKEを使用しないのでうっかりハマってしまいましたが、結構常識的なことっぽいので恥ずかしですが、書き残しておきます。
スポンサーサイト
テーマ : プログラミング
ジャンル : コンピュータ

Tag:PHP  Trackback:0 comment:2 

【Tips】Fedoraにnginxを入れてPHPを使う方法

nginxとは?
エンジンエックスと読みます
軽量で高性能なWebサーバだそうです

軽量なWebサーバといえばLighttpdなどが有名かもしれませんが、このnginxというのもなかなか優れているという噂を聞きつけ早速いじってみました

今回は導入編として

Fedora10に導入し、FastCGIを利用してPHPをうごかしてみるところまでやってみたいと思います

1. nginxのインストール
sudo yum install nginx

ネット上を見かけると自分でmakeしてることが多かったのですが、yumパッケージで用意されているようなのでこちらでインストールします

2. FastCGIのインストール
sudo yum install lighttpd-fastcgi

どうやらlighttpd-fastcgiに含まれるspawn-fcgiというのが使えるらしくまとめてインストールします

このspawn-fcgiというものを使うことによって、Webサーバとは独立したプロセスとしてcgiのプロセスを簡単に用意できるようです

文字通りfcgiプロセスを産み出すわけですね

3. nginxの起動
sudo /etc/init.d/nginx start

ひとまずどんなモノなのか起動してみたくなったのでとりあえず起動してみました

いつも使っているapache(httpd)と同じように

/etc/init.d/nginx start
nginxの起動

/etc/init.d/nginx stop
nginxの停止

/etc/init.d/nginx reload
設定の再読込み

などのコマンドが用意されています

さてブラウザで確認すると以下のような画面になるかと思います



4. nginxのログの確認
アクセスログ
tail -f /var/log/nginx/access.log


エラーログ
tail -f /var/log/nginx/error.log


ちゃんとfavicon.icoがないと怒られていますね(笑)

5. PHPを実行するcgiプロセスを立ち上げる
sudo spawn-fcgi -a 127.0.0.1 -p 8080 -u nginx -g nginx -f /usr/bin/php-cgi

この意味はなんとなくわかるかと思いますが

アドレスは127.0.0.1
ポートは8080番
cgiは/usr/bin/php-cgi
プロセスのユーザ、グループはnginx

という設定でfcgiプロセスを生成するという意味になります

実行してみると

spawn-fcgi: child spawned successfully: PID: 2041

のような出力が得られます。この場合はプロセス番号2041でFastCGIが動いたということになります

6. nginxの設定ファイルの変更

設定ファイルは
/etc/nginx/nginx.conf
になります

location ~ \.php$ {
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:8080;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
include fastcgi_params;
}

このような設定をひとまずします

ほとんど手順5でやったのと合っているので分かりやすいと思いますが

fastcgi_paramの部分だけは少し話しておきます

そのままですがfastcgi_paramはFastCGIに対して渡すパラメータと値のようですね

この場合だと

スクリプト名(SCRIPT_FILENAME)は

/usr/share/nginx/html$fastcgi_script_name

ですということになりますね

nignxに対してリクエストが来たスクリプト名を表すのが

fastcgi_script_name

になります

つまり

例えばブラウザで

http://host/test.php

というURLをリクエストすると

スクリプト

/usr/share/nginx/html/test.php

がFastCGIにより実行されるということですね

7. PHPが動くのか実際に実験

/usr/share/nginx/html/test.php





と保存しておきます

そしてブラウザから

http://host/test.php

とかすると



と表示され無事nginxでPHPが使えているようです
テーマ : UNIX/Linux
ジャンル : コンピュータ

Tag:PHP  Trackback:0 comment:0 

【PHP】相変わらず慣れないPHPの条件分岐(文字列と数値の比較)

PHPの条件分岐で困ったことがある人は多いのではないでしょうか

最近やらかした失敗の内容をまとめてみたいとおもいます

いきなりですが

$str = '1から始まる文字列';

if( 1 == $str )
{
  echo 'hello';
}

helloという文字列は出力されると思いますか?







helloは表示されます

かなりびっくりしました

当然の事ながら

文字列の'1'と数値の1は==で評価してしまうとtrueになるのはPHPの世界では結構有名ですよね

まさか

1から始まる文字列と数値の1が==で評価するとtrueになるとは

まあ、僕がやらかした失敗はそもそも==じゃなくて===で評価しとけということでもあるのですが(汗)

念のため数パターン実験してみました

$str = '1から始まる文字列';

if( 1 == $str )
{
  echo '表示されます';
}

if( 1 === $str )
{
  echo '表示されません';
}

if( '1' == $str )
{
  echo '表示されません';
}

if( '1' === $str )
{
  echo '表示されません';
}

どうやら

1 == '1から始まる文字列'

はtrue

'1' == '1から始まる文字列'

はfalse

と評価されるみたいですね

ちなみに当然の事ながら1だけで起きる現象ではありません

2でも起きるし、意外なことに2桁の数字でも全く同じ現象がおきます

2 == '2から始まる文字列'

10 == '10から始まる文字列'

はともにtrueと評価されます

数値で始まらず途中に数値が入るものと数値の比較ではおきませんでした(このパターンで起きたら本当にびっくりです)

1 == '途中に1を含む文字列'

はfalseと評価されます

結構小さなことですか、驚きました
テーマ : プログラミング
ジャンル : コンピュータ

Tag:PHP  Trackback:0 comment:0 

【PHP】CodeIgniterでHello,World!

PHPのMVCフレームワークであるCodeIgniterを動かしてみました。

今回はCodeIgniterのMVCのうちCVを使ってHello, World!を表示してみます。

WebサーバとしてApacheを使う前提でいきます

1. CodeIgniterのダウンロード & 解凍
ダウンロード
wget 'http://sourceforge.jp/frs/redir.php?m=keihanna&f=%2Fcodeigniter%2F43934%2Fci-ja-all-in-one-1.7.2-1.zip'

解凍
unzip ci-ja-all-in-one-1.7.2-1.zip

解凍すると

ci-ja-all-in-one-1.7.2-1

というディレクトリ名になりますが、以下では簡略化のため

CodeIgniter

というディレクトリ名ということで進めます。

2. エントリポイントを確認
CodeIgniter上のすべてのアプリケーションへのリクエストは

CodeIgniter/index.php

を通ります

3. MVCのC=Controllerを書く

CodeIgniter/system/application/controllers/

以下にコントローラを書きます。

今回はHelloコントローラを書くことになります。

hello.php
<?php
class Hello extends Controller{
function Hello(){
parent::Controller();
}

function index(){
$data['hw'] = 'Hello, World!';
//hello.phpというビューを読み込む
$this->load->view('hello', $data);
}
}
?>

4. MVCのV=Viewを書く

CodeIgniter/system/application/views/

以下にビューを書きます。

今回はコントローラで指定してる、hello.phpを書くことにします。

hello.php
<?php echo $hw; ?>

5. RewriteまたはScriptAliasなどを設定

今回はScriptAliasをつかって1行設定でいきます

ScriptAlias /hello "/エントリポイントへのPath/index.php/hello"

と設定をしてApacheを再起動してください。

6. Hello,World!が表示されることを確認

ブラウザから

http://あなたのサーバ/hello

として

Hello,World!

が表示されていればひとまずHello,World!の出力実験はOKのはずです。
テーマ : プログラミング
ジャンル : コンピュータ

Tag:PHP  Trackback:0 comment:0 

【PHP】ZendFrameworkでHello,World

ちょっとこれからフレームワークのお世話になりたいと思うので
いろいろいじってみたいと思います

まずはZendFrameworkから始めてみたいと思います

(0)ZendFrameworkの導入
* ダウンロード
wget http://framework.zend.com/releases/ZendFramework-1.9.2/ZendFramework-1.9.2.tar.gz
* 展開
僕はtar.gzを落としたので
tar xvfz ZendFramework-1.9.2.tar.gz
により展開

以下バージョン番号は適宜読み替えてください

(1)libraryの設置
(0)で展開したディレクトリZendFramework-1.9.2の中に
libraryというディレクトリがあります
このlibraryディレクトリ以下のライブラリ群はWebアプリケーション以外でも活躍できるライブラリ郡として使えることがあります
このlibraryディレクトリを開発するWebアプリケーションから読み込みできる場所にコピーまたは移動をしてください

(2)アプリケーションディレクトリの作成
ZendAppという名前でアプリケーションディレクトリを作成しました

ZendApp
     |__controllers
     |__models
     |__views

というようにMVCに対応する各ディレクトリがぶら下がる感じです
今回Hello,Worldを出力するために

controlloers
  |__HelloController.php

views
      |__scripts
               |__hello
                       |__index.phtml

という構成で作成していきます

【HelloController.php】
<?php
require_once '/(1)で設置したlibraryへのPath/Zend/Controller/Action.php';

class HelloController extends Zend_Controller_Action
{
public function indexAction()
{
$this->view->assign('hoge', 'Hello, World');
echo $this->render('index');

}
}
?>

【index.phtml】
<html>
<head>
<title>Hello, World!</title>
</head>
<body>
<h1><?php echo $this->hoge; ?></h1>
</body>
</html>

(3)DocumentRoot以下
* index.php
Webアプリケーションのエントリポイントとなる
以下コードの例
<?php
set_include_path('/(1)で設置したlibraryへのPath/');
require_once('/(1)で設置したlibraryへのPath/Zend/Controller/Front.php');
Zend_Controller_Front::run('/アプリケーションディレクトリ/ZendApp/controllers');
?>

.htaccess
rewriteの設定などをおこなる
hogehoge.confなどの設定ファイルに記述してもOK

.htaccessを使う場合
.htaccessによるApacheの設定の上書きを許可させるために
DocumentRoot内のAllowOverrideディレクティブを

<Directory "DocumentRoot">

AllowOverride All


</Directory>

というように変更するのを忘れないように

(4)URLをたたいてみて見る
http://あなたのURL/Hello/

とすると

ちゃんと
Hello,World
が確認できますね

(5)初めてZendを展開してみて
library以下が結構いろいろ使えそうと思ったのが一番ですね
Webサービス作るだけでなくいろいろなプログラミングにおける問題を解決してくれそうなものがありそうです。
じっくりとよく見てないので実際どうなのかわかりませんが。
テーマ : プログラミング
ジャンル : コンピュータ

Tag:PHP  Trackback:1 comment:0 

プロフィール

6rats

Author:6rats
こんにちは、ITベンチャーで働くエンジニアです
主に自分の周りで起きた技術的なことをメモとして書き残して行きます。
Android以外にもRuby/Ruby on RailsやFuelPHPなどなどたまにやります。基本的なスタンスとしては興味があるもしくは必要になったらいろんなことにチャレンジします。
最近はiOSアプリ開発を始めています。

購読
follow us in feedly
個人プロダクト

Androidアプリ

Twitterクライアント

Webアプリケーション

EcPriceWatch(Amazon価格の推移を計測、最安値を知らせるサービス)
Google AdSense
ブログ村
にほんブログ村 IT技術ブログへ
にほんブログ村
ブロとも申請フォーム

この人とブロともになる

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。