エントリー

カテゴリー「プログラム」の検索結果は以下のとおりです。

PHPで表示言語を自動判別

仕事で「日本語環境からアクセスすると日本語ページ」「英語環境からアクセスすると英語ページ」のような切り替えを自動で行う方法を尋ねられたので、具体的な方法を調べてみた。
なかなか目当ての情報にたどり着けなかったけど、主に以下のページを参考にプログラムを作成してみた。

例えば、日本語・英語・中国語を自動判別するなら以下のようなコードで大丈夫そう。

<?php

$languages = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
$languages = array_reverse($languages);

$result = '';

foreach ($languages as $language) {
  if (preg_match('/^ja/i', $language)) {
    $result = 'Japanese';
  } elseif (preg_match('/^en/i', $language)) {
    $result = 'English';
  } elseif (preg_match('/^zh/i', $language)) {
    $result = 'Chinese';
  }
}

if ($result == '') {
  $result = 'Japanese';
}

echo $result;

?>

環境変数の「HTTP_ACCEPT_LANGUAGE」にブラウザの言語設定が格納されているので、それをもとに自動判別。
言語は複数設定できる上に優先順位も設定できるので、その対策もしておいた。(単純に「HTTP_ACCEPT_LANGUAGEにenが含まれていたら英語環境」のように判別すると、表示言語を複数設定している場合に問題が起きるので、一つ一つ判別。)
稀に大文字で情報が格納されていることもあるそうなので、大文字小文字は区別しないようにもしておいた。
なお、言語が判別できなかった場合は強制的に日本語環境とみなすようにしています。

freo Ver 0.6.0

以下の機能を追加しました。

  • メディア登録時、サムネイルを作成できるように改良。
  • 添付ファイル表示処理を改良。
  • 公開終了日時が正しく反映されない箇所がある不具合を修正。
  • エディタから「斜体」のアイコンを削除。

freo Ver 0.5.0

以下の機能を追加しました。データベース構成にも変更があるため、以前のバージョンとデータに互換性はありません。

  • エントリー&ページは、初期画面の一覧に表示するかを記事ごとに設定できるように改良。
  • エントリー&ページに、公開終了日時を設定できるように改良。
  • カテゴリーは、一覧に表示するかをカテゴリーごとに設定できるように改良。
  • オプション項目は、簡易な入力チェックを設定できるように改良。
  • オプション項目で、複数選択のチェックボックス項目を作成できるように改良。
  • オプション項目で、ファイルアップロード項目を作成できるように改良。
  • セットアップ処理を調整。

公開終了日時とオプション項目の入力チェックは、先日の CSS Nite で「あると便利そうだなぁ」と思った機能です。

freo設置のトラブルシューティング

freo設置について色々調べる機会があったのでまとめ。freoというよりPHP5利用のトラブルシューティングと言った方がいいかも。

ファーストサーバー

コンフィグレータにアクセスし、「PHPインストール」で実行バージョンを「PHP5(DSO版)」に変更する。
freoの設置ディレクトリもしくはその上位ディレクトリに .htaccess を作成し、以下の内容を記述する。

php_flag mbstring.encoding_translation Off
php_value default_charset UTF-8
php_flag output_buffering Off
php_value output_handler None

MySQLを使用する場合、データベース作成の際に

  • 接続照合順序は「utf8_unicode_ci」のまま
  • 照合順序は指定せず(そのまま)

で作成する。

freoの設定ファイル(config.php)にある FREO_DATABASE_CHARSET は設定しなくて(そのまま)で大丈夫そう。

CORESERVER

freoの設置ディレクトリもしくはその上位ディレクトリに .htaccess を作成し、以下の内容を記述する。

AddHandler application/x-httpd-phpcgi .php
mod_gzip_on Off

WADAX

mod_rewriteを使用する場合、freoの設置ディレクトリもしくはその上位ディレクトリに .htaccess を作成し、以下の内容を記述する。

Options FollowSymLinks Includes

freoの動作チェッカー

freoの動作チェッカーを作ってみた。これで phpinfo() が使えないサーバーでもサポートがやりやすくなるかも。

チェッカーはfreo.jpの「トラブルシューティング」からダウンロードできます。

freo Ver 0.4.0

PHPの設定に、初期状態では .htaccess ではなく ini_set() を使用するように変更しました。

.htaccess があると Internal Server Error になる」というサーバーは結構あるようで、これが設置難易度を上げている要因の一つみたいなので、仕様変更。
これで、より多くのサーバーですんなり動作する…はず。

あと、freo用にPHPの設定内容を確認できるツールも作成中。公開は近いうちに。

ロリポップ+PHP5での設定変更

freoの設置難易度を下げるためにあれこれ実験していたところ、ロリポップ+PHP5で、ini_set() が使えるようになっていました。

以前に「.htaccessでの変更も、ini_set()での変更も許可しない」と公式にアナウンスされてショックを受けたのだけど、いつの間にか仕様が変わったのかなぁ…。公式な告知は見当たらないけど。

もし「サーバーの設定ミスで、一時的に使えるだけ」なら悲しいけど、どうなんだろう…。

携帯対応

ひととおりの機能を携帯対応にしたのでテスト。ファイルアップロード以外は、パソコン経由と同じ機能が利用できます。

もう少しテストしてから配布予定。

Visual C#

今年はC#を勉強しよう!…というわけで、ひとまず開発環境をインストールしてみた。
C#は、高機能な開発環境がMicrosoftから無償で提供されています。色んなソフトを別々に入手して設定して…が不要なので、インストール作業はとても簡単。

解説は、ひとまず以下の2つを読んでいこうと思います。

しばらくはコンソールで実行するプログラムばかりの制作になりますが、目標はWindowsアプリケーションの制作。
ざっと読んだ限りでは「C言語 + Windows API を直接呼出し」に比べれば圧倒的に簡単っぽいので、何とかなるかなぁ…。

PHP+ImageMagick その3

さらにImageMagickについて。

ImageMagickの実行には exec() 関数を使っていたけど、shell_exec() の方が個人的には読みやすいので変更。

<?php

echo shell_exec('/usr/bin/convert -version');

?>

ロリポップでImageMagickを使えなかったのは、PHPの設定で safe_modeOn にしていたからでした。すっかり忘れてた…。(正確には、ImageMagickではなく exec()shell_exec() の実行に制限がかかります。)
Off にすれば無事実行できました。一安心。

また、ImageMagickは処理結果は常にファイルに出力されるのかと思っていたけど、標準出力に渡すこともできるのですね。
以下のようにすれば、150px×150pxのサムネイルを直接画面に表示できます。

<?php

echo shell_exec('/usr/bin/convert -geometry 150x150 illust.png -');

?>

さらに、以下のようにすればJpegに変換した上で直接画面に表示できます。

<?php

echo shell_exec('/usr/bin/convert -geometry 150x150 illust.png jpg:-');

?>

freoで使いそうなのはサムネイル作成と画像形式変換くらいなので、これで実装できそうです。

ページ移動

ユーティリティ

カテゴリー

検索

エントリー検索フォーム
キーワード

過去ログ

過去ログ表示フォーム
キーワード

Feed