Posts Tagged ‘Apache’

date.timezoneを使えと怒られた

PHPを5.3.xに上げた後、いつも流してるスクリプトでdate()関数呼び出したらこんな警告が出た。回避するには/etc/php.iniでdate.timezoneでタイムゾーンを明示するか、事前にdate_default_timezone_set()を呼ばなければならないらしい。

PHP Warning: date(): It is not safe to rely on the system’s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier.

オレ訳:
システムのタイムゾーン設定に依存するのは確実ではありません。date.timezoneを設定するかdate_default_timezone_set()を設定する必要があります。いずれかを設定後も引き続きこの警告が出る場合は、タイムゾーンIDが間違っている可能性が高いです。

調べたら日本のタイムゾーンIDは「Asia/Tokyo」なので、

# vi /etc/php.ini

[Date]
; Defines the default timezone used by the date functions
date.timezone = Asia/Tokyo

と設定するか、プログラム内でdate()関数を呼び出す前に

date_default_timezone_set(‘Asia/Tokyo’);

と宣言してあげてください。

ちなみにPHPでサポートしているタイムゾーンのリストはこちらで確認できます。

付録 H. サポートされるタイムゾーンのリスト

ちなみに影響範囲はPHP5.1.x以降らしいので、5.3.x固有の問題というわけではなさそう。単に俺が今まで気づかなかっただけか?

 

WordPressでカスタムパーマリンクが文字化け

SEOの観点から、WordPressのURL構造を「ホスト名/カテゴリ/タイトル」といった構造に変更したい場合があります。

通常だとダッシュボードの「設定」から「パーマリンク設定」を選択し、「カスタム構造」を選択して/%category%/%postname%/とか設定すればOKなのですが、環境によってはホスト名以下のURLが文字化けしてうまくアクセスできない場合があります。

検索したら.htaccessの先頭に以下の記述を追加すればOK、という記事がたくさん出てきました。

# php_flag mbstring.encoding_translation off
# php_value default_charset “UTF-8

が、私の環境ではそれでもダメ。

というかその設定は/etc/php.iniに既に記述済み。 orz

結論からいうと、バーチャルドメインの設定でひっかかってました。

カスタムパーマリンクは.htaccessに記載されたmod_rewriteの設定で実装されているのですが、この設定を有効にするには、WordPressがインストールされたディレクトリに対して、httpd.confにおいて「AllowOverride All」が設定されている必要があります。

もちろん私の環境でも設定されてはいたのですが、バーチャルドメインで運用している場合httpd.confのバーチャルホストの設定、もしくはバーチャルホスト設定ファイル(デフォルトだとextra/httpd-vhosts.conf)の<VirtualHost>ディレクティブ内において、改めて「AllowOverride All」を有効にしてあげる必要があるとのこと。言われてみれば確かに、、、といういつものパターン。

Apache バーチャルホスト説明書

同じ過ちを繰り返さないためにも、追記の必要な箇所を赤字で書いておきます。ディレクトリやドメインの設定は各自の環境に読みかえてください。

<VirtualHost *:80>
RewriteEngine ON
ServerName    subdomain.tokiwasou.com
DocumentRoot  /var/www/tokiwasou.com/subdomain
ErrorLog    logs/subdomain.tokiwasou.com-error_log
CustomLog    logs/subdomain.tokiwasou.com-access_log combined
<Directory “/var/www/tokiwasou.com/subdomain/”>
AllowOverride All
</Directory>

</VirtualHost>

 

Centos5でSSL導入+小技

Centos5使ってて、WebサーバにApache2を使ってるなら、このサイトに書いてある手順そのまんまで導入できます。

通信内容暗号化(OpenSSL & mod_SSL) ~ Webページ編 ~

もし途中で間違えたとしても最初からやり直せば無問題。

ただ、CAおよびサーバ証明書の有効期間が1年(365日)なのがちょっと短いかなと思って、何も考えず10年(365x10=3650)に変更してみました。10年て。わはは。

変更箇所は2カ所。

(1) CA用証明書の有効期限を10年に変更

変更前:
# openssl req -new -x509 -days 365 -key /etc/httpd/conf/ca.key -out /etc/httpd/conf/ca.crt
変更後:
# openssl req -new -x509 -days 3650 -key /etc/httpd/conf/ca.key -out /etc/httpd/conf/ca.crt

(2) サーバ用証明書の有効期限を10年に変更 (sign.shの修正)

# vi /root/mod_ssl-2.8.28-1.3.37/pkg.contrib/sign.sh
# default_days = 365
(修正前)
# default_days = 3650
(修正後)

mod_sslのバージョンはwgetしてきたバージョンに読みかえてね。念のため。

あと細かいことなのですが、vi(正確にはシェル)で証明書とか要求書を作成するときにタイプミスすると、バックスペース(Back Space)で戻ろうとしても「^H」が画面に追加表示されてしまい、泣く泣くCtrl + Cで強制終了&再入力という非効率的な作業を強要されてストレスを感じていたのですが、実はCtrl + Back Spaceで^Hを表示させることなく修正できるという事を上司から聞きました。偉いぞCtrl。偉くないぞ俺。

というわけでもし同じ悩みでお困りだった方、ぜひ。

 

アクセスログからローカルIPを除外

/etc/httpd/conf/httpd.conf の512行目付近にある

CustomLog logs/access_log combined

CustomLog logs/access_log combined env=!no_log
SetEnvIf Remote_addr 192.168.0. no_log

としてやる。

192.168.0. の部分はローカルネットワークの設定に応じて変更してね。

変更後は /etc/rc.d/init.d/httpd reload で変更を反映させるのを忘れないように。

バーチャルホストごとにそれぞれ異なるログファイルをはき出す設定にしている場合は、

/etc/httpd/conf/extra/httpd-vhosts.conf にある「それっぽい」項目を探して同じように修正&リロードすればOKれす。

 

httpd.conf の構文チェック

/usr/sbin/httpd -t

でOK。

問題なければ「Syntax OK」と素っ気ないメッセージが返ってきます。

何気なくhttpd.confいじって再起動しようとしたら立ち上がらないわ問題がどこだか分からないわでヘンな汗かくこともなくなります。っていうかバックアップとって作業しろよ俺。