Drupal で、古くなったノードを hook_cron で削除する方法

Drupal のドキュメントは、すっごく整備されているようでいて内容を見ると実はよくわからないのがほとんどである。この hook_cron についても、https://drupal.org の過去ログからやっと探し出したものだ。 ポイントは、node_delete を呼び出す前に必ず
<?php

global $user;
$user = user_load(array('uid' => $node->uid));

?>
と、global $user を $node のもの($node が持つ uid)にしてあげるということである。 Win32 プログラミングで CreateProcessAsUser の前に hTokenImpersonateUser が必要なのと同じようなノリなのだろう。以下の例は、30日以上前のノードを hook_cron (この例では example_cron) で処理する方法。
Drupal のドキュメントは、すっごく整備されているようでいて内容を見ると実はよくわからないのがほとんどである。この hook_cron についても、https://drupal.org の過去ログからやっと探し出したものだ。 ポイントは、node_delete を呼び出す前に必ず
<?php

global $user;
$user = user_load(array('uid' => $node->uid));

?>
と、global $user を $node のもの($node が持つ uid)にしてあげるということである。 Win32 プログラミングで CreateProcessAsUser の前に hTokenImpersonateUser が必要なのと同じようなノリなのだろう。以下の例は、30日以上前のノードを hook_cron (この例では example_cron) で処理する方法。

Linux で、postfix を使ってイントラネットからメールを送信する方法

Fedora Core 6 の場合、デフォルトの MTA (Mail Transfer Agent) は sendmail となっている。で、実験用 Linux サーバをイントラネットに置いてメールを出そうとしたら、Connection Refused というエラーメールが返ってきてしまった。どうもイントラネットから外へのポート 25 がふさがっているから外部のホストにつながらないらしい。 そこで sendmail の設定をいろいろと調べてはみたものの、やっぱり sendmail.mc とか sendmail.cf は呪いたくなります。結局挫折。今までの人生の中で何度か sendmail を設定する機会があったが、いずれもよくわからなかった。
Fedora Core 6 の場合、デフォルトの MTA (Mail Transfer Agent) は sendmail となっている。で、実験用 Linux サーバをイントラネットに置いてメールを出そうとしたら、Connection Refused というエラーメールが返ってきてしまった。どうもイントラネットから外へのポート 25 がふさがっているから外部のホストにつながらないらしい。 そこで sendmail の設定をいろいろと調べてはみたものの、やっぱり sendmail.mc とか sendmail.cf は呪いたくなります。結局挫折。今までの人生の中で何度か sendmail を設定する機会があったが、いずれもよくわからなかった。

Apache 2.0 で、cgi-bin ディレクトリ以外で index.cgi を有効にする方法

https://yourdomain.com/ にアクセスしたときに、実際は https://yourdomain.com/index.cgi でアクセスさせるためには、どうしたらいいだろう? Fedora Core 6 だと、/etc/httpd/conf/httpd.conf という設定ファイルの中で、 AllowOverride というオプションが NONE になっているから、/var/www/html 配下に置いた .htaccess がデフォルトだとすべて無効になっているのである。 …というわけで、まずは /etc/httpd/conf/httpd.conf の中で、 AllowOverride というオプションが NONE になっている箇所を探して( セクションの中)、AllowOverride All にした上で、以下のように /var/www/html/.htaccess を設定すればよい。
https://yourdomain.com/ にアクセスしたときに、実際は https://yourdomain.com/index.cgi でアクセスさせるためには、どうしたらいいだろう? Fedora Core 6 だと、/etc/httpd/conf/httpd.conf という設定ファイルの中で、 AllowOverride というオプションが NONE になっているから、/var/www/html 配下に置いた .htaccess がデフォルトだとすべて無効になっているのである。 …というわけで、まずは /etc/httpd/conf/httpd.conf の中で、 AllowOverride というオプションが NONE になっている箇所を探して( セクションの中)、AllowOverride All にした上で、以下のように /var/www/html/.htaccess を設定すればよい。

PHP で、日時のフォーマットをチェックする方法

まず、yyyy/mm/dd HH:nn (秒は省略;00秒とみなす)のフォーマットを表す正規表現は、
^(\d\d)\/(\d\d)\/(\d\d\d\d) (\d\d):(\d\d)$
となる。 preg_match は、Perl 形式のでの正規表現を処理するものであり、以下の例だと $datetime でマッチした順から $m 配列に
まず、yyyy/mm/dd HH:nn (秒は省略;00秒とみなす)のフォーマットを表す正規表現は、
^(\d\d)\/(\d\d)\/(\d\d\d\d) (\d\d):(\d\d)$
となる。 preg_match は、Perl 形式のでの正規表現を処理するものであり、以下の例だと $datetime でマッチした順から $m 配列に