ファイルアップロードの上限

2007/01/04 | apache

PHPでファイルをアップロードする場合は、いくつか設定で気をつけておくべき箇所がある。それは以下の4つの設定だ。

file_uploads(PHPでファイルアップロードできるようにするかどうか)
memory_limit(PHPが使用することのできるメモリの上限)
post_max_size(PHPがpostによって受け取ることのできる容量の上限)
upload_max_filesize(PHPが処理できるアップロードファイルの上限)

まずファイルのアップロードがまったくできない場合は1つ目のfile_uploadsが正しく設定されているかどうかチェック。Offとかだともちろんアップロードできない。
次にファイルサイズが大きいとアップできない場合は残りの3つの設定をチェックする。上記の設定はそれぞれ以下の関係を守る必要がある。

memory_limit > post_max_size > upload_max_filesize

しかし、これらを正しく設定してもまだアップロードができない場合がある。それはapacheの設定だ。apacheの設定で以下のようなディレクティブがある。

LimitRequestBody

ここでアップロードで使用できる(純粋にはファイルだけではないが)ファイルの容量の上限が記述されていることがある。もちろんPHPでいくら設定しても、apacheではじかれてしまっては元も子もない。
この設定もチェックしよう。

なおそれぞれのチェックはphp.iniやhttpd.confを見ればだいたいいいのだが、PHPの場合は/etc/php.d/の中のファイル、/etc/httpd/conf.d/の中のファイルなどもチェックしておく必要がある可能性がある(設定ファイルを分散して設置することができるから)。
ファイル名やファイルへのパスは各自の環境に合わせる必要があることは言うまでもない。

QuickFormもか・・・PEAR管理ツールのバグ

2007/01/03 | その他PEAR全般

DatabaseだけじゃなくてHTML系も結局だめ。
QuickFormがインストールできないよ(これも検索してインストール)。

他にもあるかもしれない。
これは今後サポートしないということか?。理由がわからん。
どうなってるよ、PEAR・・・。とほほ。

ウェブ管理ツールのバグ?(Databaseが表示されない)

2007/01/02 | その他PEAR全般

今日、新しくサイトを構築するのに、PEARのインストールを実行した。
最近はもっぱら、サイトごとにPEAR用ディレクトリを作って、そちらでパッケージの管理をしている。手順は以下のとおり。

○ウェブからアクセスできるとことにディレクトリを作成(パーミッション777)
○http://go-pear.orgにアクセスして、表示された内容をコピペしてファイルを作成(go-pear.php)。
○作成したファイルを作ったディレクトリにアップして、ウェブからアクセス。
○画面にしたがってPEARインストール完了。

こういう手順でいいのだが、ウェブ管理ツールからデータベースのインストールができない。というかカテゴリ「Database」が見つからない。これが見つからないと、必要なものがインストールできないのに・・・。
いろいろ探し回ったけど、結局検索で「mdb2」とするしかなかった(これで必要なパッケージは表示されたのでインストール完了)。
これは絶対バグなような気がする。早くなおることを祈る。

mojaviのURLを少し短くするmod_rewrite

2006/12/29 | mojavi2

検索エンジン対策のためにPATH_INFOを使ってプログラムを使用していることを隠蔽するというのは、mojaviでも設定ファイルひとつで対応可能だ。でもこの方法だと、URLが結構長くなってしまう。例えばmoduleAのactionBにアクセスするには、以下のような具合だ。

/index.php/module/moduleA/action/actionB

これをさらに短くするためにURL書き換え機能(mod_rewrite)を使うわけだが、このmod_rewrite、強力なURL書き換え機能を持っているだけに、設定の記述も難解だ(今まではあえて避けてきた)。
たまたま必要に迫られて検索をかけると、見事なのを見つけた。以下のように書いておけばいい。

RewriteEngine On
# to avoid problems with exsisting files
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.* – [L]
# rewrite broken relative image paths
RewriteRule ^.+(images|scripts|files)/(.*)$ /$1/$2 [L]
RewriteRule !^ind/? – [C]
RewriteRule ^([^/]+)/([^/]+)/(.*) /ind/$3?module=$1&action=$2
RewriteRule ^ind/([^/]+)/([^/]+)(.*)$ /ind$3?$1=$2 [QSA,N]
RewriteRule ^ind/?$ /index.php [QSA,L]

この設定により、上記のURLが以下のようになる。
/moduleA/action1

2つを見比べると短さは一目瞭然!。
/index.php/module/moduleA/action/actionB
/moduleA/actionB

そしてパラメータ(QUERY_STRING)を指定する場合も、以下のように指定すればOK。
/moduleA/actionB/param1/value1/param2/value2・・・

出展はこちら
これによるとパラメータを10以上つけるようなことがある場合は、以下の一行を付け加えておく必要があるとのことだ。

RewriteOptions MaxRedirects=25

よくはわからないけど、[QSA,L]の記述により、パラメータの個数だけ内部的に(mod_rewrite複数回呼び出しみたいな・・・)再読み込みするらしい。んで、再読み込みの回数の上限は9回だから、パラメータが9より多い場合は上記の1行で上限回数を増やす必要があるようだ。

すばらしい。
まさに「URLを操作するためのスイス製のアーミーナイフ」だ。

3iXの評価

2006/12/23 | 海外サーバ

3iXでアプリを書いてみた。印象は・・・FTPが遅い。これにつきる。
FTPソフトを立ち上げ接続操作をして、実際に接続できるまで10秒ほどかかることがある。ファイルのアップロードも同じ。今、国内のレンタルサーバをいくつか借りてるけれど、そのどれと比較しても明らかに遅い。ちなみに現在頻繁に使用しているレンタルサーバ、VPS等々は以下のサービス。
[専用]PROX
ロリポ
チカッパ
[VPS]WebArena
[VPS]使えるネット

まぁ、遅いのは遅いが、ウェブに関してはそれほどの問題がないのでよしとしている。アメリカのサーバ事情をよく知らないのでなんともいえないけど、バックボーンの太さとか、日本アメリカ間の回線の問題とか、その他諸々関係あるかもしれない。

コントロールパネルに関してはまだあまり使っていないのでなんとも言えないけど、多少の知識があれば、普通にウェブを作る分には何の問題もなさそう。MySQLはphpMyAdminから操作できるし、不都合を感じない。mod_rewrite、phpのmbstringモジュール、htaccess設定等ひととおり使えるので、特に問題ない。アメリカのサーバに関して言えば、phpのmbstringモジュールはだいたいが対応しているような感じ(日本語だけじゃなくて、韓国語とかその他のマルチバイト文字も大丈夫そう)。

使い倒さないといけないな。


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net