MAMPでローカル開発から、xserverのphpmyadminを使って、ローンチするまで。


phpの学習として、MAMP環境でWebサービスをローカルで開発したものの、
いざローンチするとなると、どうしていいかわからない。
そんな時のためのノートです。


【想定状況】
・　MANPで、phpmyadminを使ってお理、すでにDBにデータが入っている
・　DBとの接続に、PDOオブジェクトを使用している
・　ブログやポートフォリオ等で、すでにxserverを使用している

##xserver側でやること

ではまず、下準備。
MAMPはローカル環境用なので、外部サーバーのxserverでの準備です。

###xserverのサブドメインの申請
すでに、ドメインを持ってい人は、サブドメインを作成しましょう。

http://yahoo.co.jp
がメインドメインだとすると、サブドメインは
http://◯◯.yahoo.co.jp
となります。

新しいドメインとは異なり、無料かつお手軽に作成することができます。

xserverの「サーバーパネル」から
サブドメインの設定追加を行って行きます。

まずは
サーバーパネルから、ドメイン＞サブドメイン設定

![サブドメイン１.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352124/92a151f4-9d7c-24e4-1280-4ced7e71bce0.png)


ドメイン選択画面から、サブドメインを作成したいドメインを選択

![スクリーンショット 2019-04-15 16.17.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352124/1ebb1adc-4f64-053d-0935-d6a4afa4ceae.png)

サブドメインの設定追加をクリックし
![サブドメイン３.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352124/2bf6891c-f4ad-2e8e-46db-009d737f218b.png)


実際に使用していくサブドメイン名（任意の文字列）を入力、
右下の確認画面で、サブドメインの申請は終了です！
（コメントは入力しなくても大丈夫です。）

無事、サブドメインが認証されるまで１時間〜半日ぐらいかかります。
（深夜に行っても２時間くらいで反映されました。）

![スクリーンショット 2019-04-15 16.30.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352124/0e6243e0-c7ae-23c9-a67c-5bd34b74a9a2.png)



###xserverのphppmyadminの作成

次にローカル環境で使用していたDBを移行してくるためのDB設定を行います。
サーバーパネルの
データベース＞MySQL設定へ

![スクリーンショット 2019-04-15 16.15.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352124/f62ec430-e855-c73d-df66-6741a040388f.png)

MySQL追加からDBの名前を入力します。
なんでもいいですが、今回「Egg」としました。

![MySQL1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352124/4082799a-b21c-87ca-5f19-ef3ddc8ba069.png)

そうするとMySQL一覧のところに
「_Egg」というデータベースができています。

最初は、アクセス権未所有ユーザーのところに
自分のユーザーネームがあるので、アクセス権所有ユーザーに変更をしておいてください。

![MySQL2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352124/a76a32b7-f7a1-0e5f-31e9-0543c182315b.png)

また後々、
MySQL　ホスト名というところを使っていきますので
メモ帳なんかにコピーしておきます。


##ローカル環境周りでやること

次にやるべきことはDBの移行です。
今までもphpMyAdminを使用していましたが、
xserverに、新しく作りましたのでそちらに移動させていきます。

###phpMyAdiminへの移行

もともと使用していたphpMayAdminから
移行させたいDBを選択し、エクスポートを行います。

![ phpmyadmin.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352124/a0cd3d76-cc7d-081a-7668-8ae68aec7ab9.png)

詳しいやり方は以下のサイトを参考にしました。

https://inthecom.net/488

各項目にチェックをつけていき、

![スクリーンショット 2019-04-15 16.53.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352124/525d52ab-6c96-8faa-ac60-20819f172f3b.png)


最終的に、sqlファイルとして保存し、
移行先であるxserverのphpmyadminにインポートすれば、
DBの移行は終了です。

###PDOオブジェクトの編集

サブアドレスも発行し、DBの移行も終わり、
あとは、xserver内にドキュメントを写すだけ....ではありません。

重要なDB接続の
PDOを変更する必要があります。

変更前までは$dsnのmyssql以下は
ローカルで開発していたため、
hostがlocalhostもしくは127.0.0.1でしたが

先ほどxserveでの設定時に出てきたhost名を入力する必要があります。
またそれに合わせて、DBnameも変更する必要があります。

変更前

```php:
function dbConnect(){
  $dsn = 'mysql:dbname=egg; 
                host=localhost;
                charset=utf8';
  $user = 'root';
  $password = 'root';
  $options = array(
    PDO::ATTR_ERRMODE => PDO::ERRMODE_SILENT,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true,
  );
  $dbh = new PDO($dsn, $user, $password, $options);
  return $dbh;
}

```




変更後

```php:
function dbConnect(){
  $dsn = 'mysql:dbname=▲▲_egg; 
          host=◯◯.xserver.jp;
          charset=utf8';
  $user = 'DBのユーザー名';
  $password = 'DBのパスワード';
  $options = array(
    PDO::ATTR_ERRMODE => PDO::ERRMODE_SILENT,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true,
  );
  $dbh = new PDO($dsn, $user, $password, $options);
  return $dbh;
}

```
変更後の
dsn文のdbnameとhostは
上で自分で決めたDB名とホスト名

DBのユーザー名とパスワードは
xserverでphpmydminに入るときに使用するやつです。





###FTPソフトを使用した移行

あとは、FTPソフトを使用して移行していくだけです。

やり方は以下を参考にCyberDuckを使用していきました。

https://showtaki.com/30days-trial-3/

ファイルさえ移行しておけば
DBの接続を失敗していない限り、正常にサブドメインのアドレスで
Webページが表示されているはずです。

##【困った時】SQLのエラーの一覧

これを行う上で、SQLのエラーとだいぶにらめっこしたので
まとめておきます。

###ホスト名のエラー
```php:
SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: hostname nor servname provided, or not known
```

###DB名のエラー
```php:
SQLSTATE[HY000] [1044] Access denied for user ‘example’@’%’ to database 
```

###ユーザー名のエラー
```php:
SQLSTATE[HY000] [1045] Access denied for user ‘◯◯’@’127.0.0.1’ (using password: YES)
```

##最後に

役に立ったら、
いいねください！