2016年8月20日土曜日

Raspberry piにMySQLを入れる

http://kamuycikap.hatenablog.com/entry/2015/02/25/184420
http://make.bcde.jp/raspberry-pi/データベースを使うmysql/
を参考にした。終わり。

Raspi Apache PHP Install -> File Upload Memo

ラズパイでApache使ってwebサーバを立ち上げる。
Apache使ってWebサーバ構築したよ!的なのはいっぱい見る。
インストールして起動したよ!てところまで書いてる。

でも、その後どうやればいいのか誰も書いてない。
自分はホームページとか作ったことないし。。。
どうしよう。。。

忘れそうやし、わけわからんかったけど、実際にやったことをメモ(覚えてる範囲で)。

▪️OS
OS  :Raspbian  Jessie。
これに関してはもう忘れたので、パス。

▪️SSH
これに関しても忘れたので、パス。
http://qiita.com/morizotter/items/48ad0b17207b0dd66cac
http://usicolog.nomaki.jp/engineering/raspberryPi/raspberryPi_SSH.html
さんとか、いろいろ参考にした記憶はあるけど。。。
巡ったサイトが多すぎてリストにする気が起きない。(他の操作に関しても)
有線LANだとサクッといくっぽい?
無線LAN環境しかないから、RaspiにUSB無線LAN子機つないで、なんかいろいろ設定した。
ここでかなり時間食った気がする。confファイルをいじってなんかいろいろしたような・・・忘れた。

▪️Apache
http://usicolog.nomaki.jp/engineering/raspberryPi/raspberryPi_Apache2.html
https://www.raspberrypi.org/documentation/remote-access/web-server/apache.md
一番シンプルで初心者な自分的にはわかりやすかった。
とりあえず、
sudo apt-get install apache2
ってすれば、Apache入るし、勝手に動作開始する。
Raspiのブラウザ起動して、URLの欄に
http://localhost/
って打つと、
It Works!
ってでる。そしたらOK。起動できてる。
もしくは、ifconfigかなんかでRaspiに割り当てられてるIPアドレス見て、
http://xxx.xxx.xxx.xxx
(例えば、http://192.168.0.3)とかやると、Raspiにつながって、
It Works!
って同じようにでる。

みんなRaspiに外部からアクセスするためには、ルータをいじって、ポート80を解放しましょうとか書いてたけど、自分はローカルで使いたかったので、無視した。

▪️PHP
とりあえず、なんかみんなしてるし入れといた。
sudo apt-get install php5 libapache2-mod-php5 -y
これを叩けば終わり。勝手にインストールしてくれる。


で、こっからが問題。
まず、Raspiにアクセスした時、どこのファイルが表示されているのか?という問題。
絶対パスで、/var/www/html/index.html のファイルがそれにあたる。
つまり、これを書き換えれば、自分好みのHPを表示できる。
ただし、/var/www/以下?のフォルダ、ファイルはすべてroot権限でないと編集できないようになってる。
だから、編集する時は、sudo nano index.html みたいな感じで、管理者権限で毎回実行した。
ちなみに、オリジナルのindex.htmlを変更して、戻らなくなるのが怖かったので、
sudo cp index.html index_original.html
ってして、コピー作ってから編集した。
なんか、Apacheは、index.htmlとか、index.phpとか、indexっていう名前のファイルを探して、表示してるらしい。

で、index.htmlを編集した。でも、自分はチキンなので、全部をまるっと変えるのではなく、<body> </body>の中身だけ変更。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Hello World</title>
    <style type="text/css" media="screen">
  * {
    margin: 0px 0px 0px 0px;
    padding: 0px 0px 0px 0px;
  }

  body, html {
    padding: 3px 3px 3px 3px;

    background-color: #D8DBE2;

    font-family: Verdana, sans-serif;
    font-size: 11pt;
    text-align: center;
  }

  div.main_page {
    position: relative;
    display: table;

    width: 800px;

    margin-bottom: 3px;
    margin-left: auto;
    margin-right: auto;
    padding: 0px 0px 0px 0px;

    border-width: 2px;
    border-color: #212738;
    border-style: solid;

    background-color: #FFFFFF;

    text-align: center;
  }

  div.page_header {
    height: 99px;
    width: 100%;

    background-color: #F5F6F7;
  }

  div.page_header span {
    margin: 15px 0px 0px 50px;

    font-size: 180%;
    font-weight: bold;
  }

  div.page_header img {
    margin: 3px 0px 0px 40px;

    border: 0px 0px 0px;
  }

  div.table_of_contents {
    clear: left;

    min-width: 200px;

    margin: 3px 3px 3px 3px;

    background-color: #FFFFFF;

    text-align: left;
  }

  div.table_of_contents_item {
    clear: left;

    width: 100%;

    margin: 4px 0px 0px 0px;

    background-color: #FFFFFF;

    color: #000000;
    text-align: left;
  }

  div.table_of_contents_item a {
    margin: 6px 0px 0px 6px;
  }

  div.content_section {
    margin: 3px 3px 3px 3px;

    background-color: #FFFFFF;

    text-align: left;
  }

  div.content_section_text {
    padding: 4px 8px 4px 8px;

    color: #000000;
    font-size: 100%;
  }

  div.content_section_text pre {
    margin: 8px 0px 8px 0px;
    padding: 8px 8px 8px 8px;

    border-width: 1px;
    border-style: dotted;
    border-color: #000000;

    background-color: #F5F6F7;

    font-style: italic;
  }

  div.content_section_text p {
    margin-bottom: 6px;
  }

  div.content_section_text ul, div.content_section_text li {
    padding: 4px 8px 4px 16px;
  }

  div.section_header {
    padding: 3px 6px 3px 6px;

    background-color: #8E9CB2;

    color: #FFFFFF;
    font-weight: bold;
    font-size: 112%;
    text-align: center;
  }

  div.section_header_red {
    background-color: #CD214F;
  }

  div.section_header_grey {
    background-color: #9F9386;
  }

  .floating_element {
    position: relative;
    float: left;
  }

  div.table_of_contents_item a,
  div.content_section_text a {
    text-decoration: none;
    font-weight: bold;
  }

  div.table_of_contents_item a:link,
  div.table_of_contents_item a:visited,
  div.table_of_contents_item a:active {
    color: #000000;
  }

  div.table_of_contents_item a:hover {
    background-color: #000000;

    color: #FFFFFF;
  }

  div.content_section_text a:link,
  div.content_section_text a:visited,
   div.content_section_text a:active {
    background-color: #DCDFE6;

    color: #000000;
  }

  div.content_section_text a:hover {
    background-color: #000000;

    color: #DCDFE6;
  }

  div.validator {
  }
    </style>
  </head>
  <body>
    <?php
      echo "Hello World!";
    ?>
    <?php
      echo date('Y-m-d H:i:s');
    ?>
  </body>
</html>



すると、こうなる。http://localhost を叩いた時、Hello Worldって出てれば成功。
あとは、HTMLの文法にのっとって好きに書いたら動くはず。(これはまだ
やってない)

とりあえず、index.htmlはできたので、今度は、ファイルを送信・受信したいと思った次第で。
/var/www/html/ の下に、send_text.phpと、receive_text.phpを作成する。
phpは、htmlの中に組み込める言語らしく、phpで書いた部分があれば、htmlではなく、拡張子をphpとする必要がある。ただ、phpで書いた部分がなくても、別にphpとしていて問題なく動くので、とりあえずphpとした。
cdで/var/www/html/に移動して、
sudo nano send_text.php
とすると、send_text.htmlが作成され、編集画面に遷移する。
nanoは、ただのテキストエディタ。vim使ってる多いけど、自分には難しかったよ。。。
send_text.htmlは、次の感じ。これ、どっかからコピペした気がする。
URL:http://www.php-labo.net/tutorial/php/upload.html
かな?
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>FileUploadTest</title>
</head>
<body>
<form action="http://XXX.XXX.XXX.XXX/receive_text.php" method="POST" enctype="multipart/form-data">
  <input type="file" name="file">
  <input type="submit" value="ファイルをアップロードする">
</form>

</body>
HTMLのフォームってやつを使って、ファイルをアップロードする。というか、送信する。
<form action="http://XXX.XXX.XXX.XXX/receive_text.php" method="POST" enctype="multipart/form-data">
  <input type="file" name="file">
  <input type="submit" value="ファイルをアップロードする">
</form>
っていうところが、肝。
HTMLのフォームってやつは、ボタンを勝手に作ってくれるらしい。
actionが、ボタン押したらどのファイル実行する?ってやつ。
だから、これから作るreceive_text.phpを実行してくださいってことで、これを指定。
http://XXX.XXX.XXX.XXXは、今までRaspiにアクセスしてきたIPアドレス入れる。
だから、実際には、例として、http://192.168.0.3/receive_text.php ってなる。
methodは、POST、GETとかがあるらしいが、テキストファイルとかのファイルを送る時はPOSTらしい。GETは文字列データとかかな。

次、receive_text.php作る。
sudo nano receive_text.php
send_text.phpで作ったように、receive_text.phpも作成する。
例のごとく、これもコピペなわけで・・・
URL:http://www.php-labo.net/tutorial/php/upload.html
http://www.php-ref.com/web/03_move_uploaded_file.html
send_text.phpとおなじ。
<html>
<head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>sample</title>
</head>
<body>
<p>
<?php

echo "Upload File Name : " , $_FILES["file"]["name"] , "<BR>";
echo "MIME Type        : " , $_FILES["file"]["type"] , "<BR>";
echo "File Size        : " , $_FILES["file"]["size"] , "<BR>";
echo "Temp File Name   : " , $_FILES["file"]["tmp_name"] , "<BR>";
echo "Err Code         : " , $_FILES["file"]["error"] , "<BR>";

if (is_uploaded_file($_FILES["file"]["tmp_name"])) {
  if (move_uploaded_file($_FILES["file"]["tmp_name"], "/var/www/html/img/" . $_FILES["file"]["name"]))
  {
    chmod("/var/www/html/img/" . $_FILES["file"]["name"], 644);
    echo $_FILES["file"]["name"] . "をアップロードしました。";
  } else {
    echo "ファイルをアップロードできません。";
  }
} else {
  echo "ファイルが選択されていません。";
}

?>
</p>
</body>

</html>
多分、ちゃんとファイルが送られてきてるのかを見るために、ファイルの情報を表示するようにちょっと追加したのか?わからんけど。。。ほぼ丸こぴですね。
ここで重要なのが、
send_text.phpの
<input type="file" name="file">
receive_text.phpの
$_FILES["file"]["name"]
の赤字部分がおなじであること。(多分)
receive_text.phpの似たような箇所($_FILES["file"])は、全部同様に一致してないといけない。
これで終わり。
receive_text.phpは、/var/www/html/img/ に送られてきたファイルを保存するだけ。
(テキストファイルなのにimgフォルダとは・・・)
なので、
htmlフォルダ内にcdで移動して、
sudo mkdir img
として、imgフォルダを作成しておく必要がある。

あとは、Raspiのブラウザ(他のPCからでもいい)で、
http://XXX.XXX.XXX.XXX/send_text.php
とすれば、さっき作ったsend_text.phpの画面が開く。
/var/www/html/以下のファイルは、こんな感じで参照できるっぽい。
ファイルを指定して、Submitボタンを押せば、自動的にreceive_text.phpの画面に遷移する。
成功したら"○○○○○をアップロードしました。"ってでるし、
失敗したら、"ファイルをアップロードできません。"ってでる。
ファイル選択せずにSubmitボタン押せば、"ファイルが選択されていません。"ってでる。

一応、/var/www/html/img/の中に、ファイルがアップロードされているかどうかを確認したらいいと思う。
cdで移動して、lsでみる。

忘れてた。
/var/www/以下の権限をrootからwww-dataに変更した。
関係あるかはわからんけど。
Apacheはwww-dataというユーザーとグループで動かされているらしい。
もしかしたら、phpからのファイルコピーとかは、これをしていないといけないのかもしれない。
あと、piユーザーで動かす時には、piユーザーをwww-dataのグループに所属させてやらないといけない。とかも書いてあったから、それもした。
http://netlog.jpn.org/r271-635/2013/01/raspberry_pi_webserver.html
http://takuya-1st.hatenablog.jp/entry/20130102/1357112844
とかを参考にした。

なんか躓きまくって、いろんなところ参照したし、いろいろ遠回りしたから、やったのはこれだけではないけど、もう書くのめんどいし終わり。