PHP

2010年07月26日

このエントリーをはてなブックマークに追加

PHPからcurlを使うと何が良いのかは不明

要望があったので設定。

▼検証環境

  • Ubuntu-8.04 LTS
  • Linux 2.6.24-6-xen

▼環境構築


$ sudo apt-get install php5-curl
$ sudo /etc/init.d/apache2 restart

▼テストコード


<?php

if ($ch = curl_init('http://www.google.com/')) {
  echo curl_exec($ch);
  curl_close($ch);
}

この場合、Googleのトップページが表示されれば良い。




編集
@hansode at 14:40|PermalinkComments(0)TrackBack(0)

2009年01月20日

このエントリーをはてなブックマークに追加

作業概要

HTTPレスポンスヘッダーにPHPのバージョンを表示させたくないと言うので隠ぺい作業。
※Serverフィールドに出て来るPHPのバージョン情報非表示設定は今回の議論の対象外。

  • php.iniで「expose_php = Off」にする
  • Apacheをreloadして設定繁栄

作業内容

ディストリビューション名、バージョン確認


-bash-3.2# cat /etc/redhat-release
CentOS release 5.2 (Final)

php.iniのバックアップ


-bash-3.2# cp -pi /etc/php.ini /etc/php.ini.0

php.ini編集


-bash-3.2# vi /etc/php.ini
-bash-3.2# diff /etc/php.ini.0 /etc/php.ini
293c293,294
< expose_php = On
---
> ;expose_php = On
> expose_php = Off

設定反映前の状態確認


-bash-3.2# HEAD http://localhost/ | egrep ^X
X-Powered-By: PHP/5.2.6

設定反映


-bash-3.2# /etc/init.d/httpd reload
Reloading httpd:                                           [  OK  ]

設定反映後の状態確認


-bash-3.2# HEAD http://localhost/ | egrep ^X

出力されていない事を確認出来た。

続きを読む


編集
@hansode at 11:05|PermalinkComments(0)TrackBack(1)

2008年05月24日

このエントリーをはてなブックマークに追加

mybench - simple benchmarking tool for MySQL


mybenchはPerlで書かれたMySQLのベンチマークツール。
PHPに移植したのがphpmybench。

CodeReposに登録した。
http://coderepos.org/share/browser/lang/php/phpmybench/trunk

PHPで書かれたプログラムの
テストやベンチマークを取るのに使える。



編集
@hansode at 13:40|PermalinkComments(0)TrackBack(0)

2008年05月23日

このエントリーをはてなブックマークに追加

ラッパーを書いてる人が居た


変数展開が上手く行かないと言う。

  • CLIからApacheモジュール用変数で代入したい
  • パラメタはコマンドラインから引数で指定

$ command.php "\$_REQUEST[param] = 'value'" "\$_SERVERT[param] = 'host'"

何だかゴチャゴチャした
パっと見、長めのコードになっていた。

小さな物を書いて見る


どうも難しい事をやってる様には思えなかった。
試しに書いて実行結果を見せてみた。

該当部分だけ抜粋。

array_shift($argv);
foreach ($argv as $param) {
    eval("$param;");
}
要求を満たしていた様だ。
悩む時間が長い時ほど、意外とあっさり解決する。



編集
@hansode at 02:30|PermalinkComments(0)TrackBack(0)

2008年05月21日

このエントリーをはてなブックマークに追加

CLI版


Webアプリケーションを作っている訳ではない。
関わってるプロジェクトの開発言語がPHPなのでPHPで書いてる。

コマンドラインでオプションを指定するにはgetopt関数。


$ cat > getopt.php
#!/usr/bin/env php
<?php

$opt_map = getopt("a:b:c:d:e");
var_dump($opt_map);
^D
$ chmod +x ./getopt.php
$ php -l ./getopt.php
問題ないので実行。

$ ./getopt.php -a1 -b2 -c3 -d4 -e5
array(5) {
  ["a"]=>
  string(1) "1"
  ["b"]=>
  string(1) "2"
  ["c"]=>
  string(1) "3"
  ["d"]=>
  string(1) "4"
  ["e"]=>
  bool(false)
}
eに何も入ってない…
getoptの引数、eの後にコロンが無い!

< $opt_map = getopt("a:b:c:d:e");
> $opt_map = getopt("a:b:c:d:e:");
再度実行

$ ./getopt.php -a1 -b2 -c3 -d4 -e5
array(5) {
  ["a"]=>
  string(1) "1"
  ["b"]=>
  string(1) "2"
  ["c"]=>
  string(1) "3"
  ["d"]=>
  string(1) "4"
  ["e"]=>
  string(1) "5"
}
成功した。

まとめ


  • 勝手な思い込みで「:」がデリミタだと思ってた
  • 「半角英数 + :」で初めて意味がある。
  • しっかりマニュアルを読め



編集
@hansode at 22:35|PermalinkComments(0)TrackBack(0)

2007年02月05日

このエントリーをはてなブックマークに追加

formTagの使い方を探したけど欲しい情報を得られなかった。 ソースを読んで解決。

■関数

function formTag($target = null, $type = 'post', $htmlAttributes = array())

■概要

form要素を生成する

<form action="$target" method="$type" htmlAttributes...> 

■引数

  • target
    • action属性の属性値に指定するURI
  • type
    • formのmethodタイプ
    • defaultはpost
  • htmlAttributes
    • form要素に付与したい属性値
    • 例: array('id' => 'register')

無事にid属性を指定出来た。




編集
@hansode at 13:05|PermalinkComments(0)TrackBack(0)

2007年01月25日

このエントリーをはてなブックマークに追加

DOMでinput要素を動的に追加したらonblurが効いてくれない。

<form id="register">
<table>
<tr><td>foo</td><td><input type="text" id="foo" /></td></tr>
<tr><td>bar</td><td><input type="text" id="bar" /></td></tr>
</table>
</form>

<?php $behaviour->addAjaxRule('#update-table input', 'onblur', $options); >
  1. script要素で/js/behaviourRules.phpを読み込まれる
  2. /js/behaviourRules.phpでForm.serialize('register')が評価される
  3. DOMでinput要素を追加

input要素を動的追加してもserializeしたデータには含まれていな いのでonblurが効かない。input要素を追加したら、その都度 behaviourRules.phpを読み直してやるしかないか。




編集
@hansode at 14:20|PermalinkComments(0)TrackBack(0)

2007年01月23日

このエントリーをはてなブックマークに追加

検証環境ではヘルパーが動いているようで動いてないと言う何とも やり切れない状態が続いた。ソースを追いかけて問題箇所を発見。

▼問題箇所

$(apps)/webroot/js/behaviourRules.phpで指定しているPATH_TO_TEMP。

こいつが指定しているディレクトリへの書き込みが失敗し、 behaviourへコード変換されず何も動作しなかった。

▼解決例

- define('PATH_TO_TEMP', '../../tmp/behaviourTmp.js');
+ define('PATH_TO_TEMP', '../../cake/tmp/behaviourTmp.js');

これで解決した。

▼解決策

  • パスを変更
  • Behaviourヘルパーのデフォルトのディレクトリに対してapacheへ書き込み許可を出す

どちらかが必要。

ヘルパーをインストールしてもすぐ使えなかったのは、自分のCakePHP 開発環境の設定が変なのかもしれない。ソースを追いかけたおかげで Behaviourヘルパーの動作を把握した。




編集
@hansode at 20:40|PermalinkComments(0)TrackBack(0)

2007年01月15日

このエントリーをはてなブックマークに追加

7.3 コントローラの変数より

▼$uses

コントローラは複数のモデルを使用するでしょうか。

例えば、 FragglesController は自動的に $this->Fraggle を
読み込みますが、 $this->Smurf も同じようにアクセスしたい
場合には、コントローラに次のように書いてください:

 var $uses = array('Fraggle','Smurf');

これまで自動的に使用できていた Fraggle モデルを $uses 配列に
含める必要があることに注意してください。

なるほど。こうするのか。




編集
@hansode at 16:55|PermalinkComments(0)TrackBack(0)

2007年01月09日

このエントリーをはてなブックマークに追加

exec, systemなでは標準出力と標準エラー出力を別々に扱ってくれない。 proc_openを使ってやると解決する。

▼コード

#!/usr/bin/php -q
<?php
function execWrap($command = "") {
    $fd = array(
        1 => array("pipe","w"),
        2 => array("pipe","w"),
        );
    $stdout = array();
    $stderr = array();
    $code   = null;
    $process =proc_open($command, $fd, $pipes);

    /* stdout */
    while(!feof($pipes[1])) {
        array_push($stdout, fgets($pipes[1]));
    }
    fclose($pipes[1]);
    /* stderr */
    while(!feof($pipes[2])) {
        array_push($stderr, fgets($pipes[2]));
    }
    fclose($pipes[2]);
    /* exit status code */
    $code = proc_close($process);

    return array('code' => $code, 'stdout' => $stdout, 'stderr' => $stderr);
}

print_r(execWrap("date"));
print_r(execWrap("date >&2"));
?>

▼実行結果

$ ./fd-test.php
Array
(
    [code] => 0
    [stdout] => Array
        (
            [0] => 2007年  1月  9日 火曜日 13:06:34 JST

            [1] =>
        )

    [stderr] => Array
        (
            [0] =>
        )

)
Array
(
    [code] => 0
    [stdout] => Array
        (
            [0] =>
        )

    [stderr] => Array
        (
            [0] => 2007年  1月  9日 火曜日 13:06:34 JST

            [1] =>
        )

)

無事、別々に取得出来た。




編集
@hansode at 13:10|PermalinkComments(0)TrackBack(0)