ビジネス向けウェブサイト構築運営、ウェブサービス・アプリの企画開発

Fatal error: Allowed memory size of ... に対処してPHPの使用メモリを増やす

2011年7月22日 16:07 コメント(0)

WordPress などを使っていると PHP スクリプトがサーバーに割り当てられたメモリをオーバーして使用している際に遭遇する。

Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 19456 bytes) in ....

そこで、メモリーを増やすことに。設定は /etc/php.ini に。

memory_limit = 16M

から

memory_limit = 32M

に変更して保存。

Apacheを再起動して確認。

あらら、またまた同じエラーが。

Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 19456 bytes) in ....

phpinfo() で確認すると、memory_limit の項目が Master Value では 32M。Local Value では 16M と php.ini で設定された値とは別に .htaccess や httpd.conf など他のどこかで設定されているようだ。

サーバーに ServersMan@VPS を使っている場合、いろいろ探してみるとサブドメインの設定 (/etc/httpd/conf.d/subdomains/site1.xxx.conf) に該当箇所があった。削除するか、

php_admin_value memory_limit 16M

から

php_admin_value memory_limit 32M

に変更保存。

再びサーバ再起動。

/etc/init.d/httpd restart

phpinfo() でも Master Value と Local Value が同じ 32M を確認。

きちっとメモリーが割り当てられた。

関連サイト

スタイルシートを切り替えるjQuery Plugin「CssSwitcher」アップグレード

2011年6月27日 15:30 コメント(0)

スタイルシートを切り替える jQuery Plugin「CssSwitcher」をアップグレードしました。あわせて JavaScript 版もアップグレード。

改良点は二つ。

  • ソースの全面見直し。初期設定の仕方を変更しました。
  • ブラウザの戻るボタンで前のページに戻る際に、先のページで変更したスタイルシートが反映されない場合の対処

二つ目はブラウザによって挙動が違うのですが、ブラウザで直前まで見ていたページの状態を復元する「Back Forward Cache」が働いているため、スタイルシートが反映されないことが起こっているようです。Firefox ではデフォルトで「Back Forward Cache」がオンの状態。

参考

Perl で OAuth / モジュール OAuth::Lite::Consumer インストール

2011年5月26日 17:15 コメント(0)

Twitter や Facebook などウェブサービスの連携には欠かせなくなりつつある認証システム OAuth (オー オース)。アプリ開発者としてマスターしておきたい認証システムのひとつ。今回モジュール OAuth::Lite::Consumer をインストールして、Perlで OAuth 認証できる環境をつくってみた。Twitter で認証してアカウント情報を表示するサンプルプログラムも。

OAuth::Lite::Consumer インストール

ふつうに cpanm でインストールできず。パッケージ openssl-devel が必要。

cpanm OAuth::Lite::Consumer
...
Checking if you have Crypt::OpenSSL::RSA 0.25 ... No
Checking if you have Crypt::OpenSSL::Random 0.04 ... No
...

エラーで止まってしまう。パッケージがないので、perlモジュールの依存関係を解決できず。

まずは、パッケージ openssl-devel をインストール。

yum install openssl-devel

インストール後。

cpanm OAuth::Lite::Consumer

complete!!

サンプルプログラム

Twitter のアカウントでログイン認証。アクセストークンを取得して Twitter のアカウント情報を表示するサンプルプログラム。サンプルを動かすには Twitter にアプリケーションを登録して、ConsumerKey と ConsumerSecret を取得する必要があります。 登録は dev.twitter.com から。

流れとメソッド

  1. リクエストトークンを取得する - get_request_token()
  2. リクエストトークンを元に認証 - url_to_authorize()
  3. Twitterログイン画面でアプリ認証
  4. アプリ認証ボタンを押すと callback_url に転送 (リダイレクト)
  5. アクセストークンの取得 - get_access_token()
  6. アクセストークンを元に認証が必要なリクエスト (GET account/verify_credentials) を発行、今回Twitterアカウント情報を表示 - gen_oauth_request()
#!/usr/bin/perl

use strict;
use warnings;
use utf8;

use CGI;
use OAuth::Lite::Consumer;
use LWP::UserAgent;
use JSON;

my $ConsumerKey = 'xxxxxxx';
my $ConsumerSecret = 'xxxxxxxx';
my $callback_url = 'xxxxxxxx';

my $consumer = OAuth::Lite::Consumer->new(
    consumer_key    => $ConsumerKey,
    consumer_secret => $ConsumerSecret,
    site => "http://twitter.com/",
    request_token_path => "https://api.twitter.com/oauth/request_token",
    access_token_path => "https://api.twitter.com/oauth/access_token",
    authorize_path => "https://api.twitter.com/oauth/authorize",
    callback_url => $callback_url,
);

my $query = CGI->new;

if ($query->param('oauth_token') && $query->param('oauth_verifier')) {
    my $access_token = $consumer->get_access_token(
        token => $query->param('oauth_token'),
        verifier => $query->param('oauth_verifier'),
    );

    my $req = $consumer->gen_oauth_request(
        method => 'GET',
        url => 'http://api.twitter.com/1/account/verify_credentials.json',
        token => $access_token,
    );

    my $ua = new LWP::UserAgent();
    my $res = $ua->request($req);

    die $res->status_line if ! $res->is_success;

    my $account = decode_json($res->content);

    print "Content-type: text/html;charset=UTF-8\n\n";
    print "<img src='$account->{profile_image_url}' />";
    print "<p>ID : $account->{id}</p>";
    print "<p>name : $account->{name}</p>";
    print "<p>screen_name : $account->{screen_name}</p>";
    print "<p>description : $account->{description}</p>";
    exit;
}
else {
    my $request_token = $consumer->get_request_token();

    my $uri = $consumer->url_to_authorize(
        token => $request_token,
    );

    print $query->redirect($uri);
}
exit;

関連サイト

PHPを 5.1.x から 5.3.x にアップデートすると、phpMyAdmin にアクセスできなくなった

2011年4月 4日 17:29 コメント(0)

phpMyAdmin のエラー表示には、

エラーが出たためセッションを開始できませんでした。PHP やウェブサーバのログファイルに出ているエラーを確認して、PHP を正しく設定してください。

と。以降、phpMyAdmin のログイン画面が表示されてもログインできず。

セッションファイルの保存場所 /var/lib/php/session のパーミッションが 770 (drwxrwx---) になっているので、セッションファイルが書き込めない状態になっているようだ。

sudo chmod 777 /usr/lib/php/session

で、パーミッションを 777 (drwxrwxrwx) に変更するとログインできた。

PHP をアップデートするときは、確認しておきたい。

関連する記事をピックアップ

Google Appsを使って独自ドメインのメールアドレスで Gmail

2011年3月 1日 22:53 コメント(0)

メールサーバを立ち上げて独自ドメインでメールを受け取るといつのまにかスパムメールが届く。基本はスパムフィルタを導入したりサーバの設定を調整することで対応するが、なかなか根絶は難しい。日々のメール処理でスパムメールに悩まれている方も多いと思う。今回優れたスパムフィルタがあるGmailでメールを受け取ってみることに。

独自ドメインとムームードメインでDNSがカスタマイズできるムームーDNSを使ってやってみます。

まずGoogle Appsで申し込み。

Google Appsは、ユーザーアカウント50個まで無料で使える。それ以上は Google Apps for Business で。いろいろな機能を追加で使えたり、Gmailの容量も25GBに。月額6,000円。

すでにドメインを持っている場合は、ドメイン名を入力して申し込もう。あとはフォームに従って入力していく。

googleapps1.png

次はドメインの所有確認。HTMLファイルをアップロードするか、CNAME レコードの変更の2つの方法。今回はHTMLファイルのアップロードで対応。

googleapps2.png

googlehostedservice.html にテキストを入力して作成保存。サーバにアップロード。 「確認」ボタンを押す。

上手くいくと設定ガイドに。

まずは、「組織とユーザー」でいままで運営していたメールアカウントを移行する。 「新しいユーザーを作成」ボタンを押してメールアカウントを作っていく。

googleapps3.png googleapps4.png

作成後、ダッシュボードへ。「Gmailを有効にする」をクリック。

googleapps5.png

ここからムームードメインの管理画面でDNSをカスタマイズします。ムームーDNSのカスタム設定でMX レコードごとにGoogle Appsの管理画面にある表に従って情報を入力していきます。「セットアップ情報変更」ボタンを押して反映。DNSの反映に時間がかかるので一休み。

googleapps6.png

そして、Google Appsの管理画面に戻って「指定された手順を完了しました」ボタンを押して完了。

MXレコードの確認。最大48時間程度かかるようだ。

無事反映されると、Gmailから独自ドメインのメールアドレスとパスワードでログイン。

googleapps7.png
googleapps8.png

これで独自ドメインを使ってメールを送ったり受け取ったりできる。日々のメール処理でスパムメールに悩まれている方はどうぞ。

Webサービスやインターネットメディアをつくってアイデアをカタチにしています。企画設計からプログラミング (主にLAMP環境, Perl/PHP, JavaScript, HTML, CSS, JSON)、データベースやサーバ構築、デザインまでバリバリやっています。最近はフレームワークやウェブアプリも。

Twitter, はてブ, GREE, ブクログ

最近のコメント

  • 表示件数はデフォルトで、1ページに表示す (thingsym)
  • 大変役立ちました。 JSON FEEDを (bunbun)
ページの先頭へ