Posts Tagged “PHP”

見慣れないforの条件を見かけたので、実験してみた。$i++ と ++$i に、そんな使い分けるほどの差があるのかどうか。

$ php -v
PHP 5.4.36 (cli) (built: Jan  2 2015 09:31:47)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies
    with Xdebug v2.2.6, Copyright (c) 2002-2014, by Derick Rethans
<?php
$tmp = 1;
// Post-increment
$time_start = microtime(true);
for ($i=0; $i<100000; $i++) {
    $tmp = 1;
}
$time_end = microtime(true);
$time = $time_end - $time_start;
echo $time . "秒" . PHP_EOL;
 
// Pre-increment
$time_start = microtime(true);
for ($i=0; $i<100000; ++$i) {
    $tmp = 1;
}
$time_end = microtime(true);
$time = $time_end - $time_start;
echo $time . "秒" . PHP_EOL;

↑を実行した結果

0.0064029693603516秒
0.0063819885253906秒

10万回のループで、たった0.00002秒の差。個人的には、たったこれだけの差なら、わざわざ ++$i なんて使いたくない。返却値に細心の注意(++$iでインクリメント後の値か、$i++でインクリメント前の値かの注意)が必要となるのに、++$iを、forの条件で書かれたら、「何か$i++とは違う挙動をさせたいような特別意図があるのか?」と、ドキっとするじゃないか…。読み手のストレスが増えるデメリットに対して、得られるスピードのメリットは大きくなさそうだ。

【追記】
もっと驚きの結果が出た。上記の結果は、手元の iMac(Late 2015 3.3GHz 16GB) なのだが、どこぞのクラウドの 1CPU メモリ1GB の CentOS7 の PHP7 で同じコードを実行したところ、以下の結果だった。これは、先ほどの結果より、2倍程度遅く、0.007秒ほど遅い。ただでさえPHP7は爆速になったと言われているが、本当に速度を改善したいのなら、マシン自体の構成をまず検討するべきという結果ではなかろうか。

0.013155937194824秒
0.013364791870117秒

Comments $i++ と ++$i の速度の違いについて実験した はコメントを受け付けていません。

一時的なネタなのかと思ったら、まだ使えたので記念メモ。

www.php.net で「上上下下左右左右ba(Return)」と押して、画面左上のphpロゴ部分に注目。

Comments php.net でコナミコマンド はコメントを受け付けていません。

今日はPHP懇親会(http://events.php.gr.jp/events/show/59)に参加してきました!

全員発表ということで、予告していたZend PHP Certification的な何かということで、クイズをしてきました!
資料はこちら→(http://www.slideshare.net/lllnorikolll/zend-php5-certification-presentation)にUPしました。

問題1の方は、$cに入っているのは何でしょう?というもの。
正解はAのNULLなのですが、これ、functionにreturnが書いてないんですね。そんなわけでNULLです。

問題2の方は、一見普通なのですが、「<? ?>」が無いのでPHPとして動きません!というわけでDのこの中に答えはないが正解。

実はみんな飲みながらぐだぐだーっとなったあたりで発表するのを想定していたのですが、私が発表するころはまだお酒一滴も入らない状態だったので、かなり想定外(><)
でも、みなさん楽しんでいただけたようだったので、よかったよかった。

個人的に気になったことは、emacsの師匠であるsuzukiさんのNxhtmlと、connvoi_tyouさんの車庫入れが見事だった。(これは来ていた人にしかわからないネタかもしれないけれど・・・)

そして、会場の片隅では、そろそろSONYαを買いそうなm-takagiさんにα350を手渡し、実際に写真をとってもらうという別イベントが(笑)
近々αユーザがまた一人増えそうな予感です。

Comments 7 コメント »

PHPで日付の妥当性チェックをする際に、checkdate関数をよく使うのですが、
マニュアルをよくよく見ると・・・

「年は 1 から 32767 の間となります。 」と。。。

で、気になったわけです。


[テキストボックス]年[テキストボックス]月[テキストボックス]日

という見た目の入力項目で、年のテキストボックスに西暦の下2桁を入れた場合どうなるのか。
試しに「78」と入力してみると、みごと日付は妥当だと判断されるんですね。

で、そのままmysqlでdate型になっているカラムにインサートしちゃうとどうなるかというと。。。
そこは補完が効いて「1978」年で登録されると。
「08」と入力するとDBでは2008年で登録されると。

境目は「69」と「70」のところにあって、
「69」⇒「2069」
「70」⇒「1970」
と補完されました。

この境目については、epoch前とepoch後というWassrメッセージを頂いているのですが、ここでは割愛・・・

結局、年の部分に4桁のチェックは必要だなぁ。と、思った次第です。
あと、テキストボックスの場合は、左側に「西暦」とか表示してあげるとわかりやすいと思いました。

以上、メモ書きでした。

Comments 日付妥当性チェックをするときに はコメントを受け付けていません。

苦労したのでメモ。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$Url = 'http://ほげほげー.com/ほげー/ほげー.php';
$UserId = 'ユーザID';
$Pwd = 'パスワード';
$binaryData = @file_get_contents(’ファイル名’, FILE_BINARY);
 
$arrUrl = parse_url($Url);
$host = $arrUrl["host"];
$path = $arrUrl["path"];
$port = isset($arrUrl["port"]) ? $arrUrl["port"] : 80;
$socket = @stream_socket_client('tcp://' . $host . ':' . $port);
$strHeader = "POST " . $path . " HTTP/1.1\r\n" .
             "Host: " . $host . "\r\n" .
             "Content-type: application/jpeg\r\n" .
             "Authorization: Basic " . base64_encode($UserId . ":" . $Pwd) . "\r\n" .
             "Content-length: " . $entity-&gt;size . "\r\n" .
             "\r\n";
@fwrite($socket, $strHeader . $binaryData . "\r\n");
while ($buff = @fread($socket)) {
    $response .= $buff;
}
@fclose($socket);

ちなみにZendFrameworkのライブラリにZend_Httpという便利なものがあります!!!
Zend_Httpなら、下記のように書くだけ!

1
2
3
4
5
6
7
8
9
10
11
require_once 'Zend/Http/Client.php';
 
$Url = 'http://ほげほげー.com/ほげー/ほげー.php';
$UserId = 'ユーザID';
$Pwd = 'パスワード';
$binaryData = @file_get_contents(’ファイル名’, FILE_BINARY);
 
$client = new Zend_Http_Client();
$client-&gt;setUri($Url);
$client-&gt;setAuth($UserId, $Pwd, Zend_Http_Client::AUTH_BASIC);
$client-&gt;setRawData($binaryData, 'application/jpeg')-&gt;request('POST');

Comments ベーシック認証のかかっている別サイトにJPEG画像を生データでPOSTするメモ はコメントを受け付けていません。

Vista+xamppで、Gallery2のモジュールのひな形を作るメモだったりします。

[スタート]⇒[コンピュータ]を右クリック⇒[プロパティ]⇒[システムの詳細設定]⇒[続行]でシステムのプロパティ画面が開く。「詳細設定」タブの「環境変数」ボタンを押す。

「システムの環境変数の欄に「Path」という項目があるので、その項目を選択して「編集」ボタンを押す。「変数値」の最後に「;c:\xampp\php」を追記。

で、OKOKで画面を閉じていく。コマンドプロンプトを立ち上げっぱなしの場合は、一度閉じてから開く。

実行したいPHPファイルのあるディレクトリに移動して、「php ファイル名.php」で実行できる。

が!!!だ、Gallery2のモジュールのひな形を作成するcreate-module.phpをこの方法で実行すると、下記のメッセージが出る。

C:\xampp\htdocs\gallery2\lib\tools\creator>php create-module.php
You must run this from the gallery2 directory

しかたないので、C:\xampp\htdocs\gallery2まで移動してから実行したらうまくいった!

C:\xampp\htdocs\gallery2>php lib\tools\creator\create-module.php
What is the name of your module? [Hello World] (ここはモジュール名ほげほげー)
What is the id of your module? [wifigadgets] (ここはモジュールIDほげほげー)
* * * * * * * * * * * * * * * * * * * * * * * * * *
Your module is ready!  You must build it by doing:
 
  cd modules/(ここはモジュールIDほげほげー)/classes
  make && make clean
 
Then you can go to the Site Admin -> Modules
page and install and activate your module!
* * * * * * * * * * * * * * * * * * * * * * * * * *

Comments Vista+xamppでphpコマンドライン実行する。 はコメントを受け付けていません。

ZendFrameworkのZend_Pdf(http://framework.zend.com/manual/ja/zend.pdf.html

を、試してみました。
ところが、日本語が表示されない。

こちらのサイト→(Zend_Pdf で日本語が使えるようになってた
を教えてもらって、ここに書いているようにフォントファイルをダウンロードして配置したら、ちゃんと日本語が使えました!

2008/08/05現在、ZendFrameworkのZend_Pdfで利用できるデフォルトのフォント指定は、下記のもののみでした。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    const FONT_COURIER = 'Courier';
    const FONT_COURIER_BOLD = 'Courier-Bold';
    const FONT_COURIER_OBLIQUE = 'Courier-Oblique';
    const FONT_COURIER_ITALIC = 'Courier-Oblique';
    const FONT_COURIER_BOLD_OBLIQUE = 'Courier-BoldOblique';
    const FONT_COURIER_BOLD_ITALIC = 'Courier-BoldOblique';
    const FONT_HELVETICA = 'Helvetica';
    const FONT_HELVETICA_BOLD = 'Helvetica-Bold';
    const FONT_HELVETICA_OBLIQUE = 'Helvetica-Oblique';
    const FONT_HELVETICA_ITALIC = 'Helvetica-Oblique';
    const FONT_HELVETICA_BOLD_OBLIQUE = 'Helvetica-BoldOblique';
    const FONT_HELVETICA_BOLD_ITALIC = 'Helvetica-BoldOblique';
    const FONT_SYMBOL = 'Symbol';
    const FONT_TIMES_ROMAN = 'Times-Roman';
    const FONT_TIMES = 'Times-Roman';
    const FONT_TIMES_BOLD = 'Times-Bold';
    const FONT_TIMES_ITALIC = 'Times-Italic';
    const FONT_TIMES_BOLD_ITALIC = 'Times-BoldItalic';
    const FONT_ZAPFDINGBATS = 'ZapfDingbats';

Comments ZendFrameworkのZend_Pdfで日本語フォントを使う はコメントを受け付けていません。