Skip to main content.
手持ちのサーバにApache入れるとだいたいPHPはモジュール版です。
レンタルサーバではセキュリティ上の理由からCGI版だったり、モジュール版とCGI版とを選択できたり。

おおまかな違いは

perlやPHPについて、CGI方式とモジュール方式の比較
http://oshiete.goo.ne.jp/qa/4155506.html

より

モジュール:
スピードが速い(起動終了処理が不要)
メモリ使用量が多い(アクセスしていなくてもメモリが解放されない)
rootやapache権限で実行される

CGI:
スピードが遅い(起動終了処理が必要)
メモリ使用量が少ない(アクセスがなければメモリを使用しない)
どんな言語でも作成できる
SuExecを使用できる(ユーザー権限で実行できる)

くらいの認識でOKかと。

んで、あんまり使う機会は無いかもですが一応モジュール版からCGI版への切り替え方法をメモ。
 
続きを読む
 
タイトル通り、CentOS5.7の環境でutterのリポジトリでPHPを5.1から5.2へアップデートさせようとしたら、「Error Summary」とかいろいろ出たので、調べてみたらPHP5.1から5.3へアップデートさせる記事を発見。

やってみたらうまくいったのでメモメモ。

CentOS5.7へPHP5.3.3のインストール
http://www.netrail.info/?p=1033


上記ページにあるように、
#ひとまず通常のphp関連のものを削除
yum remove php-*

#php53とつくものをインストール
yum install php53 php53-mbstring php53-common php53-gd ↓
php53-pdo php53-mysql php53-pgsql php53-cli


とやってApacheを再起動するだけでOKでした。
こちらとしてはJSON関数が使えるのなら、PHP5.2でも5.3でもどちらでも良いんよ(・ω・`)

んで、eAcceleratorはphp53-develを入れた後、ソースで直接インストールして終了。
最近、get_headersという関数を知りました。
文字通りヘッダ情報を取得する為の関数です。
PHP5で使える関数です。

これを使えば、例えば
相互リンク先のURLが404エラーになっていないか、
指定されたURLのファイルがあるかないか、
またリダイレクトの飛び先の情報などの取得が簡単にできるわけですな。

以下、PHPマニュアルより引用

ソース:
<?php
$url = 'http://www.example.com';
print_r(get_headers($url));
?>

結果:
Array
(
    [0] => HTTP/1.1 200 OK
    [1] => Date: Sat, 29 May 2004 12:28:13 GMT
    [2] => Server: Apache/1.3.27 (Unix)  (Red-Hat/Linux)
    [3] => Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
    [4] => ETag: "3f80f-1b6-3e1cb03b"
    [5] => Accept-Ranges: bytes
    [6] => Content-Length: 438
    [7] => Connection: close
    [8] => Content-Type: text/html
)


リダイレクトの場合は"Location: 〜"というのが含まれるのでそれを調べればいいわけですね。
もっと早くに知っておきたかった。

PHP: get_headers - Manual
http://php.net/manual/en/function.get-headers.php


ユーザ登録やイベント登録のフォームを度々作ることがあるのですが、毎回

『47都道府県の名称をチマチマ入れる作業はもう嫌だお。。。(;ω; )』


といい加減に思うようになってきたので、コピペできるようにメモ(PHP用)。
続きを読む
 
PCのファイル整理をしていたらtest.phpっていうのがあって中身を見てみたらFizzBuzz問題の解法コード。
FizzBuzzを初めて知った時に自分ならどうするかって考えて書いたことあったなぁと思い出しました。

ちなみに「FizzBuzz」とは

1から100まで順番に数えてもらうとする。
その時、3で割り切れる数字は「Fizz」、5で割り切れる数字なら「Buzz」、両方で割り切れる場合は「FizzBuzz」、それ以外ならそのまま数字を言う。

という遊びのことで、このアルゴリズムをプログラムで作れというのが「FizzBuzz問題」です。
世界のナベアツの「3の倍数だけアホになる」と同じジャンルの遊びですね。

プログラマ志望の人に入社試験でこの問題を解かせてみると意外とできない人が多かったということで少し話題になったやつです。
たしかアメリカの話だったような気がします。

アルゴリズムとしては非常に簡単ですが、入社試験というプレッシャーのかかる環境で、しかも制限時間が5分くらい(でしたっけ?)でプログラムを書けと言われると私もパニックになるだろうなぁと思います。

せっかく出てきたので、そのtest.phpの中身をそのままペタッとコピペ。

<?php
function FizzBuzz($i = 0) {
  if ( ++$i > 100 ) return;
  if ( $i%3 == 0 ) echo("Fizz");
  if ( $i%5 == 0 ) echo("Buzz");
  if ( $i%3 != 0 && $i%5 != 0 ) echo($i);
  echo "<br />";
  return FizzBuzz($i);
}
FizzBuzz();
?>

PHPが5.2以上で無いと動作しないっぽいわがままな子猫ちゃんプログラムの為にPHPをアップデートした際のメモ。

環境はCentOS5.5。
このOSをインストールした時点でのPHPのバージョンは5.1.6でした。
デフォルトのリポジトリではPHPをyumでアップデートしても5.2までいかないみたい。


下記リンクを参考に作業。

つれづれなる備忘録 : CentOS5.2にPHP5.2をYumでインストール
http://blog.livedoor.jp/kuroranger/archives/65182380.html


というかやってることはほとんど同じです。

#新規にファイル作成
vi /etc/yum.repos.d/utter.repo
--------------------------
[utter]
name=Jason's Utter Ramblings Repo
baseurl=http://www.jasonlitka.com/media/EL$releasever/$basearch/
enabled=0 ← ここは0にしておくのが無難
gpgcheck=1
gpgkey=http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka
--------------------------

# PHPのアップの時だけリポジトリに[utter]を指定
yum --enablerepo=utter update php* -y

これでPHPが5.2.16にアップデートされました。
今のサーバにeAcceleratorを入れていたハズと思っていたら入っていなかったので、改めて下記を参考にさくっとインストール。
CentOSにyumでeAcceleratorをインストールする - toytools log : kaw

eAcceleratorとは、PHPで一度行った処理をコンパクトにまとめて、次回同じ処理が行われた際にはそれをさっと呼び出すことによって処理の高速化を図るというツールです。

仮面ライダーで例えるとPHPがアクセルでeAcceleratorがトライアルメモリなようなもんです。
うん、分かりにくいな(・д・´)。

で、とりあえずインストールが済んだ後に細かい設定をしようとググッてみると、上位に出てくるサイトのほとんどがeAcceleratorの設定を「/etc/php.ini」内で行っているのがちょっと気になったわけです。

もし「/etc/php.ini」内で設定してからphpinfo()などで値を見たときに設定が変わってないー!、なんてことがあった場合は「/etc/php.d/eAccelerator.ini」をチェックした方がいいかも。
eAccelerator.iniの中に書かれている内容で設定が上書きされている可能性があります。

そういうわけで「eAccelerator 設定 変わらない」の検索で
引っかかりやすそうなタイトルにしてみました♪〜(´ε`)
連想配列の各要素を個別の変数にするのに今までは、
foreach( $arr as $key => $value ) { $$key = $value; }
でやってたけど、
extract( $arr );
でできたのね・・・。
どっちも1行だからあまり変わらないけど、後者の方はスマートっぽく見える。(゜д゜

ただ、PHP: extract - Manualにも

extract() をユーザー入力 ($_GET や $_FILES など) のような信頼できないデータについて使用しないでください。 もし行う場合、例えば register_globals を信頼しているような古いコードを一時的に実行したい場合、 EXTR_SKIP のような extract_type の値が上書きされていないことを確認してください。そして php.ini の variables_order で定義されたものと同じ順で展開すべきであることに留意してください。

と書いてあるように$_GETや$_POSTで使うのは、ちょっと怖ひ。

極端な例を挙げるとすると、下記のような身長と体重の数値を送ってBMI値を計算する処理を作ったとしても
hoge.php?bmi=30
$weight = $_POST['weight'];
$height = $_POST['height'];

// BMI値 = 体重[Kg] ÷ (身長[m]×身長[m])
$bmi = $weight / ( $height * $height );

extract( $_GET ); // ここで$bmi=30となる!

if ( $bmi > 22 ) {
echo "デブ!";
}
「?bmi=30」とアクセスされたら、身長・体重にかかわらずあなたは常に「デブ!」である。

こんな風にユーザが変数の値を任意に操作することが可能になるので、常にデブと言われるだけならまだしも、SQL文や処理の大事なフラグも変更される恐れがありセキュリティ上好ましくない。

まぁ、使いどころに気をつけましょうというお話。
あとで読もうかな。

PHP開発者のMySQLの間違いトップ10

PHP5の環境ならググればstream_context_create()とfile_get_contents()を使った方法がすぐ出てくるけど、あいにくPHP4での方法がなかなか見つからず。
適当に検索しまくったらこちらのサイトに載ってたのを発見。

これは目からう●このテクだったのでメモメモ。


// UserAgent設定
$ua = 'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US)
AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.38 Safari/532.0';

// リファラ設定
$ref = 'http://blog.rutti.net/';

// php.ini設定変更
ini_set('user_agent', "{$ua}\r\nReferer: {$ref}");

// 取得先URL
$url = "http://www.hogehoge.com/";

// 取得
$data = file_get_contents($url);

«Prev || 1 · 2 · 3 · | Next»