メモエントリー。AMP環境はMacbookAir、動作確認はiMacでやっているのだが、動作確認マシンからサーバのMySQLを触りたい時がある。そんなときは、SSHトンネルを張ると、あたかもローカルのMySQLにつなぐようにして、サーバのDBを触れるようになる。
Macなら「システム環境設定」の「共有」で「リモートログイン」をONにしておく。
ターミナルを開いて、まずトンネルを張る。
$ ssh -N -f -L 3307:127.0.0.1:3306 suin@suinmacbookair.local
ホストとポートを指定するだけ。
$ mysql -uroot -proot --port 3307 --host 127.0.0.1
cd /Applications/MAMP/bin ln -s php5.3 php5 # シンボリックリンクを貼らないとMAMPのバグでPEARがおかしくなるっぽい php5/bin/pear channel-discover pear.phpunit.de php5/bin/pear channel-discover components.ez.no php5/bin/pear channel-discover pear.symfony-project.com php5/bin/pear channel-update pear.php.net php5/bin/pear upgrade pear php5/bin/pear install phpunit/PHPUnit cd php5.3/bin/ open -a Coda phpunit # 自分のエディタで開く(Coda, Textmate, vimなど)一行目の
#!/Applications/MAMP/bin/php5/bin/phpを
#!/Applications/MAMP/bin/php5.3/bin/phpにする
sudo ln -s /Applications/MAMP/bin/php5.3/bin/phpunit /usr/bin/phpunit5.3 phpunit5.3 --versionおわり
cd /Applications/MAMP/bin rm -f php5 # 上のPHP5.3の手順をやった場合 ln -s php5.2 php5 php5/bin/pear channel-discover pear.phpunit.de php5/bin/pear channel-discover components.ez.no php5/bin/pear channel-discover pear.symfony-project.com php5/bin/pear channel-update pear.php.net php5/bin/pear upgrade pear php5/bin/pear install phpunit/PHPUnit cd php5.2/bin/ open -a Coda phpunit # 自分のエディタで開く(Coda, Textmate, vimなど)一行目の
#!/Applications/MAMP/bin/php5/bin/phpを
#!/Applications/MAMP/bin/php5.2/bin/phpにする
sudo ln -s /Applications/MAMP/bin/php5.2/bin/phpunit /usr/bin/phpunit5.2 phpunit5.2 --version
CSV出力などで、大量のデータをブラウザに送る際、出力バッファを解除しておいたほうがいい。出力バッファが有効になったままだと、echoしたものは一旦メモリに蓄えられるため、結果的にメモリオーバになる危険性がある。
error_reporting(-1);
ini_set('display_errors', 1);
ob_start(); // 出力バッファ開始
while ( true )
{
phpinfo();
}
Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 33300481 bytes) in /Applications/MAMP/htdocs/php/ob_filter/memory.php on line 10
出力バッファを解除するには、echoなどの直前で次のような関数を1回だけ実行するだけである。
function clearOutputBuffer()
{
while ( ob_get_level() > 0 )
{
ob_end_clean();
}
}
昨日、コマンドラインでPHPを使うときの11のTipsというエントリーを書いた。最近、コマンドラインネタが多いけど、懲りずに今日もコマンドラインネタをひとつ書こうと思う。
commandA | commandB # commandAの実行結果がcommandBに渡る
command < data.txt # data.txtの内容がcommandに渡る
php://stdinをファイル操作系の関数で読み込むだけ。たったそれだけ。
<?php
$stdin = file_get_contents('php://stdin');
var_dump($stdin);
CSVを渡してデータを操作したり、いろいろ使えそう。
氷川 XOOPS Module 開発室