ホーム > PHP5

PHP5のアーカイブ

osCommerceの引っ越し 画像

PHP- ftp_get - Manual

osCommerceを別のサーバに引っ越すときに妙に時間がかかるのが画像の引っ越しだ。現在利用しているサーバと引っ越し先のサーバにそれぞれSSHがあると簡単に圧縮して転送できる。
レンタルサーバによっては制限が厳しく、転送手段がftpのみだととんでもなく時間がかかることになる。

ftpだけで転送すると、現サーバから画像を手元にダウンロードして新サーバへアップロードする。
ftpサーバにもよるが制限があり途中でftpの接続が切断されることがある。
切断された部分の画像は不完全な状態となりこのファイルを探して再開することになる。 悪い条件が重なると、何日も時間がかかることがあった。

先日も、imageディレクトリ内に3GB強の画像データがあるサーバの引っ越しをした。
サブディレクトリは無く、画像がすべて同一ディレクトリ内に設置されているため、ftpに接続して画像をダウンロードするスクリプトを作成してみた。
引っ越し先のサーバにプログラムを設置してftpに接続。元のサーバのファイルリストを取得して画像ファイル名を配列に格納した。
ここまでできたら、ftp_getコマンドで画像を1枚ずつサーバにダウンロードできた。
5分くらいでスクリプトを作成して、別の仕事をしながらスクリプトを動作させて予想より短時間で画像を移動できた。

PECL apcのエラー Unable to allocate memory for pool.

apcをインストールしたサーバで原因不明のエラーがログに記録されるようになった。
「require(): Unable to allocate memory for pool.」
思い当たる点がなく、試しにキャッシュを削除すると一時的にエラーは消えるが、またしばらくするとエラーが記録される。
しばらく放置しておいたら、OpenPNE3の機能が正しく動作しなくなった。
エラーログを見ると、同じエラーが表示されている。
調べてみるとapcのバグらしい。
http://pecl.php.net/bugs/bug.php?id=16966

このページ内のアドバイスどおり、/etc/php.d/apc.iniを修正した。
apc.mmap_file_mask=/tmp/apc.XXXXX

apc.mmap_file_mask=/dev/zero
へ変更するとエラーは表示されなくなった。

Net_UserAgent_Mobile_Error::isDoCoMo()

携帯端末を機種ごとに処理を振り分けるときに便利に利用できるのがPearのNet_UserAgent_Mobileクラスです。
お客様の携帯サイトで利用したことがあるのですが、最近、別の用件でお客様のサイトを確認したところ、
Fatal error: Call to undefined method Net_UserAgent_Mobile_Error::isDoCoMo() というエラーが発生しました。
確認はFireFoxのUser Agent Switcherを利用します。
何度か試している内に端末製造番号付きのときにエラーが発生することに気付きました。

製造番号なし
DoCoMo/2.0 SH901iC(c100;TB;W24H12)

製造番号付き
DoCoMo/2.0 SH901iC(c100;TB;W24H12;ser123456789012345;icc123456789012345)

となると、正規表現が実際の製造番号にマッチできない可能性が大です。
さっそく製造番号をパターンマッチで取得する部分を確認すると

if (preg_match('/^icc(\w{20})?$/', $value, $matches)) {

と、固定されています。
15文字のところが正規表現では20文字で固定されているためこの部分のデータが取得できずにエラーが表示されていたようです。
ここは15文字で固定せずに、

if (preg_match('/^icc(\w{15,20})?$/', $value, $matches)) {

15文字から20文字までと幅を持たせるように修正したところ正常動作するようになりました。

ホーム > PHP5

Page 1 of 3123
フィード
メタ情報

ページの上部に戻る