PECL uploadprogrss 拡張モジュールの導入

Drupalのファイルアップロードに使用する、PECL uploadprogress(拡張モジュール)を導入します。

ファイルのアップロード時に以下のような感じで表示されます。

数MB以下のファイルをアップロードする程度であればわざわざuploadprogressを導入しなくても、アニメーションでも十分だと思います。
見た目の好みだけのようにも思います。
内部処理が異なるのかuploadprogressのバージョンでファイルアップロード時の動作が異なるようなので気がかりな点がありますが・・・

サーバの環境によっては、何もせず使えるケース、php.iniを編集するだけで使えるケース、ソースからコンパイルしないといけないケース、コンパイルする環境から構築しないといけないケースなど様々です。
このuploadprogress拡張モジュールのためにどこまでやるかーは今後のことも考慮して選択してください。
※ユーザディレクトリにいろいろ導入する予定があれば、先を考えてports環境をユーザディレクトリに構築すれば良いと思います。

さくらのレンタルサーバではとりあえずコンパイル要件のPHPとPEARがあるので、ソースからコンパイルするだけですみそうです。
今回は一番簡単な方法にしました。

uploadprogressの導入

最終的に必要になるのはサーバの環境にあったuploadprogress.soライブラリです。
ここではその作成方法とDrupalシステムで有効にする方法になります。

(1)PECL uploadprogressのソースを入手

以下のサイトからソースプログラム一式をダウンロードします。
http://pecl.php.net/package/uploadprogress

※uploadprogress-1.0.3.1をダウンロードしました。
※バージョンによって内部動作がことなるようですが詳細はわかりません。
※PCからWEB経由でダウンロードするなり、サーバにリモートログインしてcurlやwgetでダウンロードするなりしてください。

ダウンロードしたファイルを作業ディレクトリで解凍します。
tar zxvf uploadprogress-1.0.3.1.tgz
カレントディレクトリを移動します。
cd uploadprogress-1.0.3.1

(2)ソースのコンパイルを実行

以下はさくらのレンタルサーバの共通環境を利用して構成します。
※Errorが出力されなければ気にしなくても良いと思います。

拡張モジュールのコンパイル準備を行います。
phpize
configureを実行します。
./configure
makeを実行します。
make

※make install は実行しません。実行してもアクセス権のエラーで失敗します。
※makeまで無事完了すれば、modulesの下にuploadprogress.soが作成されていますのでそれを使います。

(3)ライブラリの配置

場所はホームディレクトリ以下であればどこでもよいので、管理できるような場所にコピーしてください。
※uploadprogress.soはmodules以下にあります。

以下は$HOME/usr/local/extensionsにコピーする例です。
cp modules/uploadprogress.so $HOME/usr/local/extensions

(4)php.iniの編集

Drupalルートディレクトリ以下にあるphp.iniを編集しuploadprogressを有効にます。

以下の2行を追加します。
extension_dir="/home/USERNAME/usr/local/extensions"
extension="uploadprogress.so"

以上で利用できるようになっているはずです。
※重要※
上記の追加をすることで、デフォルトで読み込まれているextension_dirディレクティブの値が上書きされることになります。
影響がありそうなのはデフォルトのextension_dirディレクティブの値を使わなければならない構成の場合です。
たとえば、PHP4.Xでsqliteを使っているケースです。

補足)

(1)uploadprogressのテンポラリファイルの場所
アップロード中にuploadprogressのテンポラリファイルが作成されます。
どこに作成されるかはDrupal管理メニューのレポートからサイトの状態(admin/reports/status)にアクセスしPHPの詳細情報(phpinfoの結果)を参照して確認できます。
この一覧にuploadprogressの項目が追加されていますので、uploadprogress.file.contents_templateとuploadprogress.file.filename_templateディレクティブの値がどうなっているかをチェックしてください。

値を変更する場合は、php.iniにその旨記載すれば変更できます。

(2)CLIからPHPを実行する際の留意点

上の(1)の確認をCLIから「php -i 」を実行してphp情報を確認しても、ローカルのphp.iniは読み込まれていませんので注意してください。
※使用しているシェルの環境設定でTMPDIRに指定した値が設定されると思います。
※環境変数名はOSや使用シェルによってことなります。

読み込まれているphp.iniを確認する場合は「php --ini」で可能です。

読み込むphp.iniを指定して実行する場合は以下のように「-c」オプションを併用します。
「php -c  . 」でカレントディレクトリのphp.iniが読み込まれます。
「php -c . --ini」を実行すればその確認ができます。

Drupalバージョン

インストール