クロスドメイン対応

2013/03/21 | jQuery

どうも最近はクロスドメインでもjsonを扱えるらしい。なんでもCross-Origin Resource Sharing(CORS)というらしい。

仕事でサーバ処理の担当者から、「jsonの通信先サーバ変えるんで」とか言われて心配した。Access-Control-Allow-Originレスポンスヘッダを返せば大丈夫、との言葉を信じて言われるままにURLを書き換えたのだが・・・結果騙された。IE動かないじゃん。

jQueryでAjax通信しているのだが、これ単発では対応できないことが調べてみて初めてわかった。怒っても始まらないのでもう少しまじめに調べてみた。

最近のモダンブラウザはたいてい大丈夫らしいが、IE8、IE9は実装方法が違うらしいのでNG。IE7以前は非対応。IE10以降で他のブラウザたちと足並みをそろえるらしい。たいていのブラウザはAjaxでCORSする際、XMLHttpRequestを使用するが、IEだけはXDomainRequestってのを使い、かつjQueryはXDomainRequestを使っていないので、必然的にjQuery単体ではCORSなAjax通信ができないということらしい。Firefoxtとかで動いていても、IEでコンソール出力すると「アクセスが拒否されました」とか出力される。

この時点でサーバ担当者に「やっぱ戻したほうが」と相談しようかと思ったけどたまたま外出中だったので、もう少し調べてみた。そしたら、やっぱり世の中には大変良くできた方がいらっしゃって、jQueryのプラグインっぽい形式で、ブラウザによる分岐処理を発見した。

詳しい説明はこちら(CORSによるクロスドメイン通信の傾向と対策)

結果として、見事にIEでも取得することができた。サーバ担当者には追加費用を請求したいくらいだったが、今回は勉強になったのでよしとすることにした。

 

MySQLのバックアップ

2013/03/16 | MySQL

MySQLのバックアップで躓いたのでメモ。

クライアントからの依頼でサーバの移行作業中、MySQLのバックアップができなくて困った。phpMyAdminからエクスポートしようとしたのだけれど、ダウンロードしたファイルが0キロバイトになってしまう。何故だろうと調べたら、どうやらデータ量が多すぎるため、PHPでエラーが出ているような感じ。たった40MiB程度のデータしかないのに。root権のない専用サーバだから付属のphpMyAdminの設定を変更することもできない。専用サーバなんだから単にフリーソフトを置いとくだけ、とかやめてくれよ。

ドキュメントルートに別途phpMyAdminを入れようかと思ったけど、はまってしまうと怖いので専用のツールがないか調べてみたらありました。phpMyBackupPro(略してpMBP)。

まずダウンロード、展開してサーバにアップロード。次にパーミッションの変更。「global_conf.php」「export/」のファイル、ディレクトリをそれぞれ777に変更。そしてウェブからアクセスする。「MySQL data is not correct.」というメッセージが出ていても気にしない(データベースに接続できていませんという意味らしいので表記を直してほしいな)。メニューのconfigurationタブからホスト名、ユーザ名、パスワードを入力して保存する。この時点で表示されているエラーも消える。

ちなみに借りているサーバでは、デフォルトのホスト名がlocalhostになっていた。これはこれでいいはずなのだが、ユーザ名とパスワードを正しく入力しても何時まで経ってもエラーが消えない。まさか、と思って記述を127.0.0.1にしたらうまく動いてくれた。まったくこのサーバは異常だと思う。普通のサーバらしく設定してくれさえすればなんの問題もないのに。

その後、メニューのbackupをクリックし、バックアップしたいデータベースを選んで、「Backup」ボタンをクリックし、「File successfully saved as hoge.1363399936.sql」などと表示されたらバックアップは無事終了。最初にパーミッションを変更したexport/にファイルが保存されている。

このツールはインポート機能も備えているので、次回、これも試してみるとしよう。

FTPサーバからファイルを一括転送

2013/03/04 | その他

FTPクライアントを使いたいわけではなくてコマンドライン上での話。

サーバのデータを別サーバに移行する。移行元がレンタルサーバ、移行先が専用サーバ。

ファイルが数十MBとか、小さなウェブサイトなら、GUIなFTPクライアントで一旦ローカルディスクに保存して、移行先サーバにアップロードすればいい。でも、さすがにGB単位の量になると、それはとっても面倒な作業だ。なので楽をする方法を考える。

一番簡単な方法はrsyncだけど、レンタルサーバでは当然そういうサービスはない。必然的にFTPとなるわけだが、コマンドラインでmgetするとしても、移行元がディレクトリで階層構造をとっている場合、コマンド一発では取得することができない。

そんな時に素晴らしいのがwget。ウェブページ取得とかファイルダウンロードとかでしか使ったことなかったけど、FTPクライアントにもなる。以下のコマンドを実行すれば、指定したディレクトリを一括で(再帰的に)ダウンロードしてくれる。

wget -mc ftp://user:password@host/path/to/target/

-m
とっても便利なオプション。ミラーリングができちゃいます(指定したディレクトリをごっそり頂きます)。

-c
とっても便利なオプション。レジュームができます(途中転送に失敗してもやり直してくれます)。

これでひとつのお仕事の問題点全てクリア。次のお仕事に移ります。


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