<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>futuremix &#187; PHP</title>
	<atom:link href="http://futuremix.org/tag/php/feed" rel="self" type="application/rss+xml" />
	<link>http://futuremix.org</link>
	<description>津田ふみかの日記・言想風景改め未来模景。 Remix The Future.</description>
	<lastBuildDate>Fri, 05 Mar 2010 12:33:30 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=abc</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>CentOS5 に phpMyAdmin をインストール</title>
		<link>http://futuremix.org/2009/11/centos5-phpmyadmin-install</link>
		<comments>http://futuremix.org/2009/11/centos5-phpmyadmin-install#comments</comments>
		<pubDate>Wed, 25 Nov 2009 22:00:49 +0000</pubDate>
		<dc:creator>津田 ふみか</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[phpMyAdmin]]></category>

		<guid isPermaLink="false">http://futuremix.org/?p=2981</guid>
		<description><![CDATA[インストール

  EPEL に RPM パッケージが用意されています。yum で EPEL を使えるようにして phpMyAdmin をインストールします。


# yum install phpMyAdmin

アク [...]]]></description>
			<content:encoded><![CDATA[<h3>インストール</h3>
<p>
  EPEL に RPM パッケージが用意されています。<a href="http://futuremix.org/2009/01/centos-epel-atrpms-yum">yum で EPEL を使えるように</a>して phpMyAdmin をインストールします。
</p>
<pre class="command">
# yum install phpMyAdmin
</pre>
<h3>アクセス許可</h3>
<p>
  初期状態では、サーバのローカルからしか許可されていません。これをローカルエリアネットワークからアクセスできるように許可するには、/etc/httpd/conf.d/phpMyAdmin.conf を編集します。
</p>
<pre class="config">
&lt;Directory "/usr/share/phpmyadmin"&gt;
  Order Deny,Allow
  Deny from all
  Allow from 127.0.0.1
  <kbd>Allow from 192.168.1.0/24</kbd> ←追加
&lt;/Directory&gt;
</pre>
<p>
  これで http://サーバ名/phpmyadmin/ にアクセスして、ログイン画面が出ればOKです。
</p>
<p>
  もちろん、インターネット側からアクセスできるような設定もできますが、その場合は IP アドレスを限定したり Digest 認証の設定をするなどセキュリティには注意を払いましょう。
</p>
<h3>「mcrypt 拡張をロードできません」のエラー</h3>
<div class="screenshot">
<img src="http://futuremix.org/wp-content/uploads/2009/11/phpMyAdmin_mcrypt.png" alt="phpMyAdmin の mcrypt のエラー" title="phpMyAdmin の mcrypt のエラー" width="508" height="468" class="alignnone size-full wp-image-3003" />
</div>
<p>
  「<samp class="error">mcrypt 拡張をロードできません。PHPの設定を確認してください</samp>」というエラーが出た場合は、php-mcrypt パッケージがインストールされていません。yum でインストールして、Apache を再起動します。
</p>
<pre class="command">
# yum install php-mcrypt
# service httpd graceful
</pre>
<h3>blowfish_secret の設定</h3>
<div class="screenshot">
  <img src="http://futuremix.org/wp-content/uploads/2009/11/phpMyAdmin_browfish-secret.png" alt="phpMyAdmin の browfish_secret が未設定というエラー画面" title="phpMyAdmin の browfish_secret が未設定というエラー画面" width="511" height="367" class="alignnone size-full wp-image-3004" />
</div>
<p>
「<samp class="error">設定ファイルが秘密のパスフレーズ（blowfis_secret）を必要とするようになりました</samp>」というエラーが出た場合は、/usr/share/phpmyadmin/config.inc.php ファイルを編集して、<var>$cfg['blowfish_secret']</var> に秘密のパスフレーズを設定します。
</p>
<pre class="config">
$cfg['blowfish_secret'] = '<em>ここに秘密のパスフレーズを設定</em>'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
</pre>
<h3>サーバが応答しません (あるいはローカルの MySQL サーバのソケットが正しく設定されていません)のエラー</h3>
<div class="screenshot">
  <img src="http://futuremix.org/wp-content/uploads/2009/11/phpMyAdmin_socket_error.png" alt="サーバが応答しません (あるいはローカルの MySQL サーバのソケットが正しく設定されていません)ｋ５o\" title="サーバが応答しません (あるいはローカルの MySQL サーバのソケットが正しく設定されていません)ｋ５o\" width="506" height="482" class="alignnone size-full wp-image-3005" />
</div>
<p>
  「サーバが応答しません (あるいはローカルの MySQL サーバのソケットが正しく設定されていません)」というエラーが出るときは、メッセージどおり、MySQL のサーバが動いていない可能性があります。phpMyAdmin と MySQL のホストが異なる場合は、/usr/share/phpmyadmin/config.inc.php の $cfg['Servers'][$i]['host'] を変更します。
</p>
<pre class="config">
$cfg['Servers'][$i]['host'] = '<kbd>192.168.1.100</kbd>';  //←localhost から変更
</pre>
<p>
  RPM インストールであれば問題ないはずですが、それでもつながらない場合、ソケットの場所を確認します。ターミナルから mysql コマンドで接続したら　statusコマンドでソケットのパスを確認します。
</p>
<pre class="command">
$ mysql -u root
mysql&gt; status
<samp>--------------
UNIX socket:            /var/lib/mysql/mysql.sock</samp>
</pre>
<p>
  このパスを、phpMyAdmin の config.inc.php に記述します。また connect_type も確認しましょう。
</p>
<pre class="config">
$cfg['Servers'][$i]['connect_type']  = '<kbd>socket</kbd>';       // ←tcpから変更
$cfg['Servers'][$i]['socket']        = '<kbd>/var/lib/mysql/mysql.sock</kbd>';
</pre>
<h3>ログイン画面の前にブラウザのパスワードダイアログが表示される</h3>
<p>
  ログイン画面の前にパスワードダイアログがでる場合、以下の方法でログイン画面の表示に変更できます。管理画面に別途 Digest 認証などをかけているときは干渉して都合が悪いです。
</p>
<pre class="config">
$cfg['Servers'][$i]['auth_type']     = 'cookie'; //←http から変更
</pre>
<p>
  ログイン画面が出たら、通常は mysql データベースのログインアカウントとパスワードで入れるはずです。MySQL の初期状態では root ユーザでパスワード無しでは入れてしまいますので、その場合は root のパスワードを設定しましょう。</p>
]]></content:encoded>
			<wfw:commentRss>http://futuremix.org/2009/11/centos5-phpmyadmin-install/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>osCommerce が MySQL5 で動かない場合の対処</title>
		<link>http://futuremix.org/2009/11/oscommerce-mysql5</link>
		<comments>http://futuremix.org/2009/11/oscommerce-mysql5#comments</comments>
		<pubDate>Sat, 21 Nov 2009 11:56:43 +0000</pubDate>
		<dc:creator>津田 ふみか</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[osCommerce]]></category>

		<guid isPermaLink="false">http://futuremix.org/?p=2978</guid>
		<description><![CDATA[
  オープンソースの E-コマースソフト osCommerce を使ったサイトを MySQL 4.1 のサーバから MySQL 5.0 のサーバに移しましたが、エゴ来ません。[　アトム-サイト　] Web osComm [...]]]></description>
			<content:encoded><![CDATA[<p>
  オープンソースの E-コマースソフト osCommerce を使ったサイトを MySQL 4.1 のサーバから MySQL 5.0 のサーバに移しましたが、エゴ来ません。<a href="http://atom.blogdns.com/1/320.html" title="[　アトム-サイト　] Web osCommerce　インストール">[　アトム-サイト　] Web osCommerce　インストール</a>を参考にして以下の点を変更したら動かすことができました。
</p>
<h3>php.ini 変更</h3>
<p>
  <var>register_long_arrays</var> を有効にします。</p>
<pre class="config>
  register_long_arrays = On
</pre>
<p>
  コレが無効の場合、SQL の実行に失敗してもエラーすら出ないので原因が分からないという状態でした。
</p>
<h3>catalog/default.php の SQL 修正</h3>
<p>
  以下のようなエラーメッセージが出ます。
</p>
<pre class="log">
「1054 - Unknown column 'p.products_id' in 'on clause'」
</pre>
<div class="screenshot">
<img src="http://futuremix.org/wp-content/uploads/2009/11/oscommerce-mysql5-error-500x149.png" alt="osCommerce を MySQL5.0 で使ったときのエラー" title="osCommerce を MySQL5.0 で使ったときのエラー" width="500" height="149" class="alignnone size-medium wp-image-2979" />
</div>
<p>
  この場合は、catalog/defaul.php 中の SQL 文で、left join の前の部分を <kbd>(</kbd>, <kbd>)</kbd> で括ってやればよいようです。MySQL 4.1 より MySQL 5.0 では文法的なチェックが厳しくなったためということです。
</p>
<pre class="code">
$listing_sql = "select " . $select_column_list . " p.products_id, p.manufacturers_id, p.products_price, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as final_price from <kbd>((</kbd>" . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_PRODUCTS . " p<kbd>)</kbd> left join " . TABLE_MANUFACTURERS . " m on p.manufacturers_id = m.manufacturers_id, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c <kbd>)</kbd>left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id where p.products_status = '1' and
</pre>
]]></content:encoded>
			<wfw:commentRss>http://futuremix.org/2009/11/oscommerce-mysql5/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CentOS 5.4 で Oracle 対応 PHP の RPM</title>
		<link>http://futuremix.org/2009/11/centos-54-oracle-php-oci8-rpm</link>
		<comments>http://futuremix.org/2009/11/centos-54-oracle-php-oci8-rpm#comments</comments>
		<pubDate>Wed, 11 Nov 2009 13:00:54 +0000</pubDate>
		<dc:creator>津田 ふみか</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[データベース]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[RPM]]></category>
		<category><![CDATA[yum]]></category>

		<guid isPermaLink="false">http://futuremix.org/2009/11/centos-54-oracle-php-oci8-rpm</guid>
		<description><![CDATA[
  以前書いたCentOS 5.2 での Oracle 対応 PHP の RPM の改訂版です。今回は CentOS 5.4 (32bit版) のマシンで試しました。なお、Oracle instant Client は [...]]]></description>
			<content:encoded><![CDATA[<p>
  以前書いた<a href="http://futuremix.org/2008/08/centos-oracle-php-rpm-spec-patch">CentOS 5.2 での Oracle 対応 PHP の RPM</a> の改訂版です。今回は CentOS 5.4 (32bit版) のマシンで試しました。なお、Oracle instant Client は 11.x ではなく 10.2.0.4 を利用しました。
</p>
<p>
  CentOS 5.x では、PHP 5.1.6 をベースにしています。手順としては Oracle Instant Client をインストールし、CentOS の PHP の SRPM をダウンロードし、SPEC ファイルを編集し、ビルドという手順になります。
</p>
<h3>Oracle Instant Client の インストール</h3>
<p>
  Oracle Instant Client 10.2.0.4 の RPM をダウンロードします。ダウンロードには OTN の登録が必要です。ここでは Linux x86版(32bit版)の 10.2.0.4 の RPM をダウンロードします。最低限、oracle-instantclient-basic と oracle-instantclient-devel のパッケージはインストールが必要です。jdbc ドライバは不要です。
</p>
<p>
  次に /etc/ld.so.conf.d/oracle-instant-client.conf というファイルを作成し、ライブラリパスを追加します。
</p>
<pre class="command">
# echo '/usr/lib/oracle/10.2.0.4/client/lib/' &gt;&gt; /etc/ld.so.conf.d/oracle-instant-client.conf
</pre>
<p>
  64bit 版の場合は次のようになります。
</p>
<pre class="command">
# echo '/usr/lib/oracle/10.2.0.4/client64/lib/' &gt;&gt; /etc/ld.so.conf.d/oracle-instant-client.conf
</pre>
<p>
  ライブラリパスを再読込します。
</p>
<pre class="command">
# ldconfig
</pre>
<p>
  いまは PHP をビルドするのが目的なので、Oracle データベースへの接続確認は割愛します。
</p>
<h3>PHP の SRPM のダウンロード</h3>
<p>
  なぜか yumdownloader コマンドではうまく行かなかったので、理化学研究所のミラーから直接ダウンロードしました。
</p>
<pre class="command">
  wget http://ftp.riken.go.jp/Linux/centos/5.4/os/SRPMS/php-5.1.6-23.2.el5_3.src.rpm
</pre>
<p>
  この RPM をインストールすると、/usr/src/redhat/SPECS/ に php.spec ファイルが置かれます。また、/usr/src/redhat/SOURCES/ 配下にビルドに必要な PHP のソースファイルと、各種パッチファイルや設定ファイルなどが置かれます。
</p>
<h3>パッチファイルのダウンロード</h3>
<p>
  <a href="/downloads/php-5.1.6-oci8conf.patch">php-5.1.6-oci8conf.patch</a> をダウンロードして SOURCES ディレクトリに配置してください。Oracle が提供する SRPM や、<a href="http://remi.collet.free.fr/files/php-5.2.5-oci8conf.patch">他のパッチ</a>を元に、私が作ったものです。
</p>
<h3>SPEC ファイルの編集</h3>
<p>
  こちらも、oci8 のために変更が必要です。変更箇所が多いので、<a href="/downloads/php.spec.516_23_2">php.spec (php-5.1.6.23.2.el5_3 用 32bit)</a>に置きました。これをダウンロードして php.spec と差し替えてください。変更点は diff を取ればわかると思います。64bit 環境では、ライブラリパスを <code>/usr/lib/oracle/%{ociver}/client/lib</code> から <code>/usr/lib/oracle/%{ociver}/client64/lib</code> に変更する必要があります。
</p>
<h3>RPM のビルド</h3>
<pre class="command">
  $ rpmbuild -ba php.spec &#45;-target i686  &#45;-define 'oracle 1'
</pre>
<p>
  開発ライブラリなどがないと、コンパイルエラーとなります。事前に php.spec の BuildRequires セクションに書かれている RPM 群を yum コマンドでインストールしておきましょう。bzip2-devel, curl-devel, libstdc++-devel などです。
</p>
<pre class="command">
  # yum install bzip2-devel curl-devel libstdc++-devel
</pre>
<p>
  ビルドにはかなり時間がかかります。RPM ファイルは上記の例では /usr/src/redhat/RPMS/i686/ に配置されます。 php-oci8-5.1.6-23.2.ora.i686.rpm というファイルが PHP の OCI8 関数のモジュールを含んだ RPM です。 このモジュールを含む PHP の RPM をインストールしたら Apache を再起動します。phpinfo() コマンドで oci8 パッケージが有効になっていることを確認してみてください。
</p>
<div class="screenshot">
  <img src="http://futuremix.org/wp-content/uploads/2009/11/phpinfo-php-oci8-500x485.png" alt="phpinfo() で OCI8関数が有効になった状態を確認する" title="phpinfo() で OCI8関数が有効になった状態を確認する" width="500" height="485" class="alignnone size-medium wp-image-2934" />
</div>
]]></content:encoded>
			<wfw:commentRss>http://futuremix.org/2009/11/centos-54-oracle-php-oci8-rpm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>オープンソースのWebメール、AtMail Open のインストール</title>
		<link>http://futuremix.org/2009/06/installing-atmail-open</link>
		<comments>http://futuremix.org/2009/06/installing-atmail-open#comments</comments>
		<pubDate>Sat, 20 Jun 2009 11:00:12 +0000</pubDate>
		<dc:creator>津田 ふみか</dc:creator>
				<category><![CDATA[メール]]></category>
		<category><![CDATA[AtMail]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://futuremix.org/?p=2561</guid>
		<description><![CDATA[
  AtMail Open は、商用版ウェブメールソフトのオープンソース版で、無償で利用できます。日本語に対応してそうなので試したいと言われ、インストールすることにしました。


  


さて、バージョンは 1.03 [...]]]></description>
			<content:encoded><![CDATA[<p>
  <a href="http://atmail.org/">AtMail Open</a> は、商用版ウェブメールソフトのオープンソース版で、無償で利用できます。日本語に対応してそうなので試したいと言われ、インストールすることにしました。
</p>
<div class="screenshot">
  <a href="http://futuremix.org/2009/06/installing-atmail-open/atmailopen" rel="attachment wp-att-2570"><img src="http://futuremix.org/wp-content/uploads/2009/06/atmailopen-499x411.jpg" alt="AtMail Open のスクリーンショット" title="AtMail Open のスクリーンショット" width="499" height="411" class="alignnone size-medium wp-image-2570" /></a>
</div>
<p>
さて、バージョンは 1.03 です。ちなみに日本語に対応しているのはメールの閲覧や作成だけで、ユーザインターフェースは日本語非対応です。とはいえ PHP で書かれたオープンソースなので、自分の手で日本語化することは可能だと思います。
</p>
<h3>ダウンロード</h3>
<p>
  <a href="http://atmail.org/download.php">ダウンロード</a>したアーカイブをサーバ上で展開します。/var/www/html/atmailopen/ に配置します。ファイル・ディレクトリは、すべて apache ユーザで読み書きできる必要があります。
</p>
<pre class="command">
# wget http://atmail.org/download/atmailopen.tgz
# tar xzvf atmailopen.tgz
# mv atmailopen/ /var/www/html/
# chown apache:apache -R /var/www/html/atmailopen/
</pre>
<p>
  http://servername/atmailopen/ にアクセスすると、インストールウィザード画面になります。インストール要件がチェックされますので、ここで PHP のモジュールや設定の確認ができます。php.ini で <var>upload_max_filesize</var> と <var>post_max_size</var> を 16M 以上にしないとダメでした。
</p>
<div class="screenshot">
  <a href="http://futuremix.org/2009/06/installing-atmail-open/atmail-pre-installation-check" rel="attachment wp-att-2568"><img src="http://futuremix.org/wp-content/uploads/2009/06/atmail-pre-installation-check-444x500.png" alt="AtMail のインストール前のチェック" title="AtMail のインストール前のチェック" width="444" height="500" class="alignnone size-medium wp-image-2568" /></a>
</div>
<p>
  また、MySQL のデータベースを作成できる権限のあるアカウントが必要ですので、事前に作っておきます。今回は事前に空のデータベースも作成して、その DB にだけすべての権限を持つアカウントを作成しました。
</p>
<pre class="command">
# mysql -u root
mysql&lt; CREATE DATABASE atmail;
<samp>Query OK, 1 row affected (0.01 sec)</samp>

mysql&lt; GRANT ALL PRIVILEGES ON atmail.* TO atmailuser@localhost IDENTIFIED BY "********";
<samp>Query OK, 0 rows affected (0.00 sec)</samp>
</pre>
<p>
  ちなみにデータベース名やユーザ名は推測できない名前にした方がよろしいです。
</p>
<p>
  インストーラは英語ですが、手順どおりにすすめていけば、それほど難しくありません。
</p>
<h3>ログイン</h3>
<p>
  ログインページにアクセスすると、IE8ではなぜか Windows Media Player Extension を実行しようとしているというメッセージが出ますが無視します。新しいメールの到着音を出すために必要なようです。
</p>
<div class="screenshot">
<a href="http://futuremix.org/2009/06/installing-atmail-open/atmail-login" rel="attachment wp-att-2569"><img src="http://futuremix.org/wp-content/uploads/2009/06/atmail-login-499x411.png" alt="オープンソースのWEBメール AtMail のログイン画面" title="オープンソースのWEBメール AtMail のログイン画面" width="499" height="411" class="alignnone size-medium wp-image-2569" /></a>
</div>
<p>
  また、画面は入力項目が多くて戸惑いますが、メールサーバ名なども入力が必要です。これに関しては、html/login-light.html ファイルの HTML フォームを書き換えることで、固定の初期値を表示したり、サーバ名を非表示にできます。
</p>
<pre class="code">
  &lt;td align="left"&gt;&lt;input name="MailServer" type="<kbd>hidden</kbd>" class="logininput"
 id="MailServer"<kbd> value="mail.example.org"</kbd>&gt;&lt;/td&gt;
</pre>
<div class="screenshot">
  <a href="http://futuremix.org/2009/06/installing-atmail-open/atmail-login-customized" rel="attachment wp-att-2571"><img src="http://futuremix.org/wp-content/uploads/2009/06/atmail-login-customized-499x411.png" alt="カスタマイズした AtMail Open のログイン画面" title="カスタマイズした AtMail Open のログイン画面" width="499" height="411" class="alignnone size-medium wp-image-2571" /></a>
</div>
<h3>ログインできない</h3>
<p>
  IMAP サーバと AtMail Open を同一のサーバにインストールすると、ログインできないという不具合があるようです。secure ログを見ると、dovecot が以下のようなエラーログを出しています。
</p>
<pre class="log">
dovecot-auth: pam_unix(dovecot:auth): check pass; user unknown
dovecot-auth: pam_unix(dovecot:auth): authentication failure; logname= uid=0 euid=0 tty=dovecot ruser= rhost=172.16.0.100
dovecot-auth: pam_succeed_if(dovecot:auth): error retrieving information about user testuser<em>@example.org</em>
</pre>
<p>
  どうやら、&#8221;testuser&#8221; だけで dovecot にログインすべきところ &#8220;testuser<em>@example.org</em>&#8221; と@以降の文字列も付けたまま認証しようとして失敗しているようです。<a href="http://forum.atmail.com/viewtopic.php?id=1260" title="Server responded: -ERR Login failed (Page 1) - AtmailOpen Troubleshooting - Atmail User Community Forum"> Atmail User Community Forum</a>の書き込みを参考に、libs/ IMAP_Client.php の 1697 行目に以下のコードを追加します。
</p>
<pre class="code">
        function login($user, $pass)
        {
                <kbd>list($user, $crap) = split("@", $user, 2);</kbd>
                $this->user = $user;
</pre>
<p>
  この回避策で、同一サーバでもログインができるようになります。
</p>
<h3>アドレス帳に削除できないアドレスが大量に表示される</h3>
<p>
  Address book (アドレス帳) には、初期状態で大量のメールアドレスが登録されていました、これらは &#8220;Delete Selected&#8221; しても残ったままです。
</p>
<div class="screenshot">
 <a href="http://futuremix.org/2009/06/installing-atmail-open/atmail-address-book-ldap-li" rel="attachment wp-att-2567"><img src="http://futuremix.org/wp-content/uploads/2009/06/atmail-address-book-ldap-li-500x281.png" alt="AtMail のアドレス帳に大量に表示されたメールアドレス" title="AtMail のアドレス帳に大量に表示されたメールアドレス" width="500" height="281" class="alignnone size-medium wp-image-2567" /></a>
</div>
<p>
  どうやら Open LDAP のアドレス帳? に登録されているものらしいです。ローカルの OpenLDAP (slapd) は停止していますが、どうやらリモートのサーバにデフォルトで接続しにいく仕様のようです。メールアドレスの補完機能でもこのネット上の LDAP アドレス帳が機能してしまいますので、操作ミスでメールを誤って送付してしまう可能性があり危険です。
</p>
<p>
  これらは libs/Atmail/Config.php ファイルを修正して表示されないようにします。<var>addressbook_ldap_entries</var> と <var>autocomplete_ldap_entries</var> の値を 1 から<kbd>0</kbd> に変更します。また、<var>dap_server</var> が &#8220;directory.washington.edu&#8221; となっていますが、これも消しておきましょう。もちろんローカルの LDAP サーバでアドレス帳を管理しているのあれば、それらを利用するよう設定できます。
</p>
<h3>所感</h3>
<p>
  みやすくわかりやすい AJAX を使ったUI は評価できますが、日本語 UI に対応していないのがマイナスです。また、設定画面でエンコードを ISO-2022-JP にしても、作成したメールは UTF-8 でした。これなら <a href="http://www.squirrelmail.jp/" title="SquirrelMail Japan - Webmail for Nuts!">SquirrelMail</a> や　<a href="http://www.roundcube.net/" title="The RoundCube Webmail Project">RoundCube</a>の方がおすすめできますね。</p>
]]></content:encoded>
			<wfw:commentRss>http://futuremix.org/2009/06/installing-atmail-open/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PHP の switch で上手く判定できない罠</title>
		<link>http://futuremix.org/2008/11/php-switch-string-cast</link>
		<comments>http://futuremix.org/2008/11/php-switch-string-cast#comments</comments>
		<pubDate>Tue, 18 Nov 2008 10:16:28 +0000</pubDate>
		<dc:creator>津田 ふみか</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://futuremix.org/?p=1539</guid>
		<description><![CDATA[
  PHP って型が曖昧だったりするので、久しぶりにやると嵌ります。今回のハマリは、switch の case で文字列で比較するケース。PHP は switch 文で文字列比較ができるので便利と言えば、便利ですが、引 [...]]]></description>
			<content:encoded><![CDATA[<p>
  PHP って型が曖昧だったりするので、久しぶりにやると嵌ります。今回のハマリは、switch の case で文字列で比較するケース。PHP は switch 文で文字列比較ができるので便利と言えば、便利ですが、引数の型に気をつけないと予期せぬ動作をします。単純化して書くと、
</p>
<pre class="code">
  $var = 0;
  switch ( $var) {
    case 'X' : print "hoge"; break; //この行を通る。
    case 'Y' : print "foo"; break;
    default : print "bar"; break;  //ここは通らない。
  }
</pre>
<p>
  <code>$var = "0";</code> のように <var>$var</var> が文字列型だと default 節に飛ぶのですが、<code>$var = 0</code> のように数値型にして渡すと、数値に変換した hoge は 0 となるので、かならず1行目を通ってしまいます。
</p>
<p>
  この例だけで言えば <var>$var</var> が常に文字列型になるようにコーディングすればよいのですが、やはり予想外のデータが送られてくることはあります。
</p>
<p>
  このような場合は、キャストを使って常に文字列型にして比較させるようにコーディングするのがよいようです。
</p>
<pre class="code">
  $var = 0;
  switch ( (string) $var) {
    case 'X' : print "hoge"; break;
    case 'Y' : print "foo"; break;
    default : print "bar"; break;  //ここを通る。
  }
</pre>
]]></content:encoded>
			<wfw:commentRss>http://futuremix.org/2008/11/php-switch-string-cast/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PHP Startup: Invalid library (maybe not a PHP library) の警告</title>
		<link>http://futuremix.org/2008/09/php-startup-invalid-library-maybe-library-warning</link>
		<comments>http://futuremix.org/2008/09/php-startup-invalid-library-maybe-library-warning#comments</comments>
		<pubDate>Fri, 19 Sep 2008 02:04:38 +0000</pubDate>
		<dc:creator>津田 ふみか</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://futuremix.org/?p=1489</guid>
		<description><![CDATA[
  PHP が動いているあるサーバで、コマンドラインから php コマンドを利用したら、


PHP Startup: Invalid library (maybe not a PHP library) 'libpq. [...]]]></description>
			<content:encoded><![CDATA[<p>
  PHP が動いているあるサーバで、コマンドラインから php コマンドを利用したら、
</p>
<pre class="log">
<samp>PHP Startup: Invalid library (maybe not a PHP library) 'libpq.so' </samp>
</pre>
<p>
  のようなエラー(警告)が表示されました。
</p>
<p>
  PHP 自体は動いているし、関係する RPM もすべてインストールされているのでおかしいなと思いつつ、whereis で調べてみると、php が複数インストールされている様子。
</p>
<pre class="command">
# whereis php
<samp>php: /usr/bin/php /etc/php.ini /etc/php.d <em>/usr/local/bin/php</em> /usr/local/lib/php.ini /usr/local/lib/php /usr/local/php5.dummy /usr/share/man/man1/php.1.gz</samp>
</pre>
<p>
  RPM ベースで管理するサーバなのに、誰かが勝手に PHP をソースからコンパイルしてインストールした模様。orz<br />
しかもよくよく調べると PostgreSQL まで同じように rPM とソースがビルドしたものが混在している状態orz。インストールマニュアルまで作っているのに、どうしてソースからビルドするのでしょうか。何とかの一つ覚えなのか、ネットの古い情報を鵜呑みにしているのか……。</p>
</p>
<p>
  結局、冒頭のエラーは、<kbd>/usr/bin/php -f </kbd>のようにしてフルパスで指定して凌いでいますが、このサーバは近いうちにクリーンインストールが必要そうです。</p>
]]></content:encoded>
			<wfw:commentRss>http://futuremix.org/2008/09/php-startup-invalid-library-maybe-library-warning/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PHP ファイルのアップロードエラー解決方法</title>
		<link>http://futuremix.org/2008/08/php-file-upload-problem</link>
		<comments>http://futuremix.org/2008/08/php-file-upload-problem#comments</comments>
		<pubDate>Fri, 22 Aug 2008 22:00:00 +0000</pubDate>
		<dc:creator>津田 ふみか</dc:creator>
				<category><![CDATA[その他]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://futuremix.org/?p=1466</guid>
		<description><![CDATA[
  PHP のファイルアップロード実装で、つまずきそうな部分をまとめてました。

大きなファイルがアップロードできない

  php.ini の upload_max_filesize と post_max_size  [...]]]></description>
			<content:encoded><![CDATA[<p>
  PHP のファイルアップロード実装で、つまずきそうな部分をまとめてました。
</p>
<h3>大きなファイルがアップロードできない</h3>
<p>
  php.ini の <var>upload_max_filesize</var> と <var>post_max_size</var> の値がどのようになっているか確認。あと、<var>memory_limit</var> は上記の2つの値より大きくなっている必要があります。php.ini が直接覗けない場合は
</p>
<pre class="code">
  echo ini_get('upload_max_filesize');
  echo ini_get('post_max_size');
  echo ini_get('memory_limit');
</pre>
<p>
  のようにして確認することもできます。まあ、php.ini を編集できないと回避できないのですが。
</p>
<p>
  上記の設定に問題ない場合、HTML で MAX_FILE_SIZE を指定していないか確認します。
</p>
<pre class="example">
  &lt;input type="hidden" name="MAX_FILE_SIZE" value="1000000" /&gt;
</pre>
<p>
  HTML のフォームに <var>MAX_FILE_SIZE</var> を設定することが推奨されていますが、この値をセットしていることを忘れて、変更が漏れているかもしれません。
</p>
<p>
  Apache 側の設定の可能性もあります。httpd.conf や /etc/httpd/conf.d/php.conf などで、<var><a href="http://futuremix.org/2005/02/php-request-limit">LimitRequestBody</a></var> の値を制限しているかどうか確認してください。
</p>
<h3>そもそもアップロードできない</h3>
<p>
  大きいファイルだけでなく小さいファイルもアップロードできない場合は、php.ini で <var>file_uploads</var> が Off になっているかもしれません。</p>
<p>
  また、form 要素の <var>enctype</var> 属性が <kbd>multipart/form-data</kbd> に設定されていない可能性があります。
</p>
<pre class="example">
  &lt;form method="post" enctype="multipart/form-data"&gt;
</pre>
<p>
  それ以外では、サーバのテンポラリディレクトリが存在しなかったり、apache を実行しているユーザで書き込みできなくなっている可能性があります。php.ini の <var>upload_tmp_dir</var> に設定されているディレクトリが有効かどうか確認してください。
</p>
<h3>突然アップロードできなくなった</h3>
<p>
  サーバのディスク容量が不足しているかもしれません。
</p>
<h3>エラーコードを調べる</h3>
<p>
  PHP の変数 $_FILE["<var>input_name</var>"]["error"] にエラーコードが格納されています。<a href="http://jp.php.net/manual/ja/features.file-upload.errors.php">エラーコードの説明</a> を参照すると、より原因が絞り込めます。</p>
]]></content:encoded>
			<wfw:commentRss>http://futuremix.org/2008/08/php-file-upload-problem/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache 起動直後に PHP で ORA-00911 エラーが発生</title>
		<link>http://futuremix.org/2008/08/ora-00911-error-occurred-after-resterted-apache</link>
		<comments>http://futuremix.org/2008/08/ora-00911-error-occurred-after-resterted-apache#comments</comments>
		<pubDate>Wed, 20 Aug 2008 11:57:40 +0000</pubDate>
		<dc:creator>津田 ふみか</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[データベース]]></category>
		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://futuremix.org/?p=1464</guid>
		<description><![CDATA[
  Apache 起動直後に PHP から Oracle に接続すると、ORA-00911 エラーが発生することがあります。


ORA-00911: invalid character in hogehoge.php [...]]]></description>
			<content:encoded><![CDATA[<p>
  Apache 起動直後に PHP から Oracle に接続すると、ORA-00911 エラーが発生することがあります。
</p>
<pre class="log">
ORA-00911: invalid character in hogehoge.php on line X
</pre>
<p>
  しかし、SQL には誤りはなく sqlplus で実行できますし、しばらく時間が経過すると、Apache + PHP 上でもエラーかでなくなります。PHP のコード中では
</p>
<pre class="code">
putenv("NLS_LANG=Japanese_Japan.UTF8");
</pre>
<p>
として、<var>NLS_LANG</var>の値を設定していますが、どうもこの設定が反映されないようです。いろいろ調べると、apache の起動スクリプト中で環境変数を設定すればよいということでした。
</p>
<p>
  /etc/rc.d/init.d/httpd を直接編集しても良いのですが、Red Hat 系(Fedora や CentOS) では、それは避けた方が良さそうです。起動スクリプト中では /etc/sysconfig/httpd がユーザが編集するファイルとして読み込まれ、実行されますので、こちらに記述します。
</p>
<pre class="command">
# vi  /etc/sysconfig/httpd
</pre>
<pre class="config">
export NLS_LANG=Japanese_Japan.UTF8
</pre>
<p>
  これで Apache を再起動後すれば、起動直後でも NLS_LANG の値が有効になっており、エラーは発生しなくなりました。</p>
]]></content:encoded>
			<wfw:commentRss>http://futuremix.org/2008/08/ora-00911-error-occurred-after-resterted-apache/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP を高速化する eAccelerator の RPM</title>
		<link>http://futuremix.org/2008/08/php-eaccelerator-rpm</link>
		<comments>http://futuremix.org/2008/08/php-eaccelerator-rpm#comments</comments>
		<pubDate>Fri, 15 Aug 2008 03:12:53 +0000</pubDate>
		<dc:creator>津田 ふみか</dc:creator>
				<category><![CDATA[その他]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[RPM]]></category>

		<guid isPermaLink="false">http://futuremix.org/?p=1455</guid>
		<description><![CDATA[
  いまさらながら PHP：eAccelerator で PHP 高速化 &#8211; Y-110&#8217;s Wikiという記事を読みました。


  ただ、このページではソースからビルドする方法が解説されてい [...]]]></description>
			<content:encoded><![CDATA[<p>
  いまさらながら <a href="http://php.y-110.net/wiki/index.php?PHP%A1%A7eAccelerator%20%A4%C7%20PHP%20%B9%E2%C2%AE%B2%BD" title="PHP：eAccelerator で PHP 高速化 - Y-110's Wiki">PHP：eAccelerator で PHP 高速化 &#8211; Y-110&#8217;s Wiki</a>という記事を読みました。
</p>
<p>
  ただ、このページではソースからビルドする方法が解説されていますが、Red Hat 系のディストリビューションではやはり <abbr title="RPM Package Manager">RPM</abbr> で管理した方が良いので、<a href="http://rpm.pbone.net/index.php3?srodzaj=3&#038;simple=1&#038;stat=3&#038;search=php-eAccelerator">prm.pbone.net で検索</a>したところ、RPM で配布されているものを発見。
</p>
<p>
  CentOS 5 であれば、RHEL5 用の RPM が使えますので、それをダウンロードしてインストール。設定は /etc/php.d/eaccelerator.ini に記述され手いるので、httpd を再起動するだけで OK。 php.ini への記述の追加の必要もなく有効になりました。phpinfo で確認できれば動作しています。
</p>
<div class="screenshot">
  <a href="http://futuremix.org/2008/08/php-eaccelerator-rpm/php-eaccelerator-info" rel="attachment wp-att-1457"><img src="http://futuremix.org/wp-content/uploads/2008/08/php-eaccelerator-info-220x300.png" alt="" title="phpinfo で eAccelerator の設定を確認" width="220" height="300" class="aligncenter size-medium wp-image-1457" /></a>
</div>
<p>
  実際に早くなったかどうかは測定していませんが、簡単に利用できるという点で Zend Optimizer より導入しやすいかもしれませんね。</p>
]]></content:encoded>
			<wfw:commentRss>http://futuremix.org/2008/08/php-eaccelerator-rpm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CentOS 5.2 での Oracle 対応 PHP の RPM</title>
		<link>http://futuremix.org/2008/08/centos-oracle-php-rpm-spec-patch</link>
		<comments>http://futuremix.org/2008/08/centos-oracle-php-rpm-spec-patch#comments</comments>
		<pubDate>Thu, 07 Aug 2008 09:32:37 +0000</pubDate>
		<dc:creator>津田 ふみか</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[RPM]]></category>

		<guid isPermaLink="false">http://futuremix.org/?p=1373</guid>
		<description><![CDATA[
  Oracle が PHP の RPM を公開中ですがでも書いたとおり、Oracle が Instant Client 対応の RPM を出してくれていますが、残念ながら最新の PHP 5.2.6 ではなく、PHP  [...]]]></description>
			<content:encoded><![CDATA[<p>
  <a href="http://futuremix.org/2008/08/oracle-php-rpm-download" title="Oracle が PHP の RPM を公開中ですが">Oracle が PHP の RPM を公開中ですが</a>でも書いたとおり、Oracle が Instant Client 対応の RPM を出してくれていますが、残念ながら最新の PHP 5.2.6 ではなく、PHP 5.2.5 がベースとなっています。（この記事の執筆時点）
</p>
<p>
  また、CentOS 5.2 では、PHP 5.1.6 をベースにしていますので、PHP 5.1.6 で Oracle に対応できるように RPM を作ってみました。php-5.1.6-20.el5_2.1.src.rpm を元に spec ファイルの書き換えと、<a href="http://remi.collet.free.fr/files/php-5.2.5-oci8conf.patch">PHP 5.2.5 の configure.m4 ファイルに対するパッチ</a>などを参考にパッチを作成したところ、とりあえずビルドすることができました。
</p>
<p>
  Oracle Instant Client 10.2.0.4 の 64bit 版を対象にしています。それ以外のバージョンや 32bit 版をビルドするためには SPEC ファイル中の設定を書き換える必要があります。そんなに難しくはないと思いますが。本当はパラメータで指定できるとよいのでしょうが。
</p>
<ul>
<li><a href="/downloads/php.spec">php.spec</a></li>
<li><a href="/downloads/php-5.1.6-oci8conf.patch">php-5.1.6-oci8conf.patch</a></li>
</ul>
<h3>RPM 作成手順</h3>
<p>
  php-5.1.6-20.el5_2.1.src.rpm をインストールし、/usr/src/redhat/SPECS/php.spec を置き換えます。（32bit環境では &#8211;with-oci8 オプションに指定しているパスを修正する必要有り。）次に php-5.1.6-oci8conf.patch ファイルを SOURCE ディレクトリに配置して、<kbd>rpmbuild -ba php.spec --define 'oracle 1'</kbd> としてビルドしてください。
</p>
<p>
  でき上がった RPM をインストールしたら Apache を再起動し、phpinfo() コマンドで oci8 パッケージが有効になっていることを確認してください。
</p>
<h3>うまく動かないときは</h3>
<p>
  うまく表示されないときは、 LD_LIBRARY_PATH に Oracle Instant Client のライブラリパスをまだ追加していないからかも。 /etc/ld.so.conf.d/oracle-instant-client.conf というファイルを作成し
</p>
<pre class="config">
/usr/lib/oracle/10.2.0.4/client/lib/
</pre>
<p>
  のように Oracle Instant Client のライブラリパスを追加して保存。<kbd>ldconfig</kbd> コマンドでパスを読み込み直してから、再度 Apache を再起動してください。</p>
]]></content:encoded>
			<wfw:commentRss>http://futuremix.org/2008/08/centos-oracle-php-rpm-spec-patch/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oracle が PHP の RPM を公開中ですが</title>
		<link>http://futuremix.org/2008/08/oracle-php-rpm-download</link>
		<comments>http://futuremix.org/2008/08/oracle-php-rpm-download#comments</comments>
		<pubDate>Sun, 03 Aug 2008 22:27:03 +0000</pubDate>
		<dc:creator>津田 ふみか</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[RPM]]></category>

		<guid isPermaLink="false">http://futuremix.org/?p=1359</guid>
		<description><![CDATA[
  最近の Oracle は PHP の RPMを公開してくれています。もちろん php-oci8 パッケージが含まれています。このパッケージを利用するには Oracle Instant Client の RPM が必 [...]]]></description>
			<content:encoded><![CDATA[<p>
  最近の Oracle は <a href="http://oss.oracle.com/projects/php/files/" title="Project Downloads: PHP RPMs - oss.oracle.com">PHP の RPM</a>を公開してくれています。もちろん php-oci8 パッケージが含まれています。このパッケージを利用するには <a href="http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/linuxsoft.html">Oracle Instant Client の RPM</a> が必要です。
</p>
<p>
  ただしバージョンは少し古い 5.2.5 です。PHP の現行バージョンは 5.2.6 であり、<a href="http://www.itmedia.co.jp/enterprise/articles/0805/07/news018.html" title="脆弱性に対処したPHP 5.2.6が公開 - ITmedia エンタープライズ">脆弱性に対処されている</a>そうなので、5.2.5 では不安がありますね。
</p>
<p>
  また、i386 だけなので、x86_64 や i686 に最適化されたパッケージはありません。<del datetime="2008-08-04T21:47:17+09:00" cite="http://d.hatena.ne.jp/elf/20080804/1217821740">ぜひ SRPM を公開して欲しいところです。</del>
</p>
<h3>追記</h3>
<p>
<a href="http://d.hatena.ne.jp/elf/20080804/1217821740" title="SRPMあるんじゃないのかな - よくきたはてダ">SRPMあるんじゃないのかな &#8211; よくきたはてダ</a>でご指摘いただきました通り、SRPM も公開されていました。src.rpm です。私の目が節穴でしたねorz。
</p>
<p>
この src.rpm を元にすれば、最新の 5.2.6 の RPM や、CentOS 5 向けの 5.1.6 の php-oci8 パッケージをビルドできそうです。時間のあるときに試してみたいと思います。<ins datetime="2008-08-07T22:34:16+00:00">試しました→<a href="http://futuremix.org/2008/08/centos-oracle-php-rpm-spec-patch" title="CentOS 5.2 での Oracle 対応 PHP の RPM 《 futuremix">CentOS 5.2 での Oracle 対応 PHP の RPM 《 futuremix</a></ins></p>
]]></content:encoded>
			<wfw:commentRss>http://futuremix.org/2008/08/oracle-php-rpm-download/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>cron で PHP 実行時に require_once のファイルが参照できない</title>
		<link>http://futuremix.org/2008/07/php-warning-require_once-cron</link>
		<comments>http://futuremix.org/2008/07/php-warning-require_once-cron#comments</comments>
		<pubDate>Thu, 31 Jul 2008 06:39:05 +0000</pubDate>
		<dc:creator>津田 ふみか</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[cron]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://futuremix.org/?p=1342</guid>
		<description><![CDATA[
  PHP は apache と組み合わせて動作させるだけではなく、php -f ファイル名 として、バッチファイルのように動作させることも可能です。


  ところが、このときに require_once や inc [...]]]></description>
			<content:encoded><![CDATA[<p>
  PHP は apache と組み合わせて動作させるだけではなく、<kbd>php -f ファイル名</kbd> として、バッチファイルのように動作させることも可能です。
</p>
<p>
  ところが、このときに require_once や include_once の参照先が見つからないことがあります。cron で php で作成したスクリプトを実行しようとしたときに次のようなエラーで悩まされました。
</p>
<pre class="log">
PHP Warning:  require_once(../hoge/foo.php): failed to open stream: No such file or directory </pre>
<p>
  require_once などで、<code>require_once("../hoge/foo.php")</code> のように相対指定をしているとダメなようです。これを回避するには <code>require_once("/var/bar/hoge/foo.php")</code> のようにルートからの絶対パスで書くか、cron 実行時にディレクトリを移動するように cron に記述をする必要がありました。
</p>
<pre class="config">
  cd /var/bar/batchdir &#038;&#038; php -f/var/bar/batchdir/example.php
</pre>
]]></content:encoded>
			<wfw:commentRss>http://futuremix.org/2008/07/php-warning-require_once-cron/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>cron による PHP バッチで2バイト文字のファイルを扱う場合</title>
		<link>http://futuremix.org/2008/07/cron-php-multibyte-filename</link>
		<comments>http://futuremix.org/2008/07/cron-php-multibyte-filename#comments</comments>
		<pubDate>Mon, 28 Jul 2008 14:04:07 +0000</pubDate>
		<dc:creator>津田 ふみか</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[cron]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://futuremix.org/?p=1347</guid>
		<description><![CDATA[
  Linux 上でファイル名にあまり2バイト文字を使いたくないのですが、どうしても他システムが2バイト文字のファイル名をつけてくるので困ります。しかもファイル名から属性を読み取って、データベースに登録しないといけない [...]]]></description>
			<content:encoded><![CDATA[<p>
  Linux 上でファイル名にあまり2バイト文字を使いたくないのですが、どうしても他システムが2バイト文字のファイル名をつけてくるので困ります。しかもファイル名から属性を読み取って、データベースに登録しないといけないので勝手にリネームもできません。
</p>
<p>
  で、作成した PHP のバッチファイルをコンソールから直接実行すると問題ないのですが、cron から実行するとエラーとなります。file_exists 関数などで、2バイト文字の部分がうまく対応できないようです。
</p>
<p>
  cron の設定ファイル中で環境変数を指定すれば解決します。
</p>
<pre class="config">
LANG=ja_JP.UTF-8
</pre>
<p>
という記述を cron の設定ファイルの先頭部分に追加します。もちろん EUC の環境ならば、<kbd>ja_JP.eucJP</kbd> となります。</p>
]]></content:encoded>
			<wfw:commentRss>http://futuremix.org/2008/07/cron-php-multibyte-filename/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP で Notice: Undefined offset</title>
		<link>http://futuremix.org/2008/07/php-notice-undefined-offset</link>
		<comments>http://futuremix.org/2008/07/php-notice-undefined-offset#comments</comments>
		<pubDate>Mon, 28 Jul 2008 07:49:55 +0000</pubDate>
		<dc:creator>津田 ふみか</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://futuremix.org/?p=1334</guid>
		<description><![CDATA[
  PHP のバージョンを 4 から 5 に上げたら、以下のような Notice が出力されました。


Notice: Undefined offset ……


  これは、


list ($a, $b, $c) [...]]]></description>
			<content:encoded><![CDATA[<p>
  PHP のバージョンを 4 から 5 に上げたら、以下のような Notice が出力されました。
</p>
<pre class="log">
<samp>Notice: Undefined offset ……</samp>
</pre>
<p>
  これは、
</p>
<pre class="code">
list ($a, $b, $c) = get_hogehoge();
</pre>
<p>
のような 3 つの戻り値を期待されている場面で
</p>
<pre class="code">
function get_hogehoge() {
    return list($foo, $bar);
}
</pre>
<p>
  のように戻り値の数が足りないときに出ていました。PHP 4 では、このような場合は勝手に <var>$c</var> に NULL が入りましたが、PHP 5 では Notice が出るようです。
</p>
<p>
  Notice はエラーではなく注意なので、設定で消すこともできますが、あとあとのバグの元にならないように、きちんとコード側で対応した方がよいとは思います。</p>
]]></content:encoded>
			<wfw:commentRss>http://futuremix.org/2008/07/php-notice-undefined-offset/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress 拡張 UTW Theme Compatibility Thing のエラーを修正</title>
		<link>http://futuremix.org/2008/05/wordpress-utwrenderthing-error-line-561</link>
		<comments>http://futuremix.org/2008/05/wordpress-utwrenderthing-error-line-561#comments</comments>
		<pubDate>Thu, 29 May 2008 11:06:09 +0000</pubDate>
		<dc:creator>津田 ふみか</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[UTW]]></category>

		<guid isPermaLink="false">http://futuremix.org/?p=2070</guid>
		<description><![CDATA[
  WordPress が公式にタグ機能をサポートする前に、UTW を使っていた人も多いと思います。その後、WordPress が公式にタグをサポートしてからは、同じ関数名で利用できる UTW Theme Compat [...]]]></description>
			<content:encoded><![CDATA[<p>
  WordPress が公式にタグ機能をサポートする前に、<abbr title="Ultimate Tag Warrior">UTW</abbr> を使っていた人も多いと思います。その後、WordPress が公式にタグをサポートしてからは、同じ関数名で利用できる <a href="http://www.neato.co.nz/wordpress-things/utw-theme-compatibility-thing/" title="Christine from the Internet » UTW Theme Compatibility Thing">UTW Theme Compatibility Thing</a> (UTWRenderThing) というプラグインになりました。
</p>
<p>
  私も UTW を使っていた関係で、この UTWRenderThing を使っていたのですが、エラーログに次のような記録がかなり出ているることに気づきました。
</p>
<pre class="log">
PHP Warning:  Invalid argument supplied for foreach() in /wordpress_install_dir/wp-content/plugins/UTWRenderThing.php on line 561
</pre>
<p>
  タグを元に関連記事をリストアップしくれる UTW_ShowRelatedPostsForCurrentPost 関数を使ったときに、タグが1つも設定していない記事だと、foreach ループで回すための変更に配列が格納されずにエラーとなるようです。
</p>
<p>
  そこで、 UTWRenderThing.php の561行目の前に次のコードを入れて、配列かどうかをチェックするようにしました。
</p>
<pre class="code">
  $tagids = array();
  if (!is_array($tags)) return NULL; //←この行を追加
  foreach($tags as $tag) {
</pre>
<p>
  これでエラーログに該当のエラーは出なくなりました。</p>
]]></content:encoded>
			<wfw:commentRss>http://futuremix.org/2008/05/wordpress-utwrenderthing-error-line-561/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHProjekt の文字化けを修正する</title>
		<link>http://futuremix.org/2007/11/phprojekt-mojibake-kaihi</link>
		<comments>http://futuremix.org/2007/11/phprojekt-mojibake-kaihi#comments</comments>
		<pubDate>Fri, 30 Nov 2007 01:49:12 +0000</pubDate>
		<dc:creator>津田 ふみか</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[GroupWare]]></category>
		<category><![CDATA[phprojekt]]></category>

		<guid isPermaLink="false">http://futuremix.org/2007/11/phprojekt-mojibake-kaihi</guid>
		<description><![CDATA[
  オープンソースのプロジェクト管理ウェブアプリケーション PHProjekt をインストールして、CentOS 5 で使ってみていますが、プロジェクト名やファイル名に日本語（2バイト文字）を使うと文字化けしてしまいま [...]]]></description>
			<content:encoded><![CDATA[<p>
  オープンソースのプロジェクト管理ウェブアプリケーション <a href="http://www.phprojekt.com/">PHProjekt</a> を<a href="http://futuremix.org/2007/09/phprojekt-install">インストール</a>して、<a href="http://futuremix.org/2007/11/centos5-phprojekt">CentOS 5</a> で使ってみていますが、プロジェクト名やファイル名に日本語（2バイト文字）を使うと文字化けしてしまいます。
</p>
<p>
  この文字捌けの回避方法が分かりました。原因は、lib/dbman_list.inc.php ファイル中で、<a href="http://jp2.php.net/htmlentities" title="PHP: htmlentities - Manual">htmlentities</a>関数で、2バイト文字がバイト毎に分割されて実体参照に変換されていたためです。回避するには 213 行目あたりの htmlentities の第三引数に文字コードを指定します。
</p>
<pre class="code">
else $row[$ID][$int]['value'] = htmlentities($array['value']<kbd>, ENT_COMPAT, "EUC-JP"</kbd>);
</pre>
<p>
  EUC-JP を直接指定するのはエレガントではありませんが、とりあえずこの方法で回避できました。</p>
]]></content:encoded>
			<wfw:commentRss>http://futuremix.org/2007/11/phprojekt-mojibake-kaihi/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>CentOS5 で phprojekt を動かすには</title>
		<link>http://futuremix.org/2007/11/centos5-phprojekt</link>
		<comments>http://futuremix.org/2007/11/centos5-phprojekt#comments</comments>
		<pubDate>Mon, 19 Nov 2007 07:38:35 +0000</pubDate>
		<dc:creator>津田 ふみか</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[GroupWare]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[phprojekt]]></category>

		<guid isPermaLink="false">http://futuremix.org/2007/11/centos5-phprojekt</guid>
		<description><![CDATA[
  オープンソースのグループウェア PHProjekt　のインストールを CentOS 5(64bit) でも試してみました。基本的には同じですが、躓いたところをメモ。

画面が真っ白

  setup.php は動作 [...]]]></description>
			<content:encoded><![CDATA[<p>
  <a href="http://futuremix.org/2007/09/phprojekt-install" title="オープンソースのグループウェア PHProjekt　のインストール">オープンソースのグループウェア PHProjekt　のインストール</a>を CentOS 5(64bit) でも試してみました。基本的には同じですが、躓いたところをメモ。
</p>
<h3>画面が真っ白</h3>
<p>
  setup.php は動作しますが、なぜか index.php は表示されません。画面が真っ白になります。エラーログには何も出ていませんが、何か php のパッケージが足りないとこうなるようです。
</p>
<p>
  ためしに php-dba, php-xml, php-xmlrpc, php-soap などのパッケージを入れたところ使えるようになりました。
</p>
<h3>未翻訳部分</h3>
<p>
  lang/jp.inc.php を編集します。たとえば
</p>
<pre class="config">
$_lang["Modify"]  = "修正";
</pre>
<p>
などを追加します。
</p>
<h3>文字化け</h3>
<p>
  プロジェクト名やファイル名が日本語だと文字化けします。しかし、小一時間ソースを探しましたが、どこを修正すればよいのか分かりません。分かる方は教えてください。
</p>
<h4>追記 (2007-11-30)</h4>
<p>
  文字化けの回避方法が分かりました。<a href="http://futuremix.org/2007/11/phprojekt-mojibake-kaihi" title="PHProjekt の文字化けを修正する">PHProjekt の文字化けを修正する</a>を参照してください。</p>
]]></content:encoded>
			<wfw:commentRss>http://futuremix.org/2007/11/centos5-phprojekt/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>オープンソースのグループウェア PHProjekt　のインストール</title>
		<link>http://futuremix.org/2007/09/phprojekt-install</link>
		<comments>http://futuremix.org/2007/09/phprojekt-install#comments</comments>
		<pubDate>Sun, 23 Sep 2007 22:00:15 +0000</pubDate>
		<dc:creator>津田 ふみか</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[GroupWare]]></category>
		<category><![CDATA[phprojekt]]></category>

		<guid isPermaLink="false">http://futuremix.org/2007/09/phprojekt-install</guid>
		<description><![CDATA[
  PHProjekt はドイツ発のオープンソースのグループウェアです。一部日本語化されているということなので試してみました。OS は CentOS4.5 です。

ダウンロード・展開

   PHProjekt Do [...]]]></description>
			<content:encoded><![CDATA[<p>
  <a href="http://www.phprojekt.com/">PHProjekt </a>はドイツ発のオープンソースのグループウェアです。一部日本語化されているということなので試してみました。OS は CentOS4.5 です。
</p>
<h3>ダウンロード・展開</h3>
<p>
   <a href="http://www.phprojekt.com/index.php?name=Downloads&amp;req=viewdownload&amp;cid=1">PHProjekt Download</a> から tar または zip ファイルのどちらかをダウンロードして解凍します。
</p>
<p>
  サーバ上の /var/www/html/phprojekt にファイルを設置して、所有者・グループは apache にします。特にコンパイルなどの作業は必要ありません。
</p>
<pre class="command">
# chown apache:apache -R /var/www/html/phprojekt
</pre>
<h3>Apache の設定</h3>
<p>
  日本語対応は EUC で行なわれているようなので、Apache の文字コードを EUC に設定します。.htaccess ファイルを作成して
</p>
<pre class="config">
AddDefaultCharset EUC-JP
</pre>
<p>
  としておきます。<a href="http://journal.mycom.co.jp/column/yetanother/100/index.html" title="【コラム】Yet Another 仕事のツール (100) LAMPプロジェクト管理ツール - PHProjekt | エンタープライズ | マイコミジャーナル">マイコミジャーナルの記事</a>によれば、php.ini の <var> mbstring.internal_encoding</var> や <var> mbstring.http_output</var> なども変更した方が良さそうですが私は何も指定しませんでした。
</p>
<h3>追加パッケージのインストール</h3>
<p>
  install というテキストファイルを読むと、php-imap が必要なようなので、なければインストールしておきます。
</p>
<pre class="command">
  # yum install php-imap
</pre>
<h3>データベースの作成</h3>
<p>
  データベースには MySQL だけでなく PostgreSQL なども利用できます。今回は PostgreSQL を利用します。
</p>
<pre class="command">
  $ createdb -E EUC_JP phprojekt
  $ createuser phprojekt -P
</pre>
<p>
  のようにして EUC で phprojekt データベースを作成します。ユーザ名も phprojekt で作成しました。ただ、これは設定時に指定できますので、別の名前にしても問題ありません。
</p>
<h3>環境の確認</h3>
<p>
  http://(server_name)/phprojekt/env_test.php にアクセスして、環境が整っているかどうかのテストができます。英語ですがそんなに難しくありませんので一通りやっておきましょう。
</p>
<h3>セットアップ</h3>
<p>
  環境のチェックで問題がなければ、いよいよセットアップです。http://(server_name)/phprojekt/setup.php にアクセスします。
</p>
<div class="screenshot">
  <img src="http://futuremix.org/wp-content/uploads/2007/09/phprojekt-install.png" alt="PHProjekt のセットアップ画面" width="575" height="535" />
</div>
<p>
  Langauge には日本語を選び、その他の項目を入力し「Advanced Configuration」を選びました。ただし次の画面で文字化けしましたが、ブラウザの文字コードを手動選択すると、日本語で詳細のセットアップができるようになりました。ただし一部は英語のままです。
</p>
<div class="screenshot">
<img src="http://futuremix.org/wp-content/uploads/2007/09/phprojekt-advanced-configuration.png" alt="PHProjekt のセットアップ画面" width="560" height="479" />
</div>
<p>
  セットアップがうまくいけば、データベースにテーブルが作成されます。
</p>
<h3>管理者でのログイン</h3>
<p>
  http://(server_name)/phprojekt/ にアクセスしてログイン画面が出れば成功です。最初に設定した root ユーザでログインできます。
</p>
<div class="screenshot">
<img src="http://futuremix.org/wp-content/uploads/2007/09/phprojekt-overview.png" alt="PHProjekt の概要画面" width="560" height="344" />
</div>
<p>
  はじめはデータが何もないのでスカスカな感じです。まだ英語の部分が残っていたり、文字化けしているところもあります。このあたりは独自にソースを書き換えるなどし対応していくしかなさそうです。本家に貢献できればよいと思いますね。</p>
]]></content:encoded>
			<wfw:commentRss>http://futuremix.org/2007/09/phprojekt-install/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Yahoo で PHP はどのように使われているのか</title>
		<link>http://futuremix.org/2007/09/php-at-yahoo</link>
		<comments>http://futuremix.org/2007/09/php-at-yahoo#comments</comments>
		<pubDate>Sat, 08 Sep 2007 11:28:20 +0000</pubDate>
		<dc:creator>津田 ふみか</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[ポータルサイト]]></category>
		<category><![CDATA[Yahoo]]></category>

		<guid isPermaLink="false">http://futuremix.org/2007/09/php-at-yahoo</guid>
		<description><![CDATA[
  PHP を使っているポータルサイトとしては最大と言っても過言ではない Yahoo ですが、ヤフーの荻原氏による 「PHP at Yahoo! JAPAN」というスライドが公開されています。PHP 開発者ならこれは必 [...]]]></description>
			<content:encoded><![CDATA[<p>
  <em><abbr title="PHP:HIPERTEXT PROCESSER">PHP</abbr></em> を使っているポータルサイトとしては最大と言っても過言ではない <em>Yahoo</em> ですが、ヤフーの荻原氏による <a href="http://searchblog.yahoo.co.jp/2007/09/php_at_yahoo_japan.html" title="「PHP at Yahoo! JAPAN」 - Yahoo!検索 スタッフブログ">「PHP at Yahoo! JAPAN」</a>というスライドが公開されています。PHP 開発者ならこれは必見の内容です。
</p>
<div class="thumb">
<img src="http://futuremix.org/wp-content/uploads/2007/09/php-at-yahoo.jpg" alt="PHP at Yahoo" width="200" height="150" />
</div>
<p>
  昔は Yahoo が yScript という独自言語で開発しているのを知っていましたが、いつのまにか PHP での開発にシフトしていたんですね。しかも PHP 以外にも Apache、MySQL などのオープンソース・ソフトウェアを利用している現状やその経緯について触れられています。
</p>
<p>
  また、Yahoo はなぜ PHP のフレームワークとして Smarty ではなく Symphony を使っているのか、セキュリティ上どのような設定にしているのかなど、PHP 技術者なら興味深い話題が満載です。大変参考になりました。</p>
]]></content:encoded>
			<wfw:commentRss>http://futuremix.org/2007/09/php-at-yahoo/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress 被ブックマーク数表示プラグイン と PHP の short_open_tag</title>
		<link>http://futuremix.org/2007/08/sbm_popular_entry-short_open_tag</link>
		<comments>http://futuremix.org/2007/08/sbm_popular_entry-short_open_tag#comments</comments>
		<pubDate>Sat, 25 Aug 2007 22:00:15 +0000</pubDate>
		<dc:creator>津田 ふみか</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://futuremix.org/2007/08/sbm_popular_entry-short_open_tag</guid>
		<description><![CDATA[
  このサイトでも利用させていただいてる WordPress の被ブックマーク数表示＋ランキング生成プラグインがバージョンアップしたとのこと。



管理画面の記事一覧に被ブックマーク数を表示
Yahoo!ブックマーク [...]]]></description>
			<content:encoded><![CDATA[<p>
  このサイトでも利用させていただいてる WordPress の<a href="http://aoina.com/archives/18" title="[WP:Plugin] 被ブックマーク数表示＋ランキング生成プラグイン | AOINA.COM">被ブックマーク数表示＋ランキング生成プラグイン</a>が<a href="http://aoina.com/archives/96" title="[WP:Plugin] 「SBM Popular Entry」をバージョンアップしました | AOINA.COM">バージョンアップ</a>したとのこと。
</p>
<blockquote cite="http://aoina.com/archives/96" title="[WP:Plugin] 「SBM Popular Entry」をバージョンアップしました | AOINA.COM">
<ul>
<li>管理画面の記事一覧に被ブックマーク数を表示</li>
<li>Yahoo!ブックマークを追加（以下略）</li>
</ul>
</blockquote>
<p>
  ということなので、バージョンアップしてみました。
</p>
<p>
  ……が、うまく動きません。
</p>
<p>
  出力結果を調べてみると、PHP のコードがそのまま出力されています。コードを見ると <code>&lt;?= ・・・ &gt;</code> のような短縮形で書かれています。これは PHP のShortOpenTag の形式ですが、このサーバのように php.ini で short_open_tag=OFF に設定されているサーバでは利用できない記述形式です。な
</p>
<p>
  php.ini で short_open_tag を有効にできるのであればそれで解決しますが、その場合でも PHP ソース中の XML 宣言とぶつかるなどの別の不具合が生じます。私の環境では、これが理由で OFF にしています。
</p>
<p>
  short_open_tag が無効な環境でプラグインを動作させるようにするには、 template_post.php と template_list.php を修正し、<code>&lt;?= ・・・ ?&gt;</code> の部分を <del datetime="2007-09-01T22:53:19+09:00" title="間違いのため削除"><code>&lt;?<kbd>php _e(</kbd>・・・<kbd>)</kbd>?&gt;</code> に書き換えてください。</del> <ins datetime="2007-09-01T22:53:19+09:00"><code>&lt;?<kbd>php echo</kbd> ・・・?&gt;</code> に書き換えてください。</ins>この形式あれば short_open_tag の on/off に関わらず動作します。</p>
]]></content:encoded>
			<wfw:commentRss>http://futuremix.org/2007/08/sbm_popular_entry-short_open_tag/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
