mysqlのバックアップ
※データベースは数秒止まるけどがまん。動かしながらはチョット大変なので。。。
$ /etc/init.d/mysqld stop $ cp -r /var/lib/mysql /tmp/mysql.bk2009xxxx $ /etc/init.d/mysqld start
TrackBack URL :
Comments (0)日々勉強
※データベースは数秒止まるけどがまん。動かしながらはチョット大変なので。。。
$ /etc/init.d/mysqld stop $ cp -r /var/lib/mysql /tmp/mysql.bk2009xxxx $ /etc/init.d/mysqld start
TrackBack URL :
Comments (0)create_function関数を使う。第1引数では、関数に対する引数を文字列で指定し、第2引数では、関数の処理内容を記述する。以下の例は、ユーザー定義関数(匿名関数)で配列をソートする例。
<?php
$ary = array(1, 5, 2);
usort(
$ary,
create_function(
'$a,$b',
'if($a < $b){return 1;}if($a === $b){return 0;}if($a > $b){return -1;}'
)
);
//1,2,5
?>
但し、PHP5.3.0以降では以下のように素敵に記述できる。
<?php
$function = function($arg){
print($arg);
};
$function('I was a dog.');//I was a dog.
?>
うーん、素敵になりましたね。但し、なんというか言語全体として無尽蔵に広がってまとまりがなくならないか心配ですな。
ちなみにJavaScriptでは以下のようになる。関数もオブジェクトとして扱えたりするところがPHPよりも素敵だと、個人的には思う。
var ary = new Array(1, 5, 2);
ary.sort(
function(a, b){
if(a > b){return 1;}
if(a < b){return -1;}
if(a === b){return 0;}
}
);
alert(ary);//1,2,5
うーん。素敵だ。ちなみにラムダは、λって書いてラムダ。
TrackBack URL :
Comments (1)大文字と小文字は区別されない。functionキーワードの後に関数名が続く。
<?php
function func(){
//code
}
?>
^[a-zA-Z_][a-zA-Z0-9_]$
但し、システムで今後使用される可能性があるため、アンダーバー(アンダースコア)が2つ続いて始まる関数名は極力使用しない方が良い。
PHPでは、関数は必ず戻り値を発生させる。returnを記述しなかった場合は、nullが戻り値となる。通常はreturnを実行すると、関数は残りの処理を行わない。
<?php
function hello($name){
return "Hello, " . $name . "!";
}
$txt = hello('John');
echo $txt;//display : Hello, John!
?>
参照で戻り値を渡す為には以下のように記述する。
<?php
function &execute($sql){
$result = mysql_query($sql);
return $result;
}
$result = &execute("SELECT * FROM `table`");
?>
この場合、$resultは関数内部の$resultの参照になる。但し、大きな文字列や配列を戻り値とし、さらにそれを後で変更する場合以外では、参照渡しのコストの方が高くつく。また、この記法を用いる場合、戻り値は必ず発生し、かつ変数でなければならない。
関数の挙動をコントロールするなどの目的で、任意の数の引数を関数に渡せる。
<?php
function hello($name){
echo "Hello, {$name}.";
}
hello('John');//Hello, John.
?>
引数を渡さなかった場合、デフォルト値が適用される。
<?php
function hello($name = 'John'){
echo "Hello, {$name}.";
}
hello();//Hello, John.
hello('Nick');//Hello, Nick.
?>
デフォルト値を持たないパラメータを全て指定した後に、デフォルト値を持った引数はいくつも指定が可能である。以下の場合、引数$msgは指定しなければならない。また、$name1のみデフォルト値を指定し、$name2だけ任意の値を指定する、といった事は行えない。
<?php
function hello($msg, $name1 = 'John', $name2 = 'Nick'){
echo "$msg, {$name1} and {$name2}.";
}
hello('Hello');//Hello, John and Nick.
?>
参照渡しの引数を使うと、関数内から関数外の変数の操作が出来る。
メモリを意識して楽しいといえば楽しいのだが、コードの可読性が下がる気がする。理屈だけ覚えて、個人的な範囲で実用は避けようと思う。
<?php
function add(&$a){
$a++;
//通常であれば、変数を操作してもスコープが異なるので関数外には影響しない
}
$num = 1;
add($num);
echo $num;//2
//メモリの住所を渡しただけなので、その場所に対して関数内で処理がされる
?>
PHP4では出来ないが、PHP5では以下のように参照渡しの引数にもデフォルトの値を設定することができる。
<?php
function add(&$a= 0){
$a++;
}
add();
?>
<?php
function calc(){
$array = func_get_args();
$count = func_num_args();
//$value = func_get_arg((int) $index_number);
if($count === 0){
return 0;
}
else{
$answer = 0;
foreach($array as $key => $value){
$answer = $answer + (int) $value;
}
return $answer;
}
}
print(calc(1,5,4,8));//18
?>
関数で明示した引数がある場合は、func_get_args、func_num_args、func_get_argの各関数にその引数も含まれる。
また可変引数は非常に強力であるが、引数をいくつ受け付けるのかがパッと分からないためにコードが読みづらくなる欠点がある。
コードが読みづらくなり滅多に使われることがないが、変数に呼び出し用の括弧をつけて関数とすることもできる。
<?php
function first(){
print('This is first.');
}
$which = 'first';
$which();//This is first.
?>
TrackBack URL :
Comments (0)コンパイル中にパーサーに感知されたエラー。
スクリプトの実行をとめる停止するエラー。
ユーザー定義のエラーハンドラで処理が可能。
致命的ではないエラー。関数に渡す引数を間違えた場合などに起こり、スクリプトの実行は止まらない。
通常の実行時に起こりうる注意。初期化していない変数にアクセスしようとした場合などに発生し、スクリプトの実行は止まらない。
固有のビット値を持っている。
php.iniのいくつかのディレクティブで定義できるが、デバッグなどで一時的にエラーを表示させたい時は、error_reporting関数をスクリプトの先頭などに記述する。
<?php
error_reporting(E_ALL ^ E_NOTICE);//PHPのデフォルトのエラー表示
ini_set('display_errors', 1);//エラーを表示しない設定にしている場合は左記も追記する
?>
通常、エラーは関数に$errNo(エラーレベル), $errStr(エラーメッセージ), $errFile(エラーが発生したファイル名), $errLine(行番号), $errContext(エラーが発生したスコープ内での全変数の配列)を渡す。ユーザー定義関数がfalseを返した場合は、通常のエラーハンドラが処理を引き継ぐ。
<?php
$oldEh = '';
function MyEh($errNo, $errStr, $errFile, $errLine, $errContext){
global = $oldEh;
logToFile("Error: $errStr in $errFile as line $errLine");
if($oldEh){
$oldEh($errNo, $errStr, $errFile, $errLine, $errContext);
}
}
$oldEh = set_error_handler('MyEh');
?>
TrackBack URL :
Comments (0)rpm --import http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
会社のサーバにはインストールしてたけど・・・備忘録
TrackBack URL :
Comments (0)
<?php
$counter = 0;
while($counter < 4){
//code
$counter++;
}
?>
よくあるファイル操作だと以下のような形式かな。
<?php
$txt = '';
$fh = fopen('samle.txt', 'r');
while($row = fgets($fh)){
$txt .= $row;
}
fclose($fh);
?>
知ってはいるけど使わないってのはコレ。通常のwhile文との違いは、条件が常にfalseの場合でも、必ず1回実行される事にある。
<?php
$counter = 0;
do{
//code
}while($counter < 4);
?>
for(カウンターの初期化用の式、条件式、カウンターの増減の式)となる。
PHPを勉強したての頃は、JavaScriptの影響もあって多用しました。
<?php
$ary = array('a', 'b', 'c');
for($i = 0; $i < count($ary); $i++){
//code
echo PHP_EOL;
}
?>
PHPで便利なループコントロールの1つ。JavaScriptのforEachではネイティブで実装されていないブラウザの事を配慮しなくてはならないが、PHPならそんな事はない。
<?php
$ary = array();
foreach($ary as $value){
//code
}
?>
配列のキーを使用したいときには
<?php
$ary = array();
foreach($ary as $key => $value){
//code
}
?>
最も内側のループを抜ける。以下の例では、任意の$sの値に対して、$tは0,1,2の時だけ//codeが実行される。$tが3になった時、breakが実行され内側のループから抜ける。
<?php
$a = array();
$b = array();
for($s = 0; $s < count($a); $s++){
for($t = 0; $t < count($b); $t++){
if($t === 3){
break;
}
//code
}
}
?>
ループの処理をスキップする。以下の例だと$iが3の時に//codeは実行されないが、ループ自体の処理は続く。
$ary = array();
for($i = 0; $i < count($ary); $i++){
if($i === 3){
continue;
}
//code
}
TrackBack URL :
Comments (0)一般的な例
<?php
$flag = true;
if($flag){
//execute
}
else{
//code
}
?>
PHPにはループや条件分岐の際のブロックを表現する方法にコロンが用意されている。その場合はendifを使用しブロックの最後を明示してあげる。個人的にはトリッキーに見えるので使わないが、WordPressのテンプレートなどでは使われている。
<?php if($flag): ?> <p>This is a pen.</p> <?php else: ?> <p>This is a book.</p> <?php endif; ?>
トリッキーに見えたりもするが、スッキリ見えたりもする。すなわち、使用の可否のボーダーが曖昧で難しいというように思える。
<?php $flag = true; $str = ($flag)? 'yes' : 'no'; ?>
個人的にはあまり使わない方だが便利っちゃ便利。
以下の例では、$xを1回だけ評価し、その値のcase文から実行する。break文を書かない場合、全てのコードが実行される。「break文を書かない」というのは文法(syntax)エラーではないがコードが非常に見にくくなるので、あえてbreakは書いた方がイイと思う。
<?php
$x = 0;
switch($x){
case 0:
//code
break;
case 1:
//code
break;
case 2:
//code
break;
default:
//code
}
?>
TrackBack URL :
Comments (0)特に変わったところはない。余りは繰り返しをコントロールする際に有用だったりする
<?php //加算 $a = 5 + 2.3; //減算 $a = 8 - 2; //乗算 $a = 7 * 5; //除算 $a = 8 / 2; //剰余 $a = 21 % 8; ?>
演算子の位置が後ろの場合は値を返してから、加減の処理が行われる。この演算子は
戒めとして使わないプログラマーもいるようだ
<?php $x = 1; echo $x++;//output 1 echo ++$x;//output 3 echo --$x;//output 2 echo $x--;//output 2 ?>
必要に応じてオペランドが文字列に変換される
<?php $str = 'Hello ' . 'World'; echo $str;// Hello World $str .= ', John'; echo $str;// Hello World, John ?>
滅多に使用しないと思われがちだが、PHPの関数の引数では頻繁に使用されるので、必ず覚えておかなければならない。
<?php print(5 & 6);//101 & 110 => 100(4) print(4 | 6);//100 | 110 => 110(6) print(5 ^ 6);//101 ^ 110 => 011(3) ?>
<?php $x = 0; echo ~$x;//output -1 ?>
$x自身は変化しないことに注意しなくてはならない。基本的には2進数に変換し、各ビットを演算子が示す方向にシフトする。
<?php $x = 1; echo $x << 1;//output 2 echo $x << 3;//output 8 $a = 16; echo $a >> 1;//output 8 echo $a >> 2;//output 4 ?>
変数に値を代入する働きをする
<?php $str = 'Hello World'; $x = 1; $x += 5; print($x);// output 6 ?>
オブジェクトを除く全てのデータ型は「&」を使わない限り、コピーとして値が渡される
<?php $dog = 'Jack'; $cat = &$dog; print($cat);//Jack $cat = 'Emily'; print($dog);//Emily ?>
PHPは動的型付・・・。但し、この変換のパターンを覚えるのは非常にやっかいであるので、「===」や「!==」を使うことをお勧めする
$a = '1';
$b = 1;
if($a == $b){
//execute
}
if($a === $b){
//not execute
}
if($a != $b){
//not execute
}
if($a !== $b){
//execute
}
$a = true;
$b = false;
//AND Operator(論理積演算子)
if($a && $b){
//not execute
}
//OR Operator(論理和演算子)
if($a || $b){
//execute
}
//XOR Operator(排他的論理和演算子)
if($a XOR $b){
//execute
}
//論理否定演算子
$a = !$a;
オペランドを特定の型に変換
$a = '7';
$b = (int) $a;
class Animal {
$name = 'Pochi';
$type = 'dog';
}
$animal = new Animal();
$a = (array) $animal;
print_r($a);
/**
* array
* [name] => Pochi
* [type] => dog
*/
$b = array('name' => 'Pochi', 'type' => 'dog');
$c = (object) $b;
print($c->name);//Pochi
オブジェクトを配列にキャストすると、プロパティと値を関連付けた配列になる。配列をオブジェクトにキャストすると、配列のキーがオブジェクトのプロパティ名に、値がプロパティの値になる
この演算子も好き嫌いがわかれるかもしれない。この演算子を上手く使うと、コードがスッキリとし見やすくなることもある。但し、逆に見にくくなることもある。個人の好き嫌いと扱いの技量が影響する非常に奥の深い演算子だと個人的には思う
<?php $a = true; $b = false; $name = ($a && $b)? 'John' : 'Jack'; print($name);//Jack ?>
特定の関数などにおけるエラーの発生を抑制する
<?php $dat = @simplexml_load_string($str); ?>
バッククォーテーションを使うと、OSに直接コマンドを渡せる。コレは非常に強力な機能だがOSコマンドインジェクションなどのセキュリティホールにも繋がる。個人的には可能な限り使わないでおきたいところだ
<?php $directory = `ls`; print($directory); ?>
TrackBack URL :
Comments (0)
<?php
$counter = 10;
function getVal(){
$counter = 0;
//code
}
?>
関数外で$counterが10であっても、関数内の$counterには影響しない
<?php
$counter = 10;
function getVal(){
global $counter = 0;
//code
}
getVal();
?>
globalキーワードをつけると関数内でもグローバル変数になる。もしくは、スーパーグローバル変数の$_GLOBALSを使う
<?php
function getVal(){
static $counter = 0;
$counter++;
//code
}
getVal();
?>
関数が実行し終わっても、残り続ける。上の例だと関数が呼び出されるごとに0、1、2、・・・となる。関数外とは別個に存在できる。
<?php
function printVal($str){
$str = 'Hello World, ' . $str;
print($str);
}
?>
基本的には関数内のみ有効。
TrackBack URL :
Comments (0)PHPにおいては変数宣言構文が存在しない。変数は値が代入された時点で作成される
^[a-zA-Z_][a-zA-Z0-9_]*こんな感じ。つまり変数名の先頭に数字は使えない。そして、頭には「$」をつけること!
大文字と小文字は区別される。
これは強力だが、コードが読みづらく非常に危険な気もする。個人的には敢えて使わないでおこう。
<?php
$name = 'foo';
$$name = 'bar';
print($foo);//bar
$name = '123';
$$name = '456';
print(${'123'});//456
function myFunc(){
//code
}
$f = 'myFunc';
$f();
?>
言語機構のisset()を使う。
<?php
if(isset($val)){
//code
}
?>
isset()は変数が存在し、nullでない時にtrueを返す。従って以下のようなコードで問題が起こる可能性がある。このような問題を防ぐ為には、アルゴリズムを見直すか、is_nullを使う。
$tmpAry = array(1 => null, 2 => 'sample');
foreach($tmpAry as $key => $value){
if(isset($value)/* || is_null($value)*/){
//code
}
}
また、以下のようにキーを使用して変数のテストをする方法も考えられる。
$tmpAry = array(1 => null, 2 => 'sample');
foreach($tmpAry as $key => $value){
if(array_key_exixts($key, $tmpAry)){
//code
}
}
変数のクローンは作成されず、メモリ上の住所(参照)が格納される
<?php $dog = 'Jack'; $cat = &$dog; print($cat);//Jack $cat = 'Emily'; print($dog);//Emily ?>
<?php
define('EMAIL', 'sample@sample.com');
echo EMAIL;//sample@sample.com
?>
TrackBack URL :
Comments (0)