PHPについて

SmartyのテンプレートでFizzBuzz

Smartyのテンプレートでみんな大好きFizzBuzzしたいと思ってやってみた。
あんまり意味はないです。
sectionをfor文のように使う。

コード

{section name=cnt start=1 loop=101}
{if $smarty.section.cnt.index is div by 15}
<span style="color:#a60a0a;font-weight:bold;">{$smarty.section.cnt.index}</span>
{elseif $smarty.section.cnt.index is div by 5}
<span style="color:#9ecf27;font-weight:bold;">{$smarty.section.cnt.index}</span>
{elseif $smarty.section.cnt.index is div by 3}
<span style="color:#0a9ebf;font-weight:bold;">{$smarty.section.cnt.index}</span>
{else}
{$smarty.section.cnt.index}
{/if}
{/section}

実行結果

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100

処理が遅いのは毎回loopを通すからか?もうちょっとスマートな書き方があるなら知りたい。
Smartyでは「割り切れるとき」をis div by...と直感的に書けるので便利です。

先日のエントリーで、PHPで作成したアクセスログが開かなかった件について修正しました。

アクセスログ
※IPアドレスが残ります。注意。

内容とバグ

<?php
print(date("Y/m/d H:i:s ") . "<br /> \n");
print("<p> access log : </p> \n");
$filepointer=fopen("./log/php-accesslog", "a+");
flock($filepointer, LOCK_EX);
fputs($filepointer,date("Y/m/d H:i:s ") . $_SERVER["REMOTE_ADDR"] . "\n");
flock($filepointer, LOCK_UN);
rewind($filepointer);
while(!feof($filepointer)){
    $fileline = fgets($filepointer);
    print($fileline . "<br />");
}
fclose($filepointer);
?>

これをlocalhostで実行すると問題なく動きましたが、サーバーにあげると動きませんでした(ファイルを開いている状態でフリーズする)。考えられる原因は以下と思い調べてみました。

  1. そもそも条件式が違う
  2. サーバ変数が利用可能でない
  3. パーミッション

1.条件式は大丈夫か

$filepointer=fopen("./log/php-accesslog".........

のパスを絶対に変えてみたり

while(!feof($filepointer)){

の!を外してみたりしましたが、はい。違いますね。次。

2.利用可能なサーバ変数を調べる

<?php
foreach($_SERVER as $server_key => $server_val){
  echo $server_key."<br />\n";
}
?>

を実行 → 結果
元ソースにあるREMOTE_ADDRは使用可能でした、ので違いますね。次。

3.パーミッションを変えてみる

「それパーミッション合うとる?」(前の会社のプログラマの兄ちゃんの口癖)

を思い出して、./log/php-accesslogの属性を777にしてみました。 → 結果
成功ですね。書き込み権限が無かったのでプログラムが「わわわ書き込めないっ」と言いながらループ内をぐるぐるしていた模様です。ええ。簡単なことでしたよ。

追記(2008.07.23)

@sinsengumiに指摘されたので属性変更しましたーありがとう!

PHP勉強中

| | コメント(0) | トラックバック(0)

「技術がすべてだ!」にあてられて、私もPHPを基礎から始めています。
目標はちょっとした会員サイト作れるようになることです(あー‥言っちゃった‥‥)

勉強中に作ったものを置いておきます、が、他の方の参考にはならないかも。
あくまで自分用の備忘録。呆れるぐらい簡単なことしかしてなくてすみませーん!

上記の内容をzipであげてみました。
来年あたり、見返して恥ずかしくなってるといいなぁ、と思います。