Skip to main content.

画像の有無のチェックやリダイレクト先の取得に使えるget_headers関数

最近、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


selectタグで都道府県

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

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


といい加減に思うようになってきたので、コピペできるようにメモ(PHP用)。

PHPでFizzBuss問題を再帰的に解く

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();
?>

yumでPHP5.1からPHP5.2へアップデート

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で設定が変わらないと思ったら

今のサーバに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 設定 変わらない」の検索で
引っかかりやすそうなタイトルにしてみました♪〜(´ε`)

配列の各要素を個別に変数へインポートする(PHP)

連想配列の各要素を個別の変数にするのに今までは、
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文や処理の大事なフラグも変更される恐れがありセキュリティ上好ましくない。

まぁ、使いどころに気をつけましょうというお話。

MySQLの間違い

あとで読もうかな。

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

PHP4のfile_get_contentsでUserAgentとReffererを簡単設定

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);

EC-CUBEで納品書のPDFのサイズを変更

「EC-CUBEの管理画面でボタンを押すと吐き出される納品書のPDFファイルのサイズをA4以外のものに変更したい」と言ったお話を受け、
解決したもののググってもヤフっても情報が一切出なかったので、
もし似たようなことでお悩みの人がいたら良かったら見ていって的な感じでのメモ。
そして、Googleで「EC-CUBE,納品書,サイズ変更」でSEOを上げちゃいなYO、メーン。


と言っても、手を加える箇所はたったの2箇所なんだけども。。。(-_-;)
ちなみにバージョン2.4.4に関しての話。
他のバージョンでの確認はしてないのであしからず。



手順1.
  eccube/data/module/pdf/fpdf.phpの「FPDFクラス」のコンストラクタ真ん中辺りの「Page format」に関しての処理
if($format=='a4') $format=array(595.28,841.89);
というif文が書いてあるので、そこに任意のサイズの分岐を挟む。

手順2.
  同じ階層のeccube/data/module/pdf/japanese.phpの「PDF_Japaneseクラス」というのが上記の「FPDFクラス」の子孫(3つくらい下のサブクラス)なので「PDF_Japaneseクラス」にコンストラクタを下記のように定義。
function PDF_Japanese ($orientation='P',$unit='mm',$format='A4') {
parent::fpdi($orientation,$unit,$format);
}




これでOK。
PDF_Japaneseクラスを初期化する際に追加したサイズのフォーマットを引数に指定すれば任意のサイズでPDFを吐き出してくれる。

PHPでPOST送信

このブログの記事が勉強になったのでメモ。

とても簡単にPHPからPOSTリクエストを送信する方法【PHP】 - Programming Magic

file_get_contents()で、POSTデータまで送ってくれるのを初めて知りました。
まさにサバからウロコが落ちたっ!(゜A゜

C言語で書いた場合のめんどくささを考えるとこのお手軽感はキュンキュンきます。
«Prev || 1 · | Next»