-
Sablotron で、XSL 変換してみた。
-
in_arrayについてもうひとつ注意。配列(ハッシュ)のキーの方にある値が含まれるかを調べるときは、in_arrayではなくてarray_key_existsを用いる。
$A[0] = "abc";
$A[10] = "def";
のとき、
in_array(10, $A)
array_key_exists("def", $A)
は共にtrueになる。
-
配列に値が含まれるかどうか。Pythonなら a in Aと書けるところ。
<?php
$a = "abc";
$A = array("abc", "def");
print in_array($a, $A);
?>
その一方で、arrayに値をpushするときは
<?php
$a = "abc";
$A = array();
print array_push($A, $a);
?>
なぜ順番が逆なんだろう… a in Aの順番にあわせたのかな?
-
PHPでもfork出来るんですねぇ。
<?php
$pid = pcntl_fork();
if ($pid < 0) {
die(1);
} elseif($pid) {
print "Parent!\n";
pcntl_wait($s);
} else {
print "Child!\n";
}
?>
-
文字化け。eucの文字列を
フォームから「ああ」と送ったら、「縺ゅ≠」と表示される。
調べてみるとこれはutf-8の「ああ」という文字列を無理矢理shift_jisとして読んでいるらしい。
「縺ゅ≠」を$sに代入して、
<?php
$s = '縺ゅ≠';
print mb_convert_encoding($s,"shift_jis","utf-8");
?>
としても正しいshift_jisには戻らないから、もうutf-8の「ああ」としての情報は失われてしまっているっぽい。
文字化けについてはこちらも参照。
-
カンマ区切りのデータファイルを標準入力から読んでパーズ。
[データの例]
kei,hoge@hoge.com
mei,fuga@hoge.com
rei,piyo@hoge.com
if (!$stdin) {
die("Error\n");
}
$A=array();
for(;;){
$line = trim(fgets($stdin));
if($line == "") break;
list($id, $email) = split(',', $line, 2);
print $id . "," . $email . "\n";
}
-
print crypt("hello", "seed");
print md5("hello");
-
ファイル書き。
$fp = fopen("hoge.txt", "w");
for($i = 0; $i < 10; $i++){
fputs($fp, "hello");
}
fclose($fp);
-
複数の変数に配列の返り値を受けるときにはlist()を使う。
list($a, $b) = split('\|', 's|d', 2);
print $a . " " . $b . "\n" ;
-
PHPで前に書いたスクリプト(apacheではちゃんと動いてる)をコマンドラインで実行しようとしたら、
Fatal error: Call to undefined function: sqlite_open() in ...
てエラー。
/etc/php4/cli/php.iniと/etc/php4/conf.d/php.iniを見比べて、前者に
extension=sqlite.so
を追加して解決。
-
popenのサンプル。
lastというコマンドを実行し、最後までなめます。
<?php
$fp = popen("last", "r");
while(!feof($fp)){
$ret = fgets($fp);
print $ret;
}
$ret = pclose($fp);
print "return status : ". $ret;
?>
-
ランダムメール送るスクリプト。
<?php
for($i = 0; $i < 3; $i++){
$email = "kei@hoge.com";
$subject = getRandomString(10);
$text = getRandomString(100) . "\n";
$text .= getRandomString(100) . "\n";
$text .= getRandomString(100) . "\n";
$text .= getRandomString(100) . "\n";
$text .= getRandomString(100) . "\n";
$text .= getRandomString(100) . "\n";
print $subject . "\n";
sendmail($email, $subject , $text);
sleep(1);
}
function sendmail($to, $subject, $body){
mb_internal_encoding("euc-jp");
mb_language("Japanese");
$s = mb_encode_mimeheader(mb_convert_encoding($subject, 'JIS', 'euc-jp'));
mb_send_mail($to, $subject, $body);
}
function getRandomString($nLengthRequired = 8){
$sCharList = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_ ";
mt_srand();
$sRes = "";
for($i = 0; $i < $nLengthRequired; $i++)
$sRes .= $sCharList{mt_rand(0, strlen($sCharList) - 1)};
return $sRes;
}
?>
-
文法はPerlに近いが、所々Cに近い
if($a == True){
} elseif { /* elsif や else if ではない! */
}
if($flag) print "hoge"; // 一行if分も書ける
-
arrayに要素を追加する。
$A = array();
$A[] = "hoge"; // あいているところに"hoge"を追加
array_push($A, "hoge"); // これは末尾に追加
-
英文メールはすごく簡単に送れる。
日本語はエンコードを正しく設定しないといけない。
mail("hoge@fuga.com","subject","body");
-
メンバ変数はvarで宣言。必ず$this->を付けてアクセスする。
php4ではプライベートにはできないらしい。
class A{
var $x;
function A(){ // コンストラクタ
$this->x = 10;
}
function print(){
print "value : " . $this->x;
}
}
$a = new A();
if($a != null){
$a->print();
}