MySQLにリモート接続を許可させる


新サービス向けに「さくらのレンタルサーバー」を契約することになった。
普通にスタンダードプランを月額515円で契約しても十分安いのだが、ふと隣のライトプランが目に止まった。なんと月額換算129円だ。
さくらのレンタルサーバー

安いけど、MySQLがない。これでは使えない。
いやまて、データベースはすでに運用しているさくらVPS上のMySQLを使えばいいじゃないか。レンタルサーバーはPHPアプリケーションをhttpsで使うためだけに契約するのだから。

というわけでさくらVPS上で稼働してるMySQLにリモート接続を許可させてみることにする。


#権限付与 (www9999は自分の環境に読み替えて)
mysql> GRANT ALL ON DB_NAME.* TO user@www9999.sakura.ne.jp identified by 'パスワード' WITH GRANT OPTION;
Query OK, 0 rows affected (0.62 sec)

#権限変更を反映
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.02 sec)

#ユーザー一覧表示
mysql> SELECT user,host FROM mysql.user;
+--------+--------------+
| user   | host         |
+--------+--------------+
| root   | 127.0.0.1    |
| user |www9999.sakura.ne.jp |
| root   | ::1          |
| root   | localhost    |
| user | localhost    |
+--------+--------------+
5 rows in set (0.00 sec)

#MySQLからログアウト
mysql> exit
Bye

上記設定してさくらのレンタルサーバー上からPHPでSQLを叩いてみると、無事アクセス成功。もうさくらのレンタルサーバーは案件ごとにライトプラン(年額1,543円)でいいじゃないか。

phpmyadminからインポートできない大きなCSVをコマンドラインでインポートする


mysql > load data local infile "/path/to.file.txt" into table `TBL_TABLENAME` fields terminated by ',';

予めFTPでサーバーにCSVファイルをアップロードしておいて、MySQLにコンソールからログインして上記コマンドを叩きます。CSVの1行目にフィールド名が入っているとそれもデータとして読み込まれてしまうので注意。

mkdirでフォルダを作成するとNo such file or directoryエラーが発生する


PHPでサーバー上にフォルダを作成する時、No such file or directoryエラーが発生。
今から作ろうとしているフォルダに対して「そんなフォルダ無いよ」と言われも。

原因は、mkdir()関数に渡す引数の不足。
2階層以上の深さを一度に作成するときには、第3引数にTRUEを付ける。

mkdir('./aaa', 0777);

これはOK。aaaフォルダを作るだけなので第3引数は省略可能。

mkdir('./aaa/bbb', 0777);

これで上記エラー発生。aaaフォルダを作成し、更にその下にbbbを作ろうとしている。

mkdir('./aaa/bbb', 0777, TRUE);

これで正常に作成できました。

Nginxのバーチャルドメインでエラー


Nginxのバーチャルドメインを設定していてエラーが発生したので、対処法を自分メモ。

/etc/nginx/conf.d/virtual.conf に下記を追記

server {
           listen   80;
           server_name domain1.com;
           access_log /home/demo/public_html/domain1.com/log/access.log;
           error_log /home/demo/public_html/domain1.com/log/error.log;
           location / {
                       root   /home/demo/public_html/domain1.com/public/;
                       index  index.html index.php;
                       }
           }

/etc/init.d/nginx configtest を実行

nginx you should increase server_names_hash_bucket_size 32

エラー発生..

/etc/nginx/nginx.conf のhttpディレクティブに下記を追記

<code>http {
    server_names_hash_bucket_size  64;
    ...
}

PHPExcelのXMLWriter.phpエラー


PHP Fatal Error: Class 'XMLWriter' not found in 
/***/Classes/PHPExcel/Shared/XMLWriter.php on line 44

PHPでエクセルファイルを生成するPHPExcelを使おうとして上記エラーが発生した時の対処法です。

# yum install php-xml

GMOクラウドVPSでphpMyAdminを使う


今度立ち上げる新サービス用に、GMOクラウドVPSを契約しました。
http://vps.gmocloud.com/

インストールパッケージでLAMPPパックを選択すると、すぐにWEBサービスが始められる環境が整っているのですが、phpMyAdminがありませんでした。まあ、別環境で開発してVPSにデプロイするだけなら不要ですが、今回はVPS上で開発も行うため、phpMyAdminも必須です。yum -y install phpmyadmin でインストールしました。

すんなりインストール成功し、別サーバーで稼働しているデータをインポート。動作確認です。
ところが、SELECT句を実行してみると、件数は表示されるものの、一覧は表示されません。
PHP上からSELECT句でテーブルを参照すると、ちゃんと表示されるので、インポートは正常に行われている模様。
おそらく、GMOクラウドVPSのMySQLバージョンが最新すぎて、yumで入るphpMyAdminがちょっと古めなので、そのへんに原因がありそう。

で、このへんを参考に最新のphpMyAdminを入れてみました。phpMyAdmin自体のインストールは成功しましたが、ワタシの環境でも「phpMyAdmin – Error The json extension is missing. Please check your PHP configuration.」エラーは発生。おそらくGMOクラウドVPSユーザーでLAMPパッケージを選択した人、はみんなここでエラーが出ると思います。yumからjsoncをインストールしました。

jsonc

 

GMOクラウドVPSで躓いたのはここくらいです。あとはフツーのLAMPですね。

 

 

 

Linux上のPHPからSQL Serverに接続するとき、VARCHAR型の最大長は255バイトまで


PHPからSQL Serverに接続するとき、VARCHAR型の最大長は255に制限されてしまうので注意!
たとえSQL Serverで型を「varchar(2000)」としていても、mssql_fetch_fieldで調べると
Data type=>CHAR
Max length=>255
となっています。

これを回避するには、SQL Serverで「TEXT型」を選択します。
TEXT型なら64512文字まで使えるようです。

参考:

http://www.makizou.com/php/function.mssql-field-length.html

PHP が使用している API(MS DbLib C API)の制限により、 VARCHAR フィールドの長さは 255 までに限定されます。それ以上のデータを保存したい場合は、かわりに TEXT フィールドを使用します。

jQuery.ValidateをAJAXのPOST送信で使う


$(function(){
 $('#dialog').dialog({
  autoOpen: false,
  width: 800,
  height: 700,
  title: '送信フォーム',
  modal:true,
  resizable:true,
  buttons: {
   "送信": function() {
    if(confirm("送信してよろしいですか?")){
     if ($("#FRM").validate().form() == true) {
      var params = $("#FRM").serialize();
       $.ajax({
        url: "http://www.hoge.com/post.php",
        type: "post",
        data: params,
        async: false,
        cache: false,
        error: function(a,b){
         alert(b);
        },
       success: function(response) {
       }
      });
      $(this).dialog("close");
     }
    }
   }
  }
 }
}

12行めの書き方が、普通のmethod=”post”の時とは違うので注意されたい。
jQuery.UI のdialogと  jQueryのserializeと AJAXのPOST送信と jQuery.validateの併用方法。
よく使う黄金パターンなので、自分メモ。

さくらのVPSをApacheのバーチャルホストとWordPressのマルチサイトで使い倒す


さくらのVPSがラインナップ一新されて、新料金プランになりました。
かねてより「さくらのVPS 512 」を使用中でしたが、同じ金額でスペックが大幅に上がったため「さくらのVPS 1G」に乗り換えました。

その際、折角なのでApacheのバーチャルホストとWordpressのマルチサイトを1つのさくらVPS仮想マシンに設定し、月額980円でApacheのウェブサイトとWordpressサイトを同時に複数ホスティングできる環境を作ったので、自分メモ。

OSインストール

OSはさくら標準のCentOS6(64bit)を選択。なんだかんだで癖がなく使いやすいOSです。
ぐぐればインストール手順解説はいくらでも見つかりますが、今回もいつも使わせていただいているServer Worldさんでいきます。

ただし、Server Worldさんの記事では、iptablesは停止せよとしか書いてないので、ファイアウォール設定だけはコムギドットネットさんを参考に。

OSインストール→セキュリティ設定→WEBサーバーインストール→PHPインストール→MySQLインストール→phpmyadminインストールな流れで進めます。さくらのCentOSはyumのリポジトリも有名ドコロは設定済みなので、yum -y install … でスイスイインストールが進んでいきます。

Apacheのバーチャルホスト設定

いよいよバーチャルホスト設定です。名前ベースのバーチャルホストなので、1つのIPアドレスに複数のドメイン名をぶら下げます。httpd.confでServerNameとServerAliasを設定してやり、ドメインごとに別々のディレクトリを参照させます。

具体的な手順はブログのようなものを参考にさせていただきました。
今回の事例では、 /var/www/html/public_html以下にドメインごとのフォルダを作成しました。

ポイントは、 /var/www/html/直下にファイルを直接置かないこと。
なぜなら、ここにはあとでWordpressをインストールするからです。

WordPressのインストール

wordpressのインストールを進めます。公式サイトからアーカイブをダウンロードして解凍。wp-config.phpを編集したらフォルダまるごとアップロードします。(大量なのですごく時間がかかります。)MySQLにユーザーとDBを作成したらブラウザからinstall.php にアクセスして、最終処理です。簡単ですわー。
手順はいつも公式を参考にしてます。

先程ふれたように、Wordpressは/var/www/html/ にアップロードします。wordpressを複数ドメインで使う(マルチブログ化)するためには、ドキュメントルートにインストールされている必要があるからです。

WordPressをマルチブログ化する

普通にインストールされたWordpressは1つのドメイン名でしか使えません。これを複数のドメインに対応させるには、Wordpressのマルチブログ化を行います。

wordpressでは、サイトを

  • サブドメイン方式
    xxx.hogehoge.com
    yyy.hogehoge.com
  • サブディレクトリ方式
    www.hogehoge.com/xxx/
    www.hogehoge.com/yyy/

の2つから選べますが、マルチブログ化できるのはサブドメイン方式だけです。そして、表示方式はサイト運用開始後からはもう変えられません。ですので、必ず初めからサブドメイン方式を選択しておいて下さい。

詳しい手順については WordPressのマルチサイト機能で複数のブログを管理する がわかりやすいです。

 DNSサーバーの設定

ドメイン名は安くて安心なVALUE DOMAINで取得してます。
取得したドメインの設定画面を開き、

a * xxx.xxx.xxx.xxx
mx @ 10
txt @ v=spf1 ip4:xxx.xxx.xxx.xxx ~all

と書き換えています。まだメールサーバーは立ちあげてないので、今のところ2行目は不要ですが。
すべてのドメイン名で同じIPへ飛ばしてやればいいので、WPサイト、非WPサイトに関わらず使用する全ドメインの設定を書き換えます。あとはDNS情報が疎通するまでしばし待つ。。

上記で、通常サイトとWordpressサイトを独自ドメインでいくつでも(限界はありますが)ホスティングできる環境が作れました。
このブログも上記のやり方でさくらVPS上のWordpressで稼働しています。同じWordpress上にもう一つ別のドメインもぶら下がってますし、非WPの通常サイトも稼働しています。月額980円でここまでできるとは。

個人がちょっとサイトを作りたいときに1つもっておくと超便利ー。一家に1VPSすな。

お問い合わせ

桶シスへのお問い合わせはこちら。

Close