Adobe Flex 4.6 SDKを使うときは、Java32Bitを使うこと

ActionScriptの勉強中です。
FlashでWebサイトつくりたいとき、Adobeのソフト使う必要がある。で、調べてみたら、
Flash Professional 88,200円

高けーな・・・。

オープンソースのソフトないかな、と思って調べてみたけど、う~ん無さそう。
だけど、日本発のwonderflというサイトで、ActionScriptを使えるみたい。
http://wonderfl.net/

ちょっとためしてみた。
僕は画像ファイルを動かしてみたかったんだけれども、そういった画像ファイルをサーバ上にアップロードするのはできないっぽい。
なので、他のサイトの画像を読込んで、Flash上に表示してみるといったことをする形でやってみるしかなさそう。ためしてみたら、いちおうできたので、自PC上にWebサーバ建てて、そこから画像を提供すればとりあえず開発はできるのかなって思った。
とはいえ、ちょっと使いづらい。

で、よくよく調べたら、FlexSDKは無料で提供されている、ってわかった。
GUIでの開発はできないので、ゴリゴリのプログラミングになってしまうみたいだけど、簡単なものならこれで大丈夫そう。
ソースコードと一緒に画像ファイルを用意してコンパイルするって感じで、やりたいことを試せそう。

しかし!、試しに使おうとしたら、コンパイルが通らずに、ちょこっとハマった。
こんな感じのエラーが発生。いみわかんねーなー。

C:~~>mxmlc HelloWorld.as
 Error loading: C:\Program Files\Java\jdk1.7.0_07\jre\bin\server\jvm.dll

調べてみると、僕の使っているPCはWindows7 64Bitで、Javaの64Bit版をインストールしていた。だけれども、FlexSDKはJava32Bit版を使わないとダメらしい。
実は僕のPCには、Java32Bitもインストールしてあるんだけれども、パスが通っていないので、FlexSDKが64BitのJavaを使おうとしてエラーになっていた。
ためしに、コマンドプロンプトで、java -versionを実行してみると、64Bitって言われる。

C:~~>java -version
 java version "1.7.0_07"
 Java(TM) SE Runtime Environment (build 1.7.0_07-b10)
 Java HotSpot(TM) 64-Bit Server VM (build 23.3-b01, mixed mode)

Java32Bitをメインにすればいいんだけれども、システム全体の設定をいじりって、何か別のトラブル起きると萎えるので、FlexSDKでコンパイルするときだけJava32Bitを使うようにしたい。

僕が使っている環境:
Windws7 64Bit
flex_sdk_4.6


(1)失敗編 NG!
まずは、コマンドプロンプト上でPATH設定追加してみた。
コマンドプロンプトを開き、

set PATH="C:\Program Files (x86)\Java\jdk1.7.0_07\bin";%path%

として、PATHの頭にJava32Bitを追加。

java -versionを実行してみると、

 java version "1.7.0_07"
 Java(TM) SE Runtime Environment (build 1.7.0_07-b10)
 Java HotSpot(TM) Client VM (build 23.3-b01, mixed mode, sharing)

となって、64Bit版でなくなった模様。
この状態で、再度コンパイルを試してみたけど、同じエラーが出る。う~ん。


(2)成功編 Success!
で、おもったのが、もしかしてJAVA_HOMEに64Bit版のパスが設定されているのかも。
ためしにechoで設定値を確かめてみると、

 C:~~>echo %JAVA_HOME%
 C:\Program Files\Java\jdk1.7.0_07

やはり64Bit版になってる。
というわけで、設定変更した。

 C:~~>set JAVA_HOME="C:\Program Files (x86)\Java\jdk1.7.0_07\bin"
 C:~~>echo %JAVA_HOME%
 "C:\Program Files (x86)\Java\jdk1.7.0_07\bin"

でコンパイルが通るようになりました

 C:~~>mxmlc HelloWorld.as
 設定ファイル "C:[Flaxインストール先Dir]\frameworks\flex-config.xml" をロードしています
 C:~~\HelloWorld.as: 警告: このコンパイル単位では、設定されたランタイム共有ライブラリを読み込むた
 めの、factoryClass が Frame メタデータで指定されていませんでした。ランタイム共有ライブラリなしでコンパイルするには、-static-link-runtime-shared-librar
 ies オプションを true に設定するか、-runtime-shared-libraries オプションを削除してください。
C:~~\HelloWorld.swf (617 バイト)

HelloWorld.swf をブラウザにドラッグアンドドロップしたら、HelloWorld見えたよ。
やれやれ。


11/21追記

環境変数JAVA_HOMEにJava64Bit版のパスを指定したのは、たぶん自分自身だったと思う。
GoogleAppEngineの開発環境を準備するときに設定した気がする。

なので通常(Windowsの初期状態)は、JAVA_HOMEは設定されていない。
JAVA_HOMEは設定されていない状態であれば、PATHにJava32Bit版のパス追加でうまくいくのかもしれない。

Advertisements

WordPressプラグイン「Child Pages Shortcode」で、画像サイズがうまく表示されない

WordPressの勉強中です。こちらの本を使っています。
本格ビジネスサイトを作りながら学ぶ WordPressの教科書

なぜかうまくいかなくて、悩まされた。。

WordPressのプラグイン「child-pages-shortcode」を使うと、子ページの一覧を表示できます。
が、僕のPC環境がダメなのか、よくわからないんんだけれども、サムネイル画像の表示がイマイチうまくいかない。

通常、こんな感じで表示されるはずなんだけど、

僕の場合こうなる。
本来の画像が縮小表示されずに、一部分が切り出された形になってる。

WordPress本体の設定がダメなのかもしれない、と思っていろいろ調べたけど結局よくわからず。
最終的に、プラグイン「child-pages-shortcode」のソースコードをいじって、むりやり?動くようにした。このやり方があっているのかどうか、自信ないけど、練習用のサイトなのでとりあえずよしとした。
というわけで、その内容をメモ。

僕が使っているバージョン
WordPress3.4.2
Plugin 「Child Pages Shortcode 0.8.0」


(1)どんな状況か

WordPressの固定ページに以下のショートコードを記載すると、子ページの一覧が表示されます。

[child_pages width="50%" size="thumbnail"]

このときSizeに指定した値にしたがって、画像が表示されます。僕の場合、画像が半分だけ切り出された形で表示されてしまいました。

width=100%にすると画像全体が縮小された形で、きちんと表示されます。ただ、width=100%にすると、記事全体が拡大されて、1行で表示されます。(width=50%の場合は、記事が2行に表示されます) width=50%の状態でも、画像がきちんと表示されるはずなんだけど、なぜかうまく表示されない・・・

(2)やったこと

悩んだ結果、ソースをいじってしまった。

WordPressの「wordpress\wp-content\plugins\child-pages-shortcode」フォルダの中に、child-pages-shortcode.phpがあります。

その中の、

        if ($tid = get_post_thumbnail_id()) {
            $src = wp_get_attachment_image_src($tid, $p['size']);
            $img = sprintf(
                '<img src="%s" alt="%s" title="%s" />',
                esc_attr($src[0]),
                esc_attr(get_the_title()),
                esc_attr(get_the_title())
            );
        }

のところを、

        if ($tid = get_post_thumbnail_id()) {
            $src = wp_get_attachment_image_src($tid, $p['size']);
            $img = sprintf(
                '<img width="%s" height="%s" src="%s" alt="%s" title="%s" />',
                esc_attr($src[1]),
                esc_attr($src[2]),
                esc_attr($src[0]),
                esc_attr(get_the_title()),
                esc_attr(get_the_title())
            );
        }

といった形に修正した。
こうすると、実際のHTMLの中で画像のサイズを指定した形で出力してくれる。

<img width="302" height="123" src="http://localhost/wordpress/wp-content/uploads/2011/11/shiodome_mall.jpg" alt="汐留モール" title="汐留モール">

で、意図したとおりに画像が表示されるようになりました。

「Apache2.4.3+PHP5.4.7」セットアップ手順

WordPressを使うために、自分のPC(Windows7)上に「Apache + PHP」の環境をつくろうとしたんだけど、最新のApacheをダウンロードしようとしたら、Windows向けのインストーラがなかった。

http://httpd.apache.org/

ということで少し悩まされたので、手順をメモ。


(1)PHPインストール
PHPのホームページ(http://www.php.net/)で、Downloadを選択しWindows版を選択すると、Non Thread Safe 版とThread Safe版の2種類ある。
Apache1.xxを使う場合、Apache側がthreadに対応していないため、PHPのほうはNon Thread Safe を使うらしい。
今回は、Apache2.xxを使う予定なので、Thread Safe版を使えばよい。

zipファイルをダウンロードした後、ファイルを適当な場所に展開します。
ただし、インストール先のディレクトリ名に空白が入っていると良くないので、C:\Program Files とかは避けたほうがよい。

次に、コマンドプロンプトを開き、

 cd [PHPインストール先]
 php -v

と実行すると、PHPバージョンが返ってくるはず。

 PHP 5.4.7 (cli) (built: Sep 12 2012 23:48:31)
 Copyright (c) 1997-2012 The PHP Group
 Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies

これでインストールは、完了になる。
あとはWindowsの環境変数PATHに、php.exeへのパスを追加します。

ここで注意したい点としては、「ユーザの環境変数ではなくシステム環境変数のほうに設定しておく」ということ。

なぜかというと、あとでApacheインストールした後、サービスにApacheを登録し、サービスとしてApacheを起動します。(そのときにApacheは、SYSTEMユーザで起動されます。)
その状態で、PHPとの連携確認(phpinfoを見てみる)のはうまくいくんですけど、そのあとWordPressをインストールしようとしてエラーが出てしまうんです。たぶん、PHP-MySQLの連携がうまくいってない。


(2)Apacheインストール
Apache LoungeというサイトにWindows版のApacheがあります。
http://www.apachelounge.com/

Apacheバイナリ(zipファイル)と、PHPモジュールをダウンロードします。
httpd-2.4.3-win32.zip
php5apache2_4.dll-php-5.4-win32.zip

今回はPHP5.4.7を使うので、php5.4XX向けのモジュールを使います。
mod_securityを使いたい人は、それもダウンロード。

Apacheバイナリ(zipファイル)を、インストールしたい場所に展開すればインストールは完了。ただし、そのままだと起動しないので、初期設定が必要です。(あと、サービスへの登録も)

まず、[Apacheインストール先]/confディレクトリにある、httpd.confを修正します。
なぜかというと、Apacheインストール先を、c:/Apache24 にした想定で設定がされているため、インストール先ディレクトリ名を修正しないとApacheが起動しません。

c:/Apache24と記述されている部分を、自分がインストールした場所に書き換えます。修正個所は6か所

 Line 37: ServerRoot "[Apacheインストール先]"
 Line 237: DocumentRoot "[Apacheインストール先]/htdocs"
 Line 238: <Directory "[Apacheインストール先]/htdocs">
 Line 354:     ScriptAlias /cgi-bin/ "[Apacheインストール先]/cgi-bin/"
 Line 370: <Directory "[Apacheインストール先]/cgi-bin">

動作に直接影響ないけど、「設定されてないよ!」っていうエラーメッセージが毎回出るので、以下も設定しておきます。(初期設定では、コメントになっています)

ServerName localhost:80

次にApacheをサービスに登録します。

コマンドプロンプトを管理者として起動します。(コマンドプロンプトのアイコンを右クリックし、「管理者として実行」を選択。)
Apacheの便ディレクトリに移動し、「httpd -k install」を実行します

 cd [Apacheインストール先\bin]
 httpd -k install

登録されるとsuccessメッセージが返ってきます

 Installing the Apache2.4 service
 The Apache2.4 service is successfully installed.

httpd.confにエラーがあると、怒られます

 Testing httpd.conf....
 Errors reported here must be corrected before the service can be started.
 httpd: Syntax error on line 37 of [Apacheインストール先]/conf/httpd.conf: ServerRoot must be a valid directory

これでサービスから、Apache起動・停止ができるようになります
初期設定だと、スタートアップの種類が、自動起動になっているので、手動起動に設定変更しておきます。

補足情報:
Apacheをサービスから登録解除するときは、「httpd -k uninstall」コマンドを使う。
Apacheをコマンドで起動・停止するときは、「httpd -k start」「httpd -k stop」を使う。リスタートは「httpd -k restart」

参考サイト:《解説》Windowsサーバ用ApacheLounge版のApache2.4シリーズのインストール方法。


(3)PHP設定(WordPress向け)
php.iniを設定します。WordPressを使うことを想定しているので、文字コードはUTF8にします。

PHPインストール先に、php.ini-production というファイルがあるので、これをコピーしてphp.ini として保存。
そして以下のパラメータを設定。

 default_charset = "UTF-8"
 extension_dir = "ext"
 extension=php_mbstring.dll
 date.timezone ="Asia/Tokyo"
 mbstring.language = Japanese
 mbstring.internal_encoding = UTF-8
 mbstring.http_input = auto
 mbstring.http_output = UTF-8
 mbstring.encoding_translation = On
 mbstring.detect_order = auto
 mbstring.substitute_character = none;
 mbstring.func_overload = 0
 mbstring.strict_detection = Off

参考サイト:WindowsでPHPを使う方法、知ってる?~2.4.Windows用PHP5の設定~


(4)Apache設定(PHPとの連携)
まず、PHPとの連携のための設定をApacheのhttpd.conf内に追記します。
LoadModule ~~という設定の最後に、以下を追加します。

PHPIniDir "[PHPインストール先]"
LoadModule php5_module "[PHPインストール先]/php5apache2_4.dll"
AddHandler application/x-httpd-php .php
AddHandler application/x-httpd-php-source .phps

あと、DirectoryIndex に、index.phpを追加します。

<IfModule dir_module>
    DirectoryIndex index.html index.php
</IfModule>

次にPHPモジュールをPHPインストール先に配置します。
Apacheと一緒にダウンロードしたphp5apache2_4.dll-php-5.4-win32.zip の中に、PHP5.4.7向けのphp5apache2_4.dll が入っています。これを、PHPインストール先に配置します。

これでPHPとの連携ができるはずなので、動作確認します。
Apacheのhtdocsフォルダ内に、適当なファイル名のphpファイル(test.php)を置いて、なかにこれを書きます。

<?php
  phpinfo();
?>

ブラウザから、http://localhost/test.php とアクセスすると、phpinfoの画面が見えるはず。

-----------
12/17追記
httpd.confの修正をした後は、Apache再起動が必要です。


(5)Apache設定(WordPress用の追加設定)
WordPressを使う場合は、PHP-MySQLの連携が必要です。

まず、php.ini 設定修正し、MySQLモジュールを読込む設定をします。

extension=php_mysql.dll

ブラウザからphpinfoを見ると、モジュールが表示されていると思います。(Apache再起動必要だったかも)

次に、必要に応じて行う設定になります。
WordPressでパーマリンクを使う場合、Apacheでmod_rewriteモジュールが使えるように設定されている必要があります。あと、ファイルの書き換え権限を設定しておく必要があります。

Apacheのhttpd.conf に、LoadModule 設定追加します。

LoadModule rewrite_module modules/mod_rewrite.so

また、httpd.confの中の、htdocs配下の権限設定(AllowOverrideの設定)を修正し、権限追加します

<Directory "[Apacheインストール先]/htdocs">
         :       :
    Options Indexes FollowSymLinks
         :       :
    AllowOverride FileInfo Options
         :       :
</Directory>

次もまた、必要に応じて行う設定です。
WordPressを実際に動かしていると、なぜか特定の操作の時だけ文字化ける場合があります。僕の場合、「メニューの作成」をしているときに、保存するとメニューの名前が文字化けました。(固定ページの作成では文字化けないのに!)
このような時は、Apacheの.htacces に以下の設定を追加すると、(僕の場合は)解決しました。

WordPressをインストールしたディレクトリ内(index.phpと同じところ)に、.htaccesを配置して、以下を追記します。WordPressでパーマリンクを使っている場合はすでに.htaccesが存在すると思います。

<IfModule mod_php5.c>
php_flag  output_buffering              Off
php_value output_handler                none
php_value default_charset               UTF-8
php_value mbstring.language             Japanese
php_flag  mbstring.encoding_translation Off
php_value mbstring.http_input           pass
php_value mbstring.http_output          pass
php_value mbstring.internal_encoding    UTF-8
php_value mbstring.detect_order         ASCII,JIS,UTF-8,SJIS,EUC-JP
php_value mbstring.substitute_character none
</IfModule>

上記の<IfModule mod_php5.c>~の設定はhttpd.confに直接追記しても動作します。
文字コード関連設定は、php.iniに設定してあるので文字化けしないはずなんですけど、なぜか、.htaccesにも設定するとなおりました。

参考サイト:
memolog -捨てるには惜しい程度のゴミ^^ / php_flag not allowed here
Andante .htaccessファイルを使ったPHPの文字コードの設定